AGB  ·  Datenschutz  ·  Impressum  







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

Google Maps über COM (Component Object Model)

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

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#1

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

  Alt 24. Mär 2017, 08:45
Hallo zusammen,

ich habe die Google Maps Units v2.1 nach den bekannten Problemen seit der Umstellung auf Google Maps API > 3.22 (entweder wegen onion.js oder poly.js-Fehlern o.ä.) wieder mit meinen Programmen unter Delphi X 10.1.2 Berlin zum Laufen gebracht.

Es gibt einen recht ausführlichen Thread bei Google zu den vielfältigen Problemen und deren versuchten Lösungen unter https://issuetracker.google.com/issues/35827696.

Entscheidend ist anscheinend das Konfigurieren des Emulationsmodus der WebBrowser-Komponente, die standardmäßig von Microsoft auf IE7 gesetzt ist, die aber von der Google Maps API wegen fehlenden JSON-Funktionalitäten nicht mehr unterstützt wird.
Diesen Emulationsmodus kann man für seine Applikation in der Registry im USER-Hive auf höhere unterstützte IE-Emulationen setzen, was dann prompt bei mir auf verschiedenen Systemen mit Windows 10 (x86/x64) und Windows 7 (x64) auch funktioniert.
Ich setze den Kompatibilitätseintrag in meiner Applikation (<Applikation.exe>) in FormCreate() unter:
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULA TION
mit Eintrag "<Applikation.exe>" mit Wert DWORD = "0x00002af9"
Folgende Werte kann man für die Emulation wohl setzen (habe ich von einer MSDN-Seite):
  • 11001 (0x2AF9): Internet Explorer 11. Webpages are displayed in IE11 Standards mode, regardless of the !DOCTYPE directive.
  • 11000 (0x2AF8): Internet Explorer 11. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
  • 10001 (0x2AF7): Internet Explorer 10. Webpages are displayed in IE10 Standards mode, regardless of the !DOCTYPE directive.
  • 10000 (0x2710): Internet Explorer 10. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
  • 9999 (0x270F): Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive.
  • 9000 (0x2328): Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode.
  • 8888 (0x22B8): Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive.
  • 8000 (0x1F40): Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode.
  • 7000 (0x1B58): Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode.

Zusätzlich setzte ich standardmäßig in der generierten HTML-Page (in der unit gmAPI.pas), wie in früheren Einträgen schon diskutiert, einen Meta-Eintrag im Header mit: <meta http-equiv="X-UA-Compatible" content="IE=edge" />';

Ich hoffe, das hilft euch auch weiter.
Stefan

Geändert von GPRSNerd (24. Mär 2017 um 10:51 Uhr)
  Mit Zitat antworten Zitat
DelphiFan2008

Registriert seit: 4. Dez 2008
84 Beiträge
 
Delphi XE2 Starter
 
#2

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

  Alt 1. Mai 2017, 08:45
Hallo GPRSNerd,

mir ist dein Vorgehen nicht ganz klar

- was trage/ändere ich in der eigenen Applikation?
- was trage/ändere ich z.B. mit RegEdit direkt ein?
- <Applikation.exe> mit komplettem Pfad oder nur den Namen?

Gruß DelphiFan2008
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 1. Mai 2017, 11:43
Hallo GPRSNerd,

mir ist dein Vorgehen nicht ganz klar

- was trage/ändere ich in der eigenen Applikation?
- was trage/ändere ich z.B. mit RegEdit direkt ein?
- <Applikation.exe> mit komplettem Pfad oder nur den Namen?

Gruß DelphiFan2008
Den folgenden Eintrag setzt meine Applikation mit Namen "Tracktool.exe" in der Registry, ist aber alles oben im Detail beschrieben:

2017-05-01_124018.png
Stefan
  Mit Zitat antworten Zitat
manfred_h

Registriert seit: 4. Nov 2005
Ort: Basel
442 Beiträge
 
Delphi XE2 Enterprise
 
#4

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

  Alt 13. Sep 2017, 15:29

Ich hoffe, das hilft euch auch weiter.
Besten Dank für diese Info, hat mir viel mühe erspart!

Shalom
Manfred
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
949 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

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

  Alt 6. Okt 2017, 18:02
Hallo,

mir ist schon klar das Thom seit geraumer Zeit nicht mehr Online ist, aber eventuell kann jemand helfen.
Ich habe eine csv-datei mit ca. 570 Werten, von diesen möchte ich screenshots machen, doch es scheiter schon an:
Code:
https://www.google.de/maps/@51.1758057,10.4541194,6z
Es wird ein Script-Fehler generiert(Siehe Grafik). Da auf einen 'externalen OnApiLoaded' verwiesen wird,
scheint es hier einen Fehler zu geben:
Delphi-Quellcode:
...
procedure TForm1.GeoListViewDblClick(Sender: TObject);
begin
  FCurrentIndex := GeoListView.ItemIndex;
  RunTimer.Enabled := ((GeoListView.Items.Count > 0) and (FScreenShotPath <> EmptyStr));
end;

procedure TForm1.ItsTime(Sender: TObject);
begin
  RunTimer.Enabled := False;
  if Script=nil then
    with TScript.Create(WebBrowser1) do
      LoadAPIAsync(InitMap);
end;

procedure TForm1.InitMap(Sender: TObject);

  function StrToDouble(Value : String) : Double;
  begin
    Result := StrToFloat(StringReplace(Value, '.', ',', [rfReplaceAll, rfIgnoreCase]));
  end;

var
  MyOptions : TMapOptions;
  LI : TListItem;
  Latitude : Double;
  Longitude : Double;
  ZoomF : Integer;
  TypeID : Byte;
  Url : String;
begin
  LI := GeoListView.Items[FCurrentIndex];
  if ((LI.SubItems[3] = EmptyStr) and // Latitude
      (LI.SubItems[4] = EmptyStr) and // Logitude
      (LI.SubItems[5] = EmptyStr)) then // Zoom
  begin
    Url := Copy(LI.SubItems[0], POS('@', LI.SubItems[0]) + 1, Length(LI.SubItems[0]));
    Latitude := StrToDouble(Copy(Url, 1, POS(',', Url) - 1));
    Url := Copy(Url, POS(',', Url) + 1, Length(Url));
    Longitude := StrToDouble(Copy(Url, 1, POS(',', Url) - 1));
    Url := Copy(Url, POS(',', Url) + 1, Length(Url));
    ZoomF := Round(StrToDouble(Copy(Url, 1, POS('z', Url) -1)));
  end
  else
  begin
    Latitude := StrToDouble(LI.SubItems[3]);
    Longitude := StrToDouble(LI.SubItems[4]);
    ZoomF := Round(StrToDouble(Copy(LI.SubItems[5], 1, POS('z', LI.SubItems[5]) -1)));
  end;
  TypeID := Ord(LI.SubItems[6][1]);

  with TScript(Sender) do
  begin
    MyOptions := TMapOptions.Create;
    with MyOptions do
    begin
      Zoom := ZoomF;
      Center := New(Google.Maps.LatLng(Latitude, Longitude));
      case TypeID of
        72 : MapTypeID := Google.Maps.MapTypeID.Hybrid;
        82 : MapTypeID := Google.Maps.MapTypeID.Roadmap;
        83 : MapTypeID := Google.Maps.MapTypeID.Satellite;
        84 : MapTypeID := Google.Maps.MapTypeID.Terrain;
      end;
    end;
    New(Google.Maps.Map(MyOptions));
  end;
end;
Achso, die csv-datei wird in eine ListView(Report) geladen und durch Doppelclick der Timer gestartet,
der FEATURE_BROWSER_EMULATION Eintrag ist vorhanden.

Wie müsste ich es anders machen?
Miniaturansicht angehängter Grafiken
scripfehler1.png  
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#6

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

  Alt 7. Okt 2017, 18:08
Der Aufruf darf nicht mehr über LoadAPIAsync() gemacht werden, sondern über LoadAPI():

Delphi-Quellcode:
      //LoadAPIAsync(InitMap,
      LoadAPI (InitMap,
                   DefaultLanguage,
                   DefaultRegion,
                   GMapBrowserKey,
                   GMapAPIVersion,
                   GMapIEVersion);
PS: Ich habe die Funktion überladen, evtl. stimmen meine Parameter nicht mehr mit dem Standard überein.
Stefan
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
949 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

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

  Alt 10. Okt 2017, 19:51
Zitat:
Der Aufruf darf nicht mehr über LoadAPIAsync() gemacht werden, sondern über LoadAPI():
Komisch, die meistem Demos laufen auch unter 10.2.1 und nutzen LoadAPIAsync().
Könntest du kurz darauf eingehen warum nun nur LoadAPI genutzt werden soll.
Danke.
  Mit Zitat antworten Zitat
Peter.Stadler

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

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

  Alt 2. Nov 2017, 14:27
Hallo

Ich versuche das Framework von Thom in Rad Studio XE 10.2 Tokyo zu installieren. Dazu habe ich das file gmConfig.inc upgedated.
Leider gibt es dann einen Compilation error mit Studio XE 10.2 Tokyo, wenn ich versuche den Source in meine Programme einzubinden.
Vielleicht ist es ein Fehler im gmConfig.file, vielleicht auch nicht. Kann jemand das File testen? Im Bild 1 ist der Compilation error als Screenshot zu sehen.

Bin für jeden Hinweis dankbar.

Der Compilationsfehler
[dcc32 Fehler] GoogleMaps_Unit1.pas(2694): E2010 Inkompatible Typen: 'TMapEventEvent' und 'Procedure'
hängt vielleicht mit {$IFDEF USE_ANONYMOUS_METHODS} zusammen.
Der Fehler tritt auf in dieser Procedure:

Code:
procedure AttachSecretMessage(Marker: TMarker; Num: Integer);
  var
    //{$IFDEF USE_ANONYMOUS_METHODS}
    InfoWindow: TInfoWindow;
    //{$ENDIF}
    InfoWindowOptions: TInfoWindowOptions;
  var
    callString : string;
  begin
    with Script do
    begin
      InfoWindowOptions:=TInfoWindowOptions.Create;
      InfoWindowOptions.Content := MBParams[ActiveFilter,Num];
      InfoWindow := gmAPI.New(Google.Maps.InfoWindow(InfoWindowOptions));
      Marker.OnClick := procedure(Sender: TObject; Event: TEvent)
      begin
        InfoWindow.Open(Marker.GetMap,Marker);
        callString := 'GM '+MBParams[ActiveFilter,Num];
        actualSite := MBParams[ActiveFilter,Num];
        if(ClipboardCB=True) then
        begin
          Clipboard.AsText := actualSite;
        end
        else
        begin
          RunProg.RunProgramWaiting(progPath, '',callString);
        end;
      end;
    end;
  end;
mfg Peter
Miniaturansicht angehängter Grafiken
bild-1.jpg  
Angehängte Dateien
Dateityp: zip gmConfig.zip (2,0 KB, 10x aufgerufen)
Peter Stadler

Geändert von Peter.Stadler ( 2. Nov 2017 um 14:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von GPRSNerd
GPRSNerd

Registriert seit: 30. Dez 2004
Ort: Ruhrpott
239 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 2. Nov 2017, 14:35
Ich hatte in Post #479 mal eine aufwärtskompatible gmconfig.inc hochgeladen, die bei mir seitdem mit allen neuen IDEs ohne Anpassungen funktioniert:

http://www.delphipraxis.net/1333914-post479.html
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:21 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