Delphi-PRAXiS
Seite 52 von 55   « Erste     242505152 5354     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)

GPRSNerd 1. Mai 2017 11:43

AW: Google Maps über COM (Component Object Model)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von DelphiFan2008 (Beitrag 1369571)
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:

Anhang 47223

manfred_h 13. Sep 2017 15:29

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

Zitat von GPRSNerd (Beitrag 1365450)

Ich hoffe, das hilft euch auch weiter.

Besten Dank für diese Info, hat mir viel mühe erspart! :thumb::thumb:

Shalom
Manfred

Alter Mann 6. Okt 2017 18:02

AW: Google Maps über COM (Component Object Model)
 
Liste der Anhänge anzeigen (Anzahl: 1)
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?

GPRSNerd 7. Okt 2017 18:08

AW: Google Maps über COM (Component Object Model)
 
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.

Alter Mann 10. Okt 2017 19:51

AW: Google Maps über COM (Component Object Model)
 
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.

Peter.Stadler 2. Nov 2017 14:27

AW: Google Maps über COM (Component Object Model)
 
Liste der Anhänge anzeigen (Anzahl: 2)
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

GPRSNerd 2. Nov 2017 14:35

AW: Google Maps über COM (Component Object Model)
 
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

Peter.Stadler 2. Nov 2017 15:31

AW: Google Maps über COM (Component Object Model)
 
Vielen Dank für die versionsunabhängige gmConfig. Leider compiliert es nicht. Eigentlich sollte laut gmConfig die USE_ANONYMOUS_METHODS definiert sein,
aber InfoWindow ist undefiniert. Wenn ich die beiden conditionalen Abfragen auskommentiere, ist zwar InfoWindow definiert, aber der zuletzt aufgetretene Fehler kehrt zurück:

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;
Der Compilationsfehler: [dcc32 Fehler] GoogleMaps_Unit1.pas(2694): E2010 Inkompatible Typen: 'TMapEventEvent' und 'Procedure'.
Wenn ich mit XE8 compiliere tritt der Fehler nicht auf.

mfg Peter

GPRSNerd 2. Nov 2017 20:15

AW: Google Maps über COM (Component Object Model)
 
Den Fehler hatte ich in der Vergangenheit auch mal, hängt mit der Reihenfolge des uses-Anweisungen zusammen: HTMLObjects muss nach gmEvents eingebunden werden, ich hatte in meiner App sogar noch einen Kommentar dahinter, siehe unten:

Delphi-Quellcode:
uses
  //GoogleMaps-API
  BrowserTools,
  gmBase, gmAPI, gmMap,
  gmOverlaysPolylinePolygon, gmOverlaysMarker, gmOverlaysBase,
  gmEvents,
  HTMLObjects, //immer als letztes da sonst Marker.OnClick nicht geht

Peter.Stadler 3. Nov 2017 07:16

AW: Google Maps über COM (Component Object Model)
 
Danke für die Antwort.

Leider hat das Einhalten Deiner Reihenfolge keinen Einfluß auf den Compilationsfehler von oben.

mfg Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.
Seite 52 von 55   « Erste     242505152 5354     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