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
Thom

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

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

  Alt 22. Nov 2012, 00:55
Kein Problem:
Das macht das IDocHostUIHandler-Interface, das in der Unit DocHostUIHandler im Verzeichnis JScript definiert ist. Die für das Framework notwendige Implementierung übernimmt das Objekt TDocHostUIHandler in der Unit BrowserTools. Dort ist für den Rahmen die Methode GetHostInfo zuständig.

Falls Dir das zu kompliziert ist, kannst Du auch hierfür das Framework verwenden, indem Du kein TScript-, sondern nur ein TCustomScript-Objekt für den betreffenden Browser anlegst:
Delphi-Quellcode:
uses
  ..., JScriptObjects, gmAPI, ...;

if Script(WebBrowser2)=nil
  then TCustomScript.Create(WebBrowser2);
Du mußt dann allerdings beachten, daß Du bei jedem Aufruf der Funktion Script() den betreffenden Browser als Parameter übergibst:
Delphi-Quellcode:
with Script(WebBrowser1) do
  [...]
Die Variante ohne Parameter funktioniert nur in Single-WebBrowser-Projekten.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#2

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

  Alt 22. Nov 2012, 13:01
Das ist ja mal wieder eine Hammerantwort. Vielen Dank für die Details.

Die erste Lösung konnte ich aber noch nicht ganz nachvollziehen. Welchen konkreten Aufruf müsste ich ausführen, damit ein WebBrowser den Rahmen verliert?

Die Lösung mit TCustomScript wäre ideal, da ich ohnehin überall Scipt(WebBrowser1) verwende, da ich bereits erfolgreich zwei Browser im Project mit GoogleMaps verwende.

Allerdings bekomme ich mit "if Script(WebBrowser2) = nil then TCustomScript.Create(WebBrowser2);" eine Exception aus BrowserTools.GetDispID() mit "Unbekannter Name". Irgendeine Idee?

Vielen Dank im voraus!
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 22. Nov 2012, 14:47
Da mußt DU nichts aufrufen sondern das funktioniert nach dem Motto: Ruf' mich nicht an, ich rufe Dich an.
Du stellst nur das Interface bereit, das dann vom WebBrowser abgefragt wird, wenn es dem IE danach ist.

Die Exceptions werden ausgelöst, weil ein Objekt aus WebBrowser2 im WebBrowser1 genutzt werden soll. Das geht aber nicht, da die Gültigkeit der verwendeten Interfaces auf den jeweiligen Browser beschränkt ist.

Ein Beispiel dazu:
Wird mit TMarkerOptions.Create ein Objekt erstellt, geschieht das im Kontext des zuletzt erstellten Script-Objektes (was dann wahrscheinlich WebBrowser2 ist). Wird jetzt der Marker im WebBrowser1 mit New(Script(WebBrowser1).Google.Maps.Marker(MarkerO ptions)) oder implizit mit with Script(WebBrowser1) do New(Google.Maps.Marker(MarkerOptions)) erstellt, geht das aus den anfangs geschilderten Gründen schief.
Hier muß also auch das MarkerOptions-Objekt im entsprechenden Kontext erstellt werden. Um das zu steuern, muß in der Create-Methode das entsprechende Script-Objekt angegeben werden: TMarkerOptions.Create(Script(WebBrowser1)).

Da das mächtig umständlich ist, werden in Version 3 auch für alle Hilfsobjekte entsprechende New()-Funktionen eingeführt:
Delphi-Quellcode:
with Script(WebBrowser1) do
begin
  MarkerOptions:=New(Google.Maps.MarkerOptions);
  [...]
  New(Google.Maps.Marker(MarkerOptions));
end;
Damit "wissen" alle Objekte, zu welchem WebBrowser sie gehören sollen.

Bis dahin muß leider noch das entsprechende Script-Objekt als Parameter an den Constructor übergeben werden, wenn Objekte auf die herkömmliche Delphi-Art erstellt werden.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (22. Nov 2012 um 14:51 Uhr)
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#4

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

  Alt 22. Nov 2012, 15:20
Ich sag es ja immer: Kaum macht man alles richtig, schon klappt es.

Ich habe bei allen Create() das Script(WebBrowser)-Argument ergänzt und jetzt klappt die TCustomScript-Version des rahmenlosen TWebBrowser.

Super! Vielen Dank!
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 22. Nov 2012, 15:32
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#6

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

  Alt 22. Nov 2012, 22:21
Ganz kurze Frage: Unterstützt das Framework nicht TPolyline.Visible? Laut der API-Referenz sollte es die Variable eigentlich geben.

Zweite Frage: Ich muss leider noch mal auf den hübschen rahmenlosen WebBroswer zurückkommen. Leider zeigt er auch keine vertikale Scrollbars mehr an, wenn der Inhalt nicht vollständig zu sehen ist. Gibt es eine Möglichkeit, auch ohne Rahmen einen Scrollbar zu bekommen?

Geändert von HJay (22. Nov 2012 um 22:40 Uhr) Grund: zweite Frage
  Mit Zitat antworten Zitat
Thom

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

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

  Alt 22. Nov 2012, 23:28
Das kommt in der Version 3 - die 2 unterstützt das noch nicht, da die Eigenschaft Visible erst relativ neu ist.
Das Polyline-Objekt selbst unterstützt die Sichbarkeit nur über Getter- und Setter-Methoden. Du kannst das Objekt aber jetzt schon selbst erweitern (Unit gmOverlaysPolylinePolygon):
Delphi-Quellcode:
  TPolyline = class(...)
    [...]
  public
    procedure SetVisible(Value: Boolean);
    function GetVisible: Boolean;
    [...]
  end;

procedure TPolyline.SetVisible(Value: Boolean);
begin
  Exec('setVisible',[Value]);
end;

function TPolyline.GetVisible: Boolean;
begin
  Result:=VarAsBoolean(Exec('getVisible'));
end;
Das Problem mit den Scrollbars kann ich bei mir nicht reproduzieren. Ich hatte das mit zwei TWebBrowser-Komponenten nebeneinander getestet - der eine mit einer Karte, der andere mit der Google-Suchseite. Die Google-Suchseite wird korrekt mit einer horizontalen und einer vertikalen Leiste angezeigt:
scrollbars.jpg
Das müßte bei Dir also andere Ursachen haben. Welche IE-Version verwendest Du?
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (23. Nov 2012 um 12:04 Uhr)
  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: ?ิ????? 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 06:13 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