Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Mouseclick simulieren
Taladan - Mi 06.08.03 16:26
Titel: Mouseclick simulieren
Wie kann ich in einen Element den Click einer Maus simulieren. Wenn ich z. B. die Coordinaten x,y habe, soll die ein klick genau auf diese coordinaten ausgeführt werden.
Also ungefähr so
Delphi-Quelltext
1: 2: 3: 4: 5:
| var x,y : integer begin mouseclick?(x,y); mach irgendwas.... end; |
Gausi - Mi 06.08.03 21:49
Hmm..Ehrlich gesagt, verstehe ich nicht ganz genau, was du meinst.
Willst du, dass abhängig von den Mauskoordinaten was verschiedenes ausgeführt wird? Dann würd ich mir mal die Ereignisse onMouseDown bzw onMouseUp anstelle von OnClick anschauen. Da werden die Koordinaten nämlich mitübergeben...
Raphael O. - Mi 06.08.03 21:56
wenn du auf diese Art und Weise auf einen Button deiner Form klicken willst, dann kannst du acuh die Entsprechende Prozedur direkt aufrufen:
btw: ich weiß, das das evtl. gar nicht das ist, was du willst, da du aber keinen näheren Verwendungszweck angegeben hast lag es für mich nahe ;)
Andreas_Sans - Mi 06.08.03 23:13
ich glaube er meint, dass man einen Mausclick z.B. auf ein label simuliert indem man die Koordinaten des labels angibt auf die man klicken soll
OlliH - Mi 06.08.03 23:30
Easy Delphi Helper 2000 - EDH online
Mausclick simulieren
Hits: 593
Modul für den EDH: modul8.edu Download
Eingesendet von: Sven Schneider Mail
Zitat: |
Mausclick simulieren
Die folgende Procedure simuliert einen Linksclick an den angegebenen Koordinaten (X=100, Y=200). Es werden damit dann auch das entsprechende OnClick-Ereignis der Komponente ausgeführt.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Timer1Timer(Sender: TObject); var x,y: integer; begin x:=100; y:=200; mouse_event(MOUSEEVENTF_leftDOWN,x,y,0,0); mouse_event(MOUSEEVENTF_leftUP,x,y,0,0); end; |
Für die rechte Maustaste gilt entsprechend:
MOUSEEVENTF_RIGHTDOWN
MOUSEEVENTF_RIGHTUP
Und das gleiche gibt es auch noch für die mittlere Maustaste:
MOUSEEVENTF_MIDDLEDOWN
MOUSEEVENTF_MIDDLEUP |
Moderiert von
Tino: Quote- & Delphi-Tags hinzugefügt.
Andreas_Sans - Do 07.08.03 01:45
ich hab einfach Mousedown auf dem Formblatt benutzt und den Bereich eingegrenzt in dem man clicken kann um ein Ereignis auszulösen :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var i : integer; begin if (x >= 100) and (x<= 200) and (y >= 100) and (y <= 200) then begin end; end; |
hier kann mal also in den Bereich von 100-200 auf der x-Achse und 100-200 auf der y-Achse klicken. Die Koordinaten bilden also ein Rechteck
Taladan - Do 07.08.03 10:41
Also. Mein Problem ist es, das ich ein DBGrid (MouseDown-Event habe ich hinzugefügt) habe, wo ich per Drag & Drop bestimmte Daten von einen anderen DBGrid bzw Listbox ziehen möchte.
Alles so weit in ordnung, doch leider erhalte ich bei den gelieferten coordinaten von Delphi enteweder die Mousecoordianten oder die coordinaten der Zelle, bei momentaner ansicht. Also nicht der Reelle 79 Datensatz, sondern nur der fünfte der momentanen Ansicht. Also ist eine Bewegung zu diesen Datensatz schwer, da mir mir ja zum einen der ausgangsdatensatz, wo der zeiger steht, gar nicht in der momentanen anzeige zu sehen sein muss (überlange Tabelle). Zum anderen kann er vor beziehungsweise hinter den Datensatz geklickt worden sein, aber ich erhalte immer als anzeige den 7 Datensatz. Also mus ich irgendwie diesen datensatz mit vorhanden mitteln ansteuern.
Nach langer überlegung, dacht ich mir, ich kann dies über einen simulierten Mouseclick tun. Oder kennt jemand eine bessere Möglichkeit?
Leider gibt es ja beim DBGrid nicht die Funktion MouseToCell, was das ganze erheblich vereinfachen würde.
Taladan - Do 07.08.03 11:27
Ich habe den kode jetzt folgendermaßen aufgebaut.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure THauptform.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer); var Cell: TGridCoord; a : integer; hiddendata : THidden; begin try mouse_event(MOUSEEVENTF_leftDOWN,x,y,0,0); mouse_event(MOUSEEVENTF_leftUP,x,y,0,0); finally if (source = listbox1) then begin a:= (source as TListBox).itemindex; hiddendata := ((Source as Tlistbox).Items.Objects[a] as THidden); table2.Edit; table2verteiler.value := hiddendata.id; table2.Post; Table2.refresh; end; end; end; |
Warum führt das Program erst den kompletten code aus und wechselt dann in die entsprechende zeile?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!