Delphi-PRAXiS
Seite 33 von 55   « Erste     23313233 343543     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Google Maps über COM (Component Object Model) (https://www.delphipraxis.net/157004-google-maps-ueber-com-component-object-model.html)

Sebastian78 18. Nov 2012 11:54

AW: Google Maps über COM (Component Object Model)
 
Hab jetzt alles in eine Procedure gepackt. Läuft :-D

Vielen Dank und schöne Grüße

Sebastian

Thom 18. Nov 2012 12:03

AW: Google Maps über COM (Component Object Model)
 
Prima! :-D

HJay 19. Nov 2012 16:25

AW: Google Maps über COM (Component Object Model)
 
Mir gelingt es nicht, eine Marker-Click-Routine zu setzen. Der Compiler meckert:

[DCC Fehler] GoogleMapUnit.pas(85): E2010 Inkompatible Typen: 'TProc<System.TObject,HTMLObjects.TEvent>' und 'Procedure of object'

Die Deklaration lautet:

Code:
uses  ...
gmAPI, gmMap, gmBase, gmOverlaysMarker, gmEvents;

...
TGoogleMap = class(TObject)
private
procedure MarkerClick(Sender: TObject; Event: gmEvents.TEvent);
...
end;
Dann weise ich die Click-Prozedur wie folgt zu:

Code:
procedure TGoogleMap.CreateMarker(AWpt: TWpt);
  var MarkerOptions : TMarkerOptions;
      Marker       : TMarker;
begin
  with Script(WebBrowser) do begin
    MarkerOptions := TMarkerOptions.Create;
    with MarkerOptions do begin
      Position := New(Google.Maps.LatLng(AWpt.Lat, AWpt.Lon));
      Map     := Maps[0];
      Title   := 'Test;
    end;
    Marker := New(Google.Maps.Marker(MarkerOptions));
    Marker.OnClick := MarkerClick; // <<< Compiler-Error
    MarkerOptions.Free;
  end;
end;

procedure TGoogleMap.MarkerClick(Sender: TObject; Event: gmEvents.TEvent);
begin
  with Script(WebBrowser) do begin
    if Maps[0].GetZoom=8 then Maps[0].SetZoom(4) else Maps[0].SetZoom(8);
    Maps[0].SetCenter(TMarker(Sender).GetPosition);
  end;
end;
Woran kann das liegen? Ich habe doch die Unit gmEvents.TEvent extra angegeben. Hm, ich bin ratlos.

HJay 19. Nov 2012 16:33

AW: Google Maps über COM (Component Object Model)
 
Ich würde gerne dem Nutzer erlauben, einen rechteckigen Bereich der GoogleMap zu selektieren -- also ganz normal, wie man halt so einen Bereich normalerweise markiert. Wäre OK, wenn der Nutzer dazu Ctrl oder so drücken müsste.

Nun hat GoogleMaps ja normalerweise immer die Hand und ein Click-Drag führt zum Verschieben des Karteninhalts.

Wie müsste man vorgehen, um dem User das Markieren eines Bereiches zu ermöglichen und im Programm dann die Koordinaten der Ecken zur Verfügung zu haben?

Thom 19. Nov 2012 16:56

AW: Google Maps über COM (Component Object Model)
 
Hm, Du arbeitest bestimmt noch mit der Version 2.0 des Frameworks!? Da ist es noch etwas umständlich... :roll:
Binde noch die Unit HTMLObjekts in der uses-Anweisung ein und gib an:
Delphi-Quellcode:
procedure MarkerClick(Sender: TObject; Event: HTMLObjects.TEvent);
[...]
Das Dumme ist, daß die Fehlermeldungen des Compilers bei Verwendung von anonymen Methoden teilweise recht kryptisch sind... :shock: (Nicht wundern: Selbst wenn Du keine anonymen Methoden verwendest, werden die Ereignishandler ab Delphi 2009 frameworkintern als anonyme Methoden behandelt.)

Kleiner Lichtblick: In der kommenden Version wird das einfacher. :-D

Das Aufziehen eines Auswahlrechteckes macht zum Beispiel die KeyDragZoom-Bibliothek. Dort werden auch die Ausmaße des gewählten Bereiches per Eventhandler übergeben.

HJay 19. Nov 2012 17:57

AW: Google Maps über COM (Component Object Model)
 
Danke! Jetzt klappt es mit dem MarkerClick.

Ich muss echt sagen, der Support für dieses Framework ist mehr als überragend. Vielen Dank für die schnellen und stets hilfreichen Antworten.

Nochmal zum KeyDragZoom: Das klingt genau nach dem, was ich brauche. Aber wie verwendet man denn diese Bibliothek innerhalb des Delphi-Frameworks?

Gibt es dazu eine Beispieldatei?

Thom 19. Nov 2012 18:41

AW: Google Maps über COM (Component Object Model)
 
Vielen Dank für das Lob! Das hört/liest man natürlich sehr gern und es motiviert auch stark zum Weitermachen. :-D

Einen Delphi-Wrapper für die KeyDragZoom-Bibliothek gibt's als kleines Dankeschön für eine Spende, die dem Unterhalt des Servers für die neue Homepage und die Online-Funktionen zugute käme (siehe ersten Beitrag, Abschnitt Erweiterungen).
Ansonsten können natürlich beliebige JavaScript-Bibliotheken mit Hilfe der Delphi-To-JavaScript-Bridge (also der Units, die sich im Verzeichnis JScript befinden) in das Framework eingebunden werden.

HJay 19. Nov 2012 23:20

AW: Google Maps über COM (Component Object Model)
 
@Thom: Aha ja, das hatte ich übersehen. Die Spende ist bereits unterwegs! Ich freue mich schon auf die Wrapper! Danke!

Thom 20. Nov 2012 00:18

AW: Google Maps über COM (Component Object Model)
 
Vielen Dank, ist angekommen! Email ist unterwegs.

HJay 20. Nov 2012 10:36

AW: Google Maps über COM (Component Object Model)
 
KeyDragZoom klappt prima, Optionen und Events funktionieren auch problemlos. Wieder ein klasse Wrapper!

Allerdings benötige ich für mein Programm letztlich nur die Markierungsfunktion und würde sehr gerne den tatsächlichen Zoom verhindern. Der Nutzer soll nur einen Bereich selektieren können und auf diese Art die darin befindlichen Markierungen selektieren können.

Derzeit speichere ich als Workaround Maps.Zoom und Maps.Center ab und stelle sie nach DragEnd wieder her. Aber das sieht optisch eher bescheiden aus, da das Zoom-Rechteck in der Bildmitte animiert wird und so.

Hast Du eine Idee, wie man die DragKeyZoom-Bibliothek so ändern könnte, dass der Zoom entfällt und man nur das passende Event zurückbekommt?

Nachtrag: Ich habe mir schon mal das keyzoomdrag.js aus dem Netz angeschaut. Dort könnte man wohl die entsprechende Zoom-Routine leicht entfernen. Kannst Du mir die bug-freie keydragzomm.js aus dem res-File zur Verfügung stellen? Mit der Internetversion klappt nicht einmal die unmodifizierte Verwendung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 Uhr.
Seite 33 von 55   « Erste     23313233 343543     Letzte »    

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