Autor |
Beitrag |
Magic2001
Beiträge: 32
Delphi XE2
|
Verfasst: Mi 22.05.13 15:20
Ich möchte in meinem Programm erreichen, dass die linke Maustaste gedrückt wird und der Inhalt auf dem Bildschirm (in dem Fall eine Google Maps Karte) gezogen wird. Also klicken, ziehen und wieder loslassen.
Habe das so versucht:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| procedure MoveMouse (X,Y,Speed: Integer); var Maus : TPoint; mx, my, nx, ny, len : double; begin mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
if Speed < 1 then Speed := 1;
GetCursorPos(Maus); mx := maus.x; my := maus.y;
While (mx<>x)OR(my<>y) Do begin nx := x-mx; ny := y-my; len := sqrt(nx*nx + ny*ny);
if(len<=1)Then begin mx:=x; my:=y; end else begin nx := nx / (len*0.5); ny := ny / (len*0.5); mx := mx + nx; my := my + ny; end; Mouse_Event(MOUSEEVENTF_ABSOLUTE, Round(mx)+50,Round(my), 0, GetMessageExtraInfo); Sleep(Speed); end; mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end; |
Und auch mit SetCursorPos aber alles erfolglos. Entweder bewegt sich die Maus aber die Karte wird nicht gezogen oder es passiert überhaupt nichts. Hat jemand von euch eine Idee wie ich das verwirklichen könnte? Moderiert von Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 22.05.2013 um 16:25
|
|
bummi
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Mi 22.05.13 17:58
_________________ Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
|
|
Magic2001
Beiträge: 32
Delphi XE2
|
Verfasst: Mi 22.05.13 20:04
Habe auch dort versucht eine Antwort zu bekommen, da in Deutschland scheinbar niemand weiß wie das geht
Kann doch eigentlich kein so großes Problem sein....
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mi 22.05.13 20:42
Magic2001 hat folgendes geschrieben : | Kann doch eigentlich kein so großes Problem sein.... |
Was verstehst Du unter "ziehen"? Eine Größenveränderung? Wo befindet sich die Karte? In einem Fenster des Internetexplorers? Dann würde ich es z. B. mal mit SetWindowPlacement versuchen, statt die Maus zu bemühen.
|
|
Magic2001
Beiträge: 32
Delphi XE2
|
Verfasst: Mi 22.05.13 21:44
Wie gesagt... links klicken, gedrückt halten und dabei die maus bewegen. So wie bei google maps, wenn du die Karte nach links ziehen willst.... das ist jetzt aber kein Google maps problem, sondern ein grundsätzliches, denn auch anderen inhalt kann man nicht ziehen... zb Brosergames, Flash inhalte oder ähnliches.
Der inhalt ist im PRogramm selbst, ein Twebbrowser Element.
|
|
Gerd Kayser
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Mi 22.05.13 22:57
Magic2001 hat folgendes geschrieben : | Wie gesagt... links klicken, gedrückt halten und dabei die maus bewegen. So wie bei google maps, wenn du die Karte nach links ziehen willst.... |
Also kein Ziehen, sondern ein Verschieben des Kartenausschnitts.
Probiere es mal so:
Delphi-Quelltext 1: 2: 3:
| SetCursorPos(800, 500); Mouse_Event(MouseEventF_Absolute or MouseEventF_LeftDown, 800, 500, 0, 0); Mouse_Event(MouseEventF_Absolute or MouseEventF_LeftUp or MouseEventF_Move, 1300, 1100, 0, 0); |
Ich habe es wie folgt getestet:
Internetexplorer-Fenster auf Bildschirmgröße vergrößert (bei mir 1920 * 1200). Aufgerufene Seite: maps.google.com
Dann meine Testanwendung gestartet (Fenster lag NICHT unter den Mauskoordinaten) und durch einen Buttonklick die oben stehende Anweisung ausgeführt. Der Kartenausschnitt wurde verschoben. Also erfolgreich.
|
|
Magic2001
Beiträge: 32
Delphi XE2
|
Verfasst: Do 23.05.13 14:03
Hey genial, tausend Dank!!! War echt schon am verzweifeln.
Habe es meinen Bedürfnissen angepasst, sieht nun so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.MoveLeft; var p2 : Tpoint; begin p2 := clienttoscreen(point(20,100)); SetCursorPos(p2.x, p2.y); Mouse_Event(MouseEventF_LeftDown, p2.x, p2.y, 0, 0); sleep(200); Mouse_Event(MouseEventF_LeftUp or MouseEventF_Move, 600, 0, 0, 0); end; |
|
|
|