Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Maus positionieren Problem (https://www.delphipraxis.net/161639-maus-positionieren-problem.html)

API 13. Jul 2011 19:38

Maus positionieren Problem
 
Hello,

versuche die Maus über einem Button zu positionieren, da es möchte mir nicht gelingen.
Der Maus-Cursor erscheint etwas verschoben unterhalb des Buttons. Was mache ich falsch?

Delphi-Quellcode:
var
  MousePos: TPoint;
begin
    MousePos.X := Button1.Left + Button1.Width div 2;
    MousePos.Y := Button1.Top + Button1.Height div 2;
    Mouse.CursorPos := ClientToScreen(MousePos);
end;

Helmi 13. Jul 2011 19:40

AW: Maus positionieren Problem
 
Hallo,

also bei mir wandert der Maus-Zeiger direkt auf den Button und zwar mittig mit deinem Code

API 13. Jul 2011 20:01

AW: Maus positionieren Problem
 
Wenn der Code nach einem Buttonklick ausgeführt wird, funktioniert es. Jedoch nich im OnShow|OnCreate. Schicke nun im OnShow eine Message per PostMessage und positioniere dann die Maus.

Helmi 13. Jul 2011 20:11

AW: Maus positionieren Problem
 
mmh - also ich kanns auch im OnShow nicht nachvollziehen.

Anbei mein Test-Code bei dem es problemlos funktioniert:

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
   MousePos: TPoint;
 begin
     MousePos.X := Button1.Left + Button1.Width div 2;
     MousePos.Y := Button1.Top + Button1.Height div 2;
     Mouse.CursorPos := ClientToScreen(MousePos);
 end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer1.Enabled := true;

  Hide;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := false;
  Show;
end;

Luckie 13. Jul 2011 20:19

AW: Maus positionieren Problem
 
Warum schickst du an die Schaltfläche keine WM_COMMAND Nachricht? Das was du da machst ist Frickelei.

himitsu 13. Jul 2011 21:23

AW: Maus positionieren Problem
 
Zitat:

Delphi-Quellcode:
var
  MousePos: TPoint;
begin
    MousePos.X := Button1.Left + Button1.Width div 2;
    MousePos.Y := Button1.Top + Button1.Height div 2;
    Mouse.CursorPos := ClientToScreen(MousePos);
end;

ClientToScreen ist eine nette Methode und nicht irgendeine billige Funktion.
Hier fragst du die Form (Self.ClientToScreen), mit der Client-Position des Buttons ... eventuell rechnet ClientToScreen der Form aber nicht mit der Clientposition, sondern mit der Fensterposition?
Und dein Fenster hat doch bestimmt einen Rahmen+Titelleiste?

Warum fragst du nicht also direkt den Button?
Delphi-Quellcode:
var
  MousePos: TPoint;
begin
    MousePos.X := Button1.Width div 2;
    MousePos.Y := Button1.Height div 2;
    Mouse.CursorPos := Button1.ClientToScreen(MousePos);
end;
Nja, ansonsten kann es gut sein, daß Form/Button nochmal etwas verschoben werden, bevor es angezeigt wird.



Deshalb stimme ich Luckie vollkommen zu.

Luckie 13. Jul 2011 21:30

AW: Maus positionieren Problem
 
Ach auch noch im eigenem Fenster? Wozu soll das gut sein?

API 14. Jul 2011 06:04

AW: Maus positionieren Problem
 
Zitat:

Zitat von Luckie (Beitrag 1111634)
Ach auch noch im eigenem Fenster? Wozu soll das gut sein?

Ist eine Art mouse-follows-the-focus (oder -the-default-button) Option, welche Windows auch zur Verfügung stellt.

Wie soll das mit WM_COMMAND funktionieren?

API 15. Jul 2011 04:57

AW: Maus positionieren Problem
 
Zitat:

Zitat von API (Beitrag 1111659)
Zitat:

Zitat von Luckie (Beitrag 1111634)
Ach auch noch im eigenem Fenster? Wozu soll das gut sein?

Wie soll das mit WM_COMMAND funktionieren?

*p.u.s.h*


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 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