Autor |
Beitrag |
Taladan
      
Beiträge: 88
Delphi 2005 Personal
|
Verfasst: Mi 06.08.03 16:26
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
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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...
_________________ We are, we were and will not be.
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: 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:
Delphi-Quelltext
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
      
Beiträge: 76
|
Verfasst: 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
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
      
Beiträge: 76
|
Verfasst: 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 
      
Beiträge: 88
Delphi 2005 Personal
|
Verfasst: 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 
      
Beiträge: 88
Delphi 2005 Personal
|
Verfasst: 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?
|
|