Autor Beitrag
Magic2001
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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:
ausblenden volle Höhe Delphi-Quelltext
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, 0000);

  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);
//    SetCursorPos(Round(mx),Round(my));
    Sleep(Speed);
  end;
  mouse_event(MOUSEEVENTF_LEFTUP, 0000);

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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 22.05.2013 um 16:25
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Mi 22.05.13 17:58 

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Magic2001 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 22.05.13 20:42 
user profile iconMagic2001 hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Mi 22.05.13 22:57 
user profile iconMagic2001 hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden Delphi-Quelltext
1:
2:
3:
  SetCursorPos(800500);
  Mouse_Event(MouseEventF_Absolute or MouseEventF_LeftDown, 80050000);
  Mouse_Event(MouseEventF_Absolute or MouseEventF_LeftUp or MouseEventF_Move, 1300110000);

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32


Delphi XE2
BeitragVerfasst: 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:
ausblenden 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, 00);
  sleep(200);
  Mouse_Event(MouseEventF_LeftUp or MouseEventF_Move, 600000);
end;