Thema: Delphi SpeedButton

Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#20

AW: SpeedButton

  Alt 28. Jun 2018, 15:19
Du positionierst die Mausposition selber vorher! Das hat nichts mit "klick" zu tun!

Uraltes Beispiel für Links und Rechtsklick an beliebiger Position:
Delphi-Quellcode:
procedure LeftClick(mouseX,mouseY:Word;ResetMouse:Boolean=False;Relative:Boolean=True);
var p:TPoint;
    win:HWND;
    wRect:TRect;
begin
  GetCursorPos(p);
  if Relative then
  begin
    win:=GetForegroundWindow;
    GetWindowRect(win,wRect);
    mouseX:=mouseX+wRect.Left;
    mouseY:=mouseY+wRect.Top;
  end;
  SetCursorPos(mouseX,mouseY);
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
  if ResetMouse then SetCursorPos(p.x,p.y);
end;

procedure RightClick(mouseX,mouseY:Word;ResetMouse:Boolean=False;Relative:Boolean=True);
var p:TPoint;
    win:HWND;
    wRect:TRect;
begin
  GetCursorPos(p);
  if Relative then
  begin
    win:=GetForegroundWindow;
    GetWindowRect(win,wRect);
    mouseX:=mouseX+wRect.Left;
    mouseY:=mouseY+wRect.Top;
  end;
  SetCursorPos(mouseX,mouseY);
  mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
  mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
  if ResetMouse then SetCursorPos(p.x,p.y);
end;
oder kürzer so, auch uralt
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_MOVE, mouseX, mouseY, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP or MOUSE_MOVE, mouseX, mouseY, 0, 0);
mit SendMessage müsste es so funktionieren:
SendMessage(WindowFromPoint(p), WM_LBUTTONDOWN, MAKELPARAM(p.x, p.y), 0); edit
Besser statt mouse_event() das SendInput verwenden.
Dieses kann für Tastatur und Maus verwendet werden.
Das wollte ich hier noch mit erwähnt haben da mein Beispiel Ur-Alt ist! Danke @HolgerX
Gruß vom KodeZwerg

Geändert von KodeZwerg (28. Jun 2018 um 15:55 Uhr)
  Mit Zitat antworten Zitat