Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ClienttoScreen und Co. (https://www.delphipraxis.net/15683-clienttoscreen-und-co.html)

Touchdown 2. Feb 2004 16:58


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;

negaH 2. Feb 2004 17:08

Re: ClienttoScreen und Co.
 
Delphi-Quellcode:
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;
Gruß Hagen

Touchdown 2. Feb 2004 19:02

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:

negaH 2. Feb 2004 21:39

Re: ClienttoScreen und Co.
 
Delphi-Quellcode:
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;
FWasMouseDown: Boolean und FLastPos: TPoint musste als private Felder in dein TForm deklarieren.

Gruß Hagen

Touchdown 3. Feb 2004 09:03

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.

Touchdown 3. Feb 2004 09:42

Re: ClienttoScreen und Co.
 
Ich hab mal weiter in Richtung API gesucht und habe recht brauchbares gefunden:

http://www.chaho.de/templates/show_a...0&LanguageID=1


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