AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Google Maps über COM (Component Object Model)

Google Maps über COM (Component Object Model)

Ein Thema von Thom · begonnen am 23. Dez 2010 · letzter Beitrag vom 22. Mai 2022
Antwort Antwort
Peter.Stadler

Registriert seit: 30. Sep 2005
Ort: Mödling
21 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

AW: Google Maps über COM (Component Object Model)

  Alt 30. Mai 2013, 19:10
Hallo Thom,

I habe die Zeile eingefügt, aber es bleibt beim alten GoogleMaps, es gibt keinen stufenlosen Zoom und ich bilde mir ein, dass auch die Map tiles die alten sind.

mfg Peter
Peter Stadler
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Google Maps über COM (Component Object Model)

  Alt 30. Mai 2013, 21:23
Hallo Peter,

da hast Du vollkommen Recht. Hier geht es allerdings um zwei völlig verschiedene Dinge: Mit diesem Flag kann man lediglich das Aussehen der Steuerelemente etwas "moderner" gestalten. Die Schatten werden zum Beispiel etwas dezenter dargestellt. Siehe Google. Das hat jedoch absolut nichts mit den neuen Karten von Google zu tun. Da kann man nur abwarten, ob diese auch per API ansteuerbar sind oder ob es sich lediglich um eine geschlossene Darstellungsweise wie unter http://maps.google.de handelt.

Beim Zoom hast Du mich allerdings auf einen Fehler im Framework aufmerksam gemacht: Das sanfte Zoomen sollte ab dem IE8 mit entsprechendem Registryeintrag funktionieren. Da muß ich bei Gelegenheit mal nachschauen, wo es klemmt...

Viele Grüße
Thomas
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#3

AW: Google Maps über COM (Component Object Model)

  Alt 19. Jun 2013, 08:23
Ich habe mal eine kurze Frage:
Wie kann ich mehrere Maps in einer Anwendung verwenden.

Im Moment habe ich das so probiert:

Code:
type
  TForm1 = class(TForm)
    ...
    WebBrowser1: TWebBrowser;
    WebBrowser2: TWebBrowser;
    ...
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    MapScript1: TScript;
    MapScript2: TScript;
    procedure InitMap(Sender: TObject);
end;


procedure TForm1.FormShow(Sender: TObject);
begin
    // Einmalig die Maps initialisieren
    if MapScript1=nil then
        TScript.Create(WebBrowser1).LoadAPIAsync(InitMap);

    if MapScript2=nil then
        TScript.Create(WebBrowser2).LoadAPIAsync(InitMap);
end;



procedure TForm1.InitMap(Sender: TObject);
var
   MapOptions: TMapOptions;
   MarkerOptions: TMarkerOptions;
begin
    with TScript(Sender) do
    begin
        MapOptions:=TMapOptions.Create;
        with MapOptions do
        begin
            DisableDefaultUI:=true;        //alle Kontrollelemente ausschalten
            DisableDoubleClickZoom:=true;  //kein Zoom per Doppelklick
            Draggable:=false;              //Karte nicht verschiebbar
            ScrollWheel:=false;            //kein Zoom über Mausrad
            KeyboardShortcuts:=false;      //keine Tastenkürzel
            MapTypeID:=Google.Maps.MapTypeId.Roadmap; //Kartentyp (roadmap oder satellite)

            Zoom:=1;                       //Zoom
            Center:=Google.Maps.LatLng(0,0); //Kartenzentrum
        end;
        New(Google.Maps.Map(MapOptions));

        // Marker Zeichnen
        MarkerOptions:=TMarkerOptions.Create;
        MarkerOptions.Map:=Google.Maps.Map(MapOptions);
        MarkerOptions.Position:=Google.Maps.LatLng(53,8);
        MarkerOptions.Title:='Letzte Position';
        New(Google.Maps.Marker(MarkerOptions));
    end;
end;

Wenn ich aber später die Parameter ändern möchte, schmiert das Programm mit einer Schutzverletzung ab:

Code:
MapScript1.Maps[0].Zoom:=17;
MapScript1.Maps[0].Center:=MapScript_T1.Google.Maps.LatLng(50,10); //Kartenzentrum
MapScript1.Maps[0].MapTypeID:=MapScript_T1.Google.Maps.MapTypeId.SATELLITE;
Was mache ich falsch?

Geändert von mischo22 (19. Jun 2013 um 08:27 Uhr)
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Google Maps über COM (Component Object Model)

  Alt 19. Jun 2013, 12:08
Hallo mischo22,

Du speicherst die Script-Objekte nicht in den Variablen:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  // Einmalig die Maps initialisieren
  if MapScript1=nil then
      TScript.Create(WebBrowser1).LoadAPIAsync(InitMap); //<- Script wird erstellt, aber nicht in MapScript1 gespeichert

  if MapScript2=nil then
    TScript.Create(WebBrowser2).LoadAPIAsync(InitMap); //<- selbe Problem
end;
Die Lösung sollte sein:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  // Einmalig die Maps initialisieren
  if MapScript1=nil then
  begin
    MapScript1:=TScript.Create(WebBrowser1);
    MapScript1.LoadAPIAsync(InitMap);
  end;
  if MapScript2=nil then
  begin
    MapScript2:=TScript.Create(WebBrowser2);
    MapScript2.LoadAPIAsync(InitMap);
  end;
end;
Allerdings kannst Du Dir auch das Speichern der Script-Objekte sparen - das erfolgt schon frameworkintern:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  // Einmalig die Maps initialisieren
  if Script(WebBrowser1)=nil then
    with TScript.Create(WebBrowser1) do
      LoadAPIAsync(InitMap);
  if Script(WebBrowser2)=nil then
    with TScript.Create(WebBrowser2) do
      LoadAPIAsync(InitMap);
end;
Um später auf das Objekt zugreifen zu können, reicht
Delphi-Quellcode:
  with Script(WebBrowser1) do
  begin
    Maps[0].Zoom:=17;
    Maps[0].Center:=New(Google.Maps.LatLng(50,10)); //<- New-Funktion verwenden
    Maps[0].MapTypeID:=Google.Maps.MapTypeId.SATELLITE;
  end;
Wer Angst vor dem angeblich bösen "with" hat, macht es so:
Delphi-Quellcode:
  Script(WebBrowser1).Maps[0].Zoom:=17;
  Script(WebBrowser1).Maps[0].Center:=New(Script(WebBrowser1).Google.Maps.LatLng(50,10)); //<- New-Funktion verwenden
  Script(WebBrowser1).Maps[0].MapTypeID:=Script(WebBrowser1).Google.Maps.MapTypeId.SATELLITE;
Allerdings mußt Du bei der Erstellung von Hilfsobjekten momentan noch beachten, daß dabei ebenfalls das Script-Objekt als Parameter angegeben wird:
Delphi-Quellcode:
procedure TForm1.InitMap(Sender: TObject);
var
  Map: TMap;
  MapOptions: TMapOptions;
  MarkerOptions: TMarkerOptions;
begin
  with Sender as TScript do //<- hier eventuell schon einmal den harten Cast für Version 3 vermeiden (das geht nicht gut mit Interfaces)
  begin
    MapOptions:=TMapOptions.Create(Sender as TScript); //<- hier das Script-Objekt als Parameter angeben
    with MapOptions do
    begin
      DisableDefaultUI:=true;
      DisableDoubleClickZoom:=true;
      Draggable:=false;
      ScrollWheel:=false;
      KeyboardShortcuts:=false;
      MapTypeID:=Google.Maps.MapTypeId.Roadmap;
      Zoom:=1;
      Center:=New(Google.Maps.LatLng(0,0)); //<- New-Funktion verwenden
    end;
    Map:=New(Google.Maps.Map(MapOptions)); //<- Karte für den Marker merken

    // Marker Zeichnen
    MarkerOptions:=TMarkerOptions.Create(Sender as TScript); //<- hier ebenfalls das Script-Objekt angeben
    MarkerOptions.Map:=Map; //<- hier die Variable Map verwenden - sonst wird noch eine weitere Karte angelegt
    MarkerOptions.Position:=New(Google.Maps.LatLng(53,8)); //<- New-Funktion verwenden
    MarkerOptions.Title:='Letzte Position';
    New(Google.Maps.Marker(MarkerOptions));
  end;
end;
In der Version 3 wird es für diese Hilfsobjekte ebenfalls eine passende New-Funktion geben, so daß dann die Sache noch etwas einfacher wird:
Delphi-Quellcode:
  with Sender as IScript do
  begin
    MapOptions:=New(Google.Maps.MapOptions);
    [...]
  end;
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (19. Jun 2013 um 12:11 Uhr)
  Mit Zitat antworten Zitat
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#5

AW: Google Maps über COM (Component Object Model)

  Alt 19. Jun 2013, 18:46
Hallo Thom,

Ich habe nun den OnShow bereich entsprechend angepasst und meine eigenen Script-Variablen entfernt.

Dies sieht nun so aus:

Code:
procedure TForm1.FormShow(Sender: TObject);
begin
    // Einmalig die Maps initialisieren
    if Script(WebBrowser_T1)=nil then
         with TScript.Create(WebBrowser_T1) do
            LoadAPIAsync(InitMap);

    if Script(WebBrowser_T2)=nil then
         with TScript.Create(WebBrowser_T2) do
            LoadAPIAsync(InitMap);

    if Script(WebBrowser_T3)=nil then
         with TScript.Create(WebBrowser_T3) do
            LoadAPIAsync(InitMap);

    if Script(WebBrowser_T4)=nil then
         with TScript.Create(WebBrowser_T4) do
            LoadAPIAsync(InitMap);
end;
Leider kann ich mittels der Zeilen
Code:
// Map aktualisieren
            with Script(WebBrowser_T1) do
            begin
                Maps[0].Zoom:=17;
                ...
            end;
Nicht auf die Map nachträglich zugreifen. Es kommt beim Compilieren die Fehlermeldung: "Undeklarierter Bezeichner: Maps"
  Mit Zitat antworten Zitat
Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#6

AW: Google Maps über COM (Component Object Model)

  Alt 19. Jun 2013, 19:02
Auf welche Funktion/Unit kommst Du, wenn Du mit Strg auf die Funktion Script klickst?
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
mischo22

Registriert seit: 23. Mär 2006
9 Beiträge
 
#7

AW: Google Maps über COM (Component Object Model)

  Alt 19. Jun 2013, 19:18
Ich komme auf die datei BrowserTools.pas

Code:
function Script(WebBrowser: TOleControl): IDispatch;
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

(?)

LinkBack to this Thread

Erstellt von For Type Datum
DELPHI | (google maps) This thread Refback 11. Nov 2011 09:07
Twebbrowser HTML tag to UniHTMLFrame1 - uniGUI Discussion Forums This thread Refback 4. Nov 2011 06:52
DoraDev1975: google maps This thread Refback 23. Sep 2011 08:18
delphi osm - Google Search Post #0 Refback 19. Sep 2011 09:02
DoraDev1975: ?&#3636;????? 2011 This thread Refback 11. Sep 2011 16:39
DoraDev1975 This thread Refback 30. Aug 2011 10:13
Untitled document This thread Refback 25. Jun 2011 19:57
Interact with Google Maps in a TWebBrowser from Delphi | Ramblings This thread Refback 26. Jan 2011 05:12
google maps mit delphi link - Google Search This thread Refback 24. Jan 2011 14:24
google maps mit delphi - Google Search This thread Refback 24. Jan 2011 14:20
Untitled document This thread Refback 19. Jan 2011 21:49

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz