![]() |
ClienttoScreen und Co.
Hallo Leute,
ich habe ein kleines Problem, und zwar habe ich mir eine Art Helper-Dialog (sehr einfache Variante von Word und Co) gemacht, in diesem werden nur Werte dargestellt. Ich möchte nun diesen Dialog per Maus verschieben können (da er immer im Vordergrund (in einer INI kann man es abstellen)). Mit ClientToScreen war ich auch schon fast am Ziel, dieser zeichnete mir allerdings den Dialog an Position des Cursors. Was beim Bewegen den Effekt hatte, dass der Cursor in der oberen linken Ecke bleibt. Ich möchte aber, dass der Cursor dort bleibt wo er anfangs war (innerhalb des kleinen Dialogs). Da viele schneller Code lesen können als meine Beschreibungen hier mal was ich bisher habe: :mrgreen:
Delphi-Quellcode:
procedure THelper.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer); var P1: TPoint; begin if ssLeft in Shift then begin p1.x := x; p1.y := y; p1 := ClientToScreen(P1); // MapWindowPoints(self.Handle,0 , p1, 1); wäre daß was für mich? ka //p1 := Screentoclient(p1); nochmal umbiegen !?!?! self.Top := p1.y; self.Left := p1.x; end; end; |
Re: ClienttoScreen und Co.
Delphi-Quellcode:
Gruß Hagen
var
P: TPoint; begin if ssLeft in Shift then begin P := ClientToScreen(Point(X, Y)); Top := P.X - X; // <-- Left := P.Y - Y; end; end; |
Re: ClienttoScreen und Co.
@negaH
Diese Lösung erschien mir auch vorher logisch, funktionierte leider nicht. Hat den selben Effekt, ist etwas seltsam, aber es muss eine logische Erklärung dafür geben. Werde morgen mal weiter sehen, nun ist erstmal Feierabend :cheers: |
Re: ClienttoScreen und Co.
Delphi-Quellcode:
FWasMouseDown: Boolean und FLastPos: TPoint musste als private Felder in dein TForm deklarieren.
var
P: TPoint; begin if not (ssLeft in Shift) then FWasMouseDown := False else if not FWasMouseDown then begin FLastPos := Point(X, Y); FWasMouseDown := True; end else begin Top := Top + (FLastPos.X - X); // <-- Left := Left + (FLastPos.Y - Y); FLastPos := Point(X, Y); end; end; Gruß Hagen |
Re: ClienttoScreen und Co.
Von der Idee gar nicht schlecht, allerdings sind die x und y Parameter die Koordinaten innerhalb des Forms. Ich brauche aber für die neue TOP und LEFT die Koordinaten vom Screen.
Werde mal weiter suchen, danke dir für deine Mühe. |
Re: ClienttoScreen und Co.
Ich hab mal weiter in Richtung API gesucht und habe recht brauchbares gefunden:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:46 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