Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   System Cursor austauschen (https://www.delphipraxis.net/169733-system-cursor-austauschen.html)

Satyr 8. Aug 2012 12:57

System Cursor austauschen
 
Huhu,

ich weiß nicht ob das Thema hier richtig ist. Wenn nicht, bitte verschieben.

Meine Frage ist, ob ich die Vordefinierten Cursor temporär austauschen kann. Wie ich einen eigen Cursor als Zusatz einbinde und aktiviere weiß ich. Aber gibt es eine Möglichkeit (nur für ein Programm) zu bestimmen, welcher Cursor genau beim Einbinden von crHourGlass z.B. genommen werden soll? Also nicht der vom System vordefinierte...

Gruß,
Andreas

sx2008 8. Aug 2012 16:01

AW: System Cursor austauschen
 
Delphi-Quellcode:
Screen.Cursors[crHourglass] := LoadCursorFromFile({dateiname=}'cursors\sexygirl.ani')

Satyr 8. Aug 2012 16:23

AW: System Cursor austauschen
 
Ah ok, danke. Ich habs immer mit Applicatio.Cursors versucht. Deins klappt, vielen Dank :).

Satyr 12. Aug 2012 16:56

AW: System Cursor austauschen
 
Nabend,

ich nochmal. Ich habe die letzten Tage ein wenig experimentiert und scree.cursors ist mir nicht "global" genug. Nach einigem Googlen stieß ich auf SetSystemCursor().
Das funktioniert wunderbar. Nur habe ich mit dem zurücksetzen Probleme. Etwas Code:

Zuerst definiere ich die eigentliche BackupVariable im Unit Kopf:

Delphi-Quellcode:
...
var
  Form1: TForm1;
  CurSysCursor: HCURSOR;
...
Dann rufe ich einen Button auf, der diese Backup Variable EIGENTLICH füllen soll und danach den Mauszeiger ändern:

Delphi-Quellcode:
procedure TForm1.Button11Click(Sender: TObject);
var h: THandle;
begin
CurSysCursor := GetCursor;

h:=LoadImage(0, PChar(ExtractFilePath(Application.Exename) + '..\img\cursor\1.cur'), IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE or LR_LOADFROMFILE);
Screen.Cursors[1]:=h;

SetSystemCursor(Screen.Cursors[1],OCR_NORMAL);
end;
Das funktioniert. Möchte ich aber mit einem anderen Button den Cursor zurücksetzen, passiert... nichts.
Code:

Delphi-Quellcode:
SetSystemCursor(CurSysCursor, OCR_NORMAL);
Ich muss zugeben, ich beziehe mich bei dem Code "nur" auf gefundene Beispiele, weil ich leider selbst zu wenig Ahnung in dem Bereich habe.
Warum funktioniert das Zurücksetzen nicht? Gibt es andere "Notfall Reset" Funktionen die ich nutzen könnte? Hoffe Ihr könnt helfen...

Gruß,
Andreas

DeddyH 12. Aug 2012 17:02

AW: System Cursor austauschen
 
SetSystemCursor
Zitat:

hcur [in]

Type: HCURSOR

A handle to the cursor. The function replaces the contents of the system cursor specified by id with the contents of the cursor handled by hcur.

The system destroys hcur by calling the DestroyCursor function. Therefore, hcur cannot be a cursor loaded using the LoadCursor function. To specify a cursor loaded from a resource, copy the cursor using the CopyCursor function, then pass the copy to SetSystemCursor.
Wenn ich das richtig verstehe, wird der Cursor inhaltlich überschrieben, behält aber die id bei. Daher kann man ihn über die id nicht wieder herstellen. Sollte ich das fehlinterpretiert haben, bitte ich einen Wissenden um Korrektur.

Satyr 12. Aug 2012 17:06

AW: System Cursor austauschen
 
Das heisst ich kann meinen eigenen Cursor nicht einfach per ID setzen? Ich fand das ganz praktisch, weil ich ihn nicht per res laden wollte sollte ein wenig (datei-)austauschbarer.
Nur habe ich da nichts gefunden, wie das ohne ID geht (kann natürlich an fehlendem Wissen meinerseits liegen).

DeddyH 12. Aug 2012 17:17

AW: System Cursor austauschen
 
Ich habe so etwas noch nie versucht, aber wenn ich das richtig verstehe, benötigst Du zunächst eine Kopie des Originalcursors. Klappt es so?
Delphi-Quellcode:
CurSysCursor := GetCursor;
OldCursor := CopyCursor(CurSysCursor);
Und am Ende dann OldCursor statt CurSysCursor zuweisen. Diese Angaben sind allerdings ohne Gewähr. Übrigens sollte man wohl noch die entsprechenden Rückgabewerte auswerten.

Satyr 12. Aug 2012 17:25

AW: System Cursor austauschen
 
Wieso eine Kopie? CurSysCursor ist doch schon quasi eine Kopie, sobald es mit dem aktuellen Cursor gefüllt wird?

DeddyH 12. Aug 2012 17:26

AW: System Cursor austauschen
 
Hast Du meinen Vorschlag einmal ausprobiert?

Satyr 12. Aug 2012 17:49

AW: System Cursor austauschen
 
Ich bin grad unterwegs vom Büro nach Hause. Gib mir 20 Minuten, dann teste ich.
Als welchen Typ soll ich denn die OldCursor Variable definieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 Uhr.
Seite 1 von 2  1 2      

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