Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Cursor Resource Einbinden klapt nicht warum ? (https://www.delphipraxis.net/137579-cursor-resource-einbinden-klapt-nicht-warum.html)

madina 23. Jul 2009 20:30


Cursor Resource Einbinden klapt nicht warum ?
 
Hallo,

ich habe versucht mit Resource Workshop V4.5, 5 verschiedene Cursors erstellt und in ein MyCursor.rc abgespeichert.

Dann mit brcc32.exe MyCursor.rc kompiliert
und ohne Probleme mir MyCursor.res ausgegeben.

{$R MyCursor.res} in mein Prog eingebunden und kompiliert keine Probleme.

dann in FormCreate wie folgt aufgerufen:
const cuHand= 1;
cuFaust=2;
Screen.Cursors[cuHand] := LoadCursor(HInstance, 'Cursor_1');
Screen.Cursors[cuFaust]:= LoadCursor(HInstance, 'Cursor_2');

PaintBox1.Cursor:= cuFaust;

Frage ?:
er ändert den PaintBox1.Cursor überhaupt nicht, obwohl er keine Fehler ausgibt

warum??

mfg

chaosben 24. Jul 2009 05:28

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Zitat:

Zitat von Die Delphi-Hilfe
Deklarieren Sie eine Cursor-Konstante, die nicht mit vorhandenen Cursor-Konstanten kollidiert.

1 und 2 kollidieren bei dir scheinbar mit einem bestehenden Cursor.
So müsste es theoretisch immer funktionieren:
Delphi-Quellcode:
var
  crMeine : Integer;

procedure TForm1.FormCreate(Sender: TObject);
begin
  crMeine := Screen.CursorCount + 1;
  Screen.Cursors[crMeine] := LoadCursor(HInstance, '3DWMOVE');
  PaintBox1.Cursor := crMeine;
end;

turboPASCAL 24. Jul 2009 09:38

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Eigentlich ist an dem gezeigten Quelltext, hier mal mit delphi-Tags ;)

Delphi-Quellcode:
const
  cuHand = 1;
  cuFaust = 2;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Screen.Cursors[cuHand] := LoadCursor(HInstance, 'Cursor_1');
  Screen.Cursors[cuFaust]:= LoadCursor(HInstance, 'Cursor_2');

  PaintBox1.Cursor := cuFaust;
end;
nichts falsch.


Alle Systemcursors haben einen Wert kleiner oder gleich Null.
Dem zufolge sollte das Beispiel funktionieren.

Was ich mir vorstellen kann ist, das die Cursors nicht geladen wurden.
Einfach mal wie folgt überprüfen:

Delphi-Quellcode:
const
  cuHand = 1;
  cuFaust = 2;

procedure TForm1.FormCreate(Sender: TObject);

  function LoadCursorFromResource(Instance: hInst; ResName: PChar): HCURSOR;
  begin
    Result := LoadCursor(Instance, ResName);
    if Result = 0 then
      ShowMessage(format('Cursor "%s" konnte nicht geladen werden.', [ResName]));
  end;

begin
  Screen.Cursors[cuHand] := LoadCursorFromResource(HInstance, 'Cursor_1');
  Screen.Cursors[cuFaust] := LoadCursorFromResource(HInstance, 'Cursor_2');

  PaintBox1.Cursor := cuFaust;
end;
Ohne diese Abfrage über eine Hilfsvariable wird im Falle das der Cursor nicht
geladen bzw. in der Resource gefunden wurde keine Fehlermeldung erzeugt.
Der Rückgabewert von LoadCursor ist im Fehlerfall Null (0) das heisst der
Defauldcursor (IDC_ARROW) würde geladen / angezeigt.

madina 24. Jul 2009 15:41

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Hallo,

wie richtig vermutet er liest den Cursor nicht richtig.

Ich habe versucht einzeln ein *.cur nach *rc zu speichern und dann brcc32.exe *.rc *.res ausgeführt. Er kann aber einzeln lesen.

Aber wie kann ich alle meine Cursors zusammen in eine *.res datei packen ??

mfg

lbccaleb 24. Jul 2009 15:48

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Hallo

Z.B. so:

Cursor einbinden

madina 25. Jul 2009 18:53

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Hallo,

nun habe ich geschafft alle meine *.cur Dateien in einem *.rc uns danach in *.res zu kompilieren und in mein Application erfolgreich einbinden und jeden Mauszeiger einzeln je nach Wunsch ansprechen und darstellen.

nächstes Problem:

Wenn ich in OnMouseDown(), OnMouseMove() und OnMouseUp() den Screen.Cursor:= cur... setze ist alles kein Problem, wenn ich nur den Mauszeiger für PaintBox1.Cursor:= cur... ändere, ändert sich der Mauszeiger unter gleichen o.g. Bedingungen nicht wie gewünscht alle richtig ansprechen und darstellen.

warum ??

mfg

turboPASCAL 25. Jul 2009 19:06

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Könntest du mal dein Programm/Source als Zip anhängen ?

madina 28. Jul 2009 13:38

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

wie gewünscht der Sourcedaten

nur bei Zuweisung der Cursorzeigern beim PaintBox1.Cursor klappe nicht alle Zeigerzuweisungen.

mfg

turboPASCAL 28. Jul 2009 14:14

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Das Problemchen ist das der Faustcursor immer wieder auf den Handcursor gesetzt wird.

Genau an dieser Stelle:
Delphi-Quellcode:
procedure TfrmPrintPreview.sbHandLupeClick(Sender: TObject);
begin
  if (sbHandLupe.Down) then PaintBox1.{Screen}Cursor:= crLupe
  else PaintBox1.{Screen}Cursor:= crHand;
end;
sbHandLupeClick wird in PaintBox1MouseUp aufgerufen.

madina 28. Jul 2009 20:03

Re: Cursor Resource Einbinden klapt nicht warum ?
 
Hallo,

solange ich den linken MouseTaste gedrückt halte und Mouse bewege sollte er eigentlich keine Fauständerung geben (was sich in Screen.Cursor ganz OK verhält) in der OnmouseMove. Wenn ich los lasse dann gibt es eine Mouseänderung zum crHand.

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz