AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Curosr-Änderung sofort wirksam

Ein Thema von e-gon · begonnen am 9. Sep 2012 · letzter Beitrag vom 9. Sep 2012
Antwort Antwort
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
154 Beiträge
 
Delphi 6 Enterprise
 
#1

Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:12
Hallo!

Wie kann ich eine Cursor-Änderung durch Image1.Cursor:= crCross; sofort wirksam werden lassen? Bisher wird der Cursor erst geändert, wenn sich der Mouse-Zeiger bewegt.

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:
...
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;
Prinzipiell funktioniert das ganze auch, allerdings erst wenn man die Mouse bewegt. Wie kann ich den Cursor zwingen sich sofort upzudaten? Über Image1.Update; oder auch eine simulierte Mousebewegung durch Aufruf von Image1MouseMove geht das leider nicht.

Gruß
e-g-o-n
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
8.799 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:18
Versuch mal:

Delphi-Quellcode:
ShowCursor(false);
ShowCursor(true);
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
154 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:34
Danke Uwe Raabe für die schnelle Antwort!

Funktioniert aber leider auch nicht...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.286 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:39
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#5

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:42
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

Geändert von blauweiss ( 9. Sep 2012 um 13:44 Uhr) Grund: roten Kasten ignoriert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.286 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 13:45
Edit: DeddyH, wir sollten heiraten
Ich werde das mal mit meiner Frau bereden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
e-gon

Registriert seit: 7. Jul 2003
Ort: Stuttgart
154 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 14:05
Hallo Leute!

Bevor ich jetzt hier eine Heiratsvermittlung eröffne erstmal vielen Dank! Es funktioniert!
Und man muss dazu nicht mal die Mouse verschieben! Ein einfacher SetCursorPos reicht aus.

Hier der Code falls noch jemand das Problem hat:
Delphi-Quellcode:
procedure TForm1.CursorUpdate;
var p: TPoint;
begin
  GetCursorPos(p);
  SetCursorPos(p.X,p.Y);
end;
Gruß
e-gon
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 14:09
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);
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#9

AW: Curosr-Änderung sofort wirksam

  Alt 9. Sep 2012, 14:25
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.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf