![]() |
Curosr-Änderung sofort wirksam
Hallo!
Wie kann ich eine Cursor-Änderung durch
Delphi-Quellcode:
sofort wirksam werden lassen? Bisher wird der Cursor erst geändert, wenn sich der Mouse-Zeiger bewegt.
Image1.Cursor:= crCross;
Hintergund: Auf meiner Form befindet sich unter anderem ein Image. Auf diesem Image soll gezeichnet werden können, wenn der Bentzer die Strg-Taste gedrückt hält und die Mouse-Taste drückt. Um anzuzeigen, dass das Image durch die Strg-Taste bereit ist bemahlt zu werden, soll sich der Cursor ändern. Dazu verwende ich folgenden Code:
Delphi-Quellcode:
Prinzipiell funktioniert das ganze auch, allerdings erst wenn man die Mouse bewegt. Wie kann ich den Cursor zwingen sich sofort upzudaten? Über
...
Form1.KeyPreview:= True; ... procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Shift=[ssCtrl] then begin Image1.Cursor:= crCross; end; end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Image1.Cursor=crCross then begin Image1.Cursor:= crDefault; end; end;
Delphi-Quellcode:
oder auch eine simulierte Mousebewegung durch Aufruf von
Image1.Update;
Delphi-Quellcode:
geht das leider nicht.
Image1MouseMove
Gruß e-g-o-n |
AW: Curosr-Änderung sofort wirksam
Versuch mal:
Delphi-Quellcode:
ShowCursor(false);
ShowCursor(true); |
AW: Curosr-Änderung sofort wirksam
Danke Uwe Raabe für die schnelle Antwort!
Funktioniert aber leider auch nicht... :( |
AW: Curosr-Änderung sofort wirksam
Sonst ermittle doch mit GetCursorPos die Mausposition, verschieb den Cursor mit SetCursorPos um 1 Pixel und wieder zurück. Das ist zwar nicht elegant, sollte aber funktionieren.
|
AW: Curosr-Änderung sofort wirksam
Hallo e-gon,
mit SetCursorPos sollte es funktionieren (evtl. zusätzlich mit dem Trick, erst die Maus um 1 Pixel zu versetzen, dann wieder zurück). Per Image1MouseMove positionierst Du übrigens nicht die Maus, sondern es wird hier nur die zugeordnete Eventmethode aufgerufen wie bei einer echten Mausbewegung. Gruß blauweiss Edit: DeddyH, wir sollten heiraten :-) |
AW: Curosr-Änderung sofort wirksam
Zitat:
|
AW: Curosr-Änderung sofort wirksam
Hallo Leute!
Bevor ich jetzt hier eine Heiratsvermittlung eröffne erstmal vielen Dank! Es funktioniert! :thumb: Und man muss dazu nicht mal die Mouse verschieben! Ein einfacher
Delphi-Quellcode:
reicht aus.
SetCursorPos
Hier der Code falls noch jemand das Problem hat:
Delphi-Quellcode:
Gruß
procedure TForm1.CursorUpdate;
var p: TPoint; begin GetCursorPos(p); SetCursorPos(p.X,p.Y); end; e-gon |
AW: Curosr-Änderung sofort wirksam
Habe etwas Nachforschung betrieben:
Tatsächlich ist es so, dass nur bei TWinControl-Nachfolgern die Änderung des Cursor sofort zum Update durchgereicht wird ("CMCursorChanged"). TImage ist aber ein TGraphicControl. Dort geschieht dies nicht unmittelbar. Mit dieser Zeile aus der CMCursorChanged-Funktion klappt es auch ohne Workaround. Einfach direkt hinter der "Cursor := ..."-Zeile einfügen:
Delphi-Quellcode:
// Handle = Self.Handle => Form1.Handle
Perform(WM_SETCURSOR, Handle, HTCLIENT); |
AW: Curosr-Änderung sofort wirksam
Du musst Screen.Cursor setzen, wenn die Änderung sofort wirksam sein soll.
Das Property Cursor, dass alle Controls haben, ist dafür gemacht nur einmal gesetzt zu werden. Es wirkt nur indirekt auf den eigentlichen Cursor. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:10 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