AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SpeedButton

Ein Thema von itsme · begonnen am 26. Jun 2018 · letzter Beitrag vom 1. Jul 2018
Antwort Antwort
Seite 2 von 3     12 3      
itsme

Registriert seit: 3. Aug 2006
32 Beiträge
 
Delphi XE Architect
 
#11

AW: SpeedButton

  Alt 27. Jun 2018, 12:45
@himitsu
Also Parent ist ein TabSheet, da habe ich das Ereignis hingeschickt, trotzdem hat sich nichts getan.
Auf diesem TabSheet sind im übrigen 3 SpeedButton, selbst wenn das funktioniert hätte, wie hätte Parent dann gewusst, welcher SpeedButton gemeint ist?

Ich muss dann wohl zur Kenntnis nehmen, dass es nicht geht, Makro wäre vlt. eine Möglichkeit...
Es ging und geht natürlich auch ohne irgendeine Lösung, wieder ein wenig mit Delphi arbeiten, stand hier im Vordergrund.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: SpeedButton

  Alt 27. Jun 2018, 12:51
Auf SO habe ich eine Interessante Methode gefunden, aber vermutlich nützt das auch nichts wegen der Handle Geschichte.
Delphi-Quellcode:
function FindSubcontrolAtPos(AControl: TControl; AScreenPos, AClientPos: TPoint): TControl;
var
  i: Integer;
  C: TControl;
begin
  Result := nil;
  C := AControl;
  if (C=nil) or not C.Visible or not TRect.Create(C.Left, C.Top, C.Left+C.Width, C.Top+C.Height).Contains(AClientPos) then
    Exit;
  Result := AControl;
  if AControl is TWinControl then
    for i := 0 to TWinControl(AControl).ControlCount-1 do
    begin
      C := FindSubcontrolAtPos(TWinControl(AControl).Controls[i], AScreenPos, AControl.ScreenToClient(AScreenPos));
      if C<>nil then
        Result := C;
    end;
end;

function FindControlAtPos(AScreenPos: TPoint): TControl;
var
  i: Integer;
  f,m: TForm;
  p: TPoint;
  r: TRect;
begin
  Result := nil;
  for i := Screen.FormCount-1 downto 0 do
    begin
      f := Screen.Forms[i];
      if f.Visible and (f.Parent=nil) and (f.FormStyle<>fsMDIChild) and
        TRect.Create(f.Left, f.Top, f.Left+f.Width, f.Top+f.Height).Contains(AScreenPos)
      then
        Result := f;
    end;
  Result := FindSubcontrolAtPos(Result, AScreenPos, AScreenPos);
  if (Result is TForm) and (TForm(Result).ClientHandle<>0) then
  begin
    WinAPI.Windows.GetWindowRect(TForm(Result).ClientHandle, r);
    p := TPoint.Create(AScreenPos.X-r.Left, AScreenPos.Y-r.Top);
    m := nil;
    for i := TForm(Result).MDIChildCount-1 downto 0 do
    begin
      f := TForm(Result).MDIChildren[i];
      if TRect.Create(f.Left, f.Top, f.Left+f.Width, f.Top+f.Height).Contains(p) then
        m := f;
    end;
    if m<>nil then
      Result := FindSubcontrolAtPos(m, AScreenPos, p);
  end;
end;
Das soll es einem ermöglichen in Fremd-Anwendungen das Control unter der Maus zu ermitteln. Ich habe es noch nicht getestet.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
itsme

Registriert seit: 3. Aug 2006
32 Beiträge
 
Delphi XE Architect
 
#13

AW: SpeedButton

  Alt 27. Jun 2018, 12:59
Gut danke erst einmal, das werde ich testen...
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#14

AW: SpeedButton

  Alt 27. Jun 2018, 13:00
Screen.Forms und Fremdanwendungen? Das halte ich für ein Gerücht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
itsme

Registriert seit: 3. Aug 2006
32 Beiträge
 
Delphi XE Architect
 
#15

AW: SpeedButton

  Alt 27. Jun 2018, 13:20
Ja bei näherem hinschauen kann man es wohl tatsächlich nicht für eine Fremdanwendung benutzen.

Hatte eigentlich auch keine Hoffnung mehr, nachdem ich hier gelesen hatte, dass Speedbutton kein Handle haben, weil sie nur "aufgemalt" sind.
Trotzdem vielen Dank für die Versuche mir zu helfen.
Ich denke ich werde in dieser Hinsicht ab sofort alle Tätigkeiten einstellen.

Es war jedenfalls ganz interessant zu sehen, wie Autofill Programme so werkeln.
Edit lesen und schreiben, normale Buttons betätigen hat alles wunderbar geklappt und ich eine Menge dazu gelernt
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: SpeedButton

  Alt 27. Jun 2018, 18:33
Hallo,
https://www.experts-exchange.com/que...plication.html

Da steht zumindestens was mit "gelöst" und es geht um Speedbuttons.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: SpeedButton

  Alt 27. Jun 2018, 19:01
Da steht zumindestens was mit "gelöst" und es geht um Speedbuttons.
Klar, mit der Simulation der Mauseingabe klappt es ja auch. Das ist dort die Lösung.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: SpeedButton

  Alt 27. Jun 2018, 21:05
Screen.Forms und Fremdanwendungen? Das halte ich für ein Gerücht.
Du hast natürlich Recht! Was ich im Hinterkopf hatte und nicht dazugeschrieben weil ich ein wenig in Eile war, dieses Beispiel da oben, da wird ja schön mit WinControl rumhantiert und ich weiß das man bei Fremdanwendungen so vorgehen kann (der obere Code-Teil) ich habe gehofft das man es mit GraphicControl hätte umschreiben können, jedenfalls war das mein Anlass es zu posten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
itsme

Registriert seit: 3. Aug 2006
32 Beiträge
 
Delphi XE Architect
 
#19

AW: SpeedButton

  Alt 28. Jun 2018, 13:27
Also ich habe mir diese Lösung mit dem Mausklick auch angeschaut.
Geht nicht und kann so auch nicht gehen...

SendMessage(Handle, BM_CLICK, wParam, lParam); sagt MS "Not used; must be zero." zu den letzten beiden Parametern
Man kann also gar keine x und y Koordinaten angeben!
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: SpeedButton

  Alt 28. Jun 2018, 16: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 16:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:27 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