![]() |
SetCursorPos ScreentoClient
hallo
Delphi-Quellcode:
Wie kann ich den Cursor auf den Punkt setzen ? (ich verwende Timer )
var pt: TPoint;
begin Pt := Form1.ScreenToClient(Mouse.CursorPos); Caption:= IntToStr(Pt.X)+', ' +IntToStr(Pt.Y); //SetCursorPos(Mouse.CursorPos.X-,Mouse.CursorPos.Y); end; |
Re: SetCursorPos ScreentoClient
Na, Pt ist doch Dein Punkt, da dann mit SetCursorPos drauf.
|
Re: SetCursorPos ScreentoClient
am Einfachsten, indem du den gewünschten Punkt per ClientToScreen umrechnest und an den Mauszeiger übergibst.
|
Re: SetCursorPos ScreentoClient
Wobei ich den Code noch nicht ganz verstehe: Mausposition ermitteln und dann dorthin positionieren :gruebel:?
|
Re: SetCursorPos ScreentoClient
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist ein Beispiel, damit Ihr meine Frage gut versteht
siehe Anhang in Panel1 OnmouseMove werden die Maus-Position ermittelt :
Delphi-Quellcode:
Nun soll der Timer den Cursor auf einen in die nähe liegenden Punkt positionieren
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); var pt: TPoint; begin Pt := Panel1.ScreenToClient(Mouse.CursorPos); Edit1.Text:=IntToStr(pt.X); Edit2.Text:=IntToStr(pt.Y); end; das ist alles in dem Beispiel befindet der Cursor in die Koordinaten x=36, y=38 die Aufteilung des Panel sind aber 50 x 50 d.h. der Timer soll den Cursor auf den Punkt 50,50 setzen, da dieser Punkt am näherten ist |
Re: SetCursorPos ScreentoClient
Sich das nachdenken und experimentieren abnehmen lassen is aber uncool ... :roll: ... weil mit ein wenig von beidem kommste sicher auch auf die Lösung.
Tante Edith stellt grad fest, dass deine zweite Problembeschreibung nichts mit der ersten zu tun hat, oder? Weil so klingts jetzt nach einem Logikproblem (Wie finde ich die nächste Stelle für den Cursor) und nicht nach einem Verständnisproblem (wie platziere ich den Cursor). |
Re: SetCursorPos ScreentoClient
Zitat:
|
Re: SetCursorPos ScreentoClient
Abgesehn davon, daß ich dir die Lösung schon gab...
Wenn du den Mauszeiger starr auf einen Punkt ziehst: Hast du dir schön überlegt, wie man den Mauszeiger dann da wieder wegbekommt? Ich hab es in einem Programm so gelöst, daß ich nur das Ereignis/die Behandlung auf meine Punkte zog und den Mauszeiger sich frei bewegen ließ. |
Re: SetCursorPos ScreentoClient
Ich verstehe nicht
//Edit Es ist nicht möglich den Mauszeiger mit ScreenToClient zu positionieren |
Re: SetCursorPos ScreentoClient
Zitat:
Delphi-Quellcode:
// Pt = der Punkt im Panel1, wo der Mauszeiger hin soll
Pt := Panel1.ClientToScreen(Pt); SetCursorPos(Pt.X, Pt.Y); Ja und wie soll man den Mauszeiger wieder von einem Punkt wegbekommen, wenn er ständig wieder dahin zurückgesetzt wird, sobald man versucht diesen von da wegzubewegen? einfach mal in 'ner leeren Form einbauen ... und Maus in das Kästchen schieben: (Tipp, da OnMouseMove zum Glück nicht immer sehr schnell ist ... die Maus ganz schnell bewegen und ihr kommt eventuell wieder raus)
Delphi-Quellcode:
[add]
Procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Var Pt: TPoint; Begin //Pt := Form1.ScreenToClient(Mouse.CursorPos); {}Pt.X := X; // wozu Mouse.CursorPos abfragen, {}Pt.Y := Y; // obwohl man die Werte doch schon in X und Y hat? Caption := Format('%d:%d', [Pt.X, Pt.Y]); If (Pt.X in [100..200]) and (Pt.Y in [50..150]) Then Begin Pt.X := 100 + (200 - 100) div 2; // 150 Pt.Y := 50 + (150 - 50) div 2; // 100 Pt := Form1.ClientToScreen(Pt); SetCursorPos(Pt.X, Pt.Y); End; End; Procedure TForm1.FormPaint(Sender: TObject); Begin Canvas.Pen.Color := clBlack; Canvas.Brush.Style := bsClear; Canvas.Rectangle(100, 50, 200, 150); End; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:47 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