Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi SetCursorPos ScreentoClient (https://www.delphipraxis.net/128527-setcursorpos-screentoclient.html)

thomas2009 31. Jan 2009 16:12


SetCursorPos ScreentoClient
 
hallo

Delphi-Quellcode:
var pt: TPoint;
begin
  Pt := Form1.ScreenToClient(Mouse.CursorPos);
  Caption:= IntToStr(Pt.X)+', ' +IntToStr(Pt.Y);
//SetCursorPos(Mouse.CursorPos.X-,Mouse.CursorPos.Y);
end;
Wie kann ich den Cursor auf den Punkt setzen ? (ich verwende Timer )

DeddyH 31. Jan 2009 16:15

Re: SetCursorPos ScreentoClient
 
Na, Pt ist doch Dein Punkt, da dann mit SetCursorPos drauf.

himitsu 31. Jan 2009 16:15

Re: SetCursorPos ScreentoClient
 
am Einfachsten, indem du den gewünschten Punkt per ClientToScreen umrechnest und an den Mauszeiger übergibst.

DeddyH 31. Jan 2009 16:17

Re: SetCursorPos ScreentoClient
 
Wobei ich den Code noch nicht ganz verstehe: Mausposition ermitteln und dann dorthin positionieren :gruebel:?

thomas2009 31. Jan 2009 16:56

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:
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;
Nun soll der Timer den Cursor auf einen in die nähe liegenden Punkt positionieren
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

nuclearping 31. Jan 2009 16:58

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).

thomas2009 31. Jan 2009 19:12

Re: SetCursorPos ScreentoClient
 
Zitat:

Zitat von nuclearping
bla bla

Das 2. Schreiben ist nur für @DeddyH, der mein Ziel (Frage) nicht gut verstanden hat :idea:

himitsu 31. Jan 2009 21:03

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ß.

Praxist 1. Feb 2009 08:59

Re: SetCursorPos ScreentoClient
 
Ich verstehe nicht

//Edit

Es ist nicht möglich den Mauszeiger mit ScreenToClient zu positionieren

himitsu 1. Feb 2009 09:12

Re: SetCursorPos ScreentoClient
 
Zitat:

Zitat von Praxist
Ich verstehe nicht

was verstehst du denn nicht?

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:
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;
[add]
Zitat:

Es ist nicht möglich den Mauszeiger mit ScreenToClient zu positionieren
das hab ich auch nicht behauptet, aber damit läßt sich die Position berechnen, welche man SetCursorPos übergibt :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.

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