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 |
AW: Google Maps über COM (Component Object Model)
Prima! :-D
|
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:
Dann weise ich die Click-Prozedur wie folgt zu:
uses ...
gmAPI, gmMap, gmBase, gmOverlaysMarker, gmEvents; ... TGoogleMap = class(TObject) private procedure MarkerClick(Sender: TObject; Event: gmEvents.TEvent); ... end;
Code:
Woran kann das liegen? Ich habe doch die Unit gmEvents.TEvent extra angegeben. Hm, ich bin ratlos.
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; |
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? |
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:
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.)
procedure MarkerClick(Sender: TObject; Event: HTMLObjects.TEvent);
[...] 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. |
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? |
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. |
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!
|
AW: Google Maps über COM (Component Object Model)
Vielen Dank, ist angekommen! Email ist unterwegs.
|
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. |
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