Delphi-PRAXiS
Seite 34 von 55   « Erste     24323334 353644     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)

Thom 20. Nov 2012 12:30

AW: Google Maps über COM (Component Object Model)
 
Schön, daß es bei Dir funktioniert!

Die Email mit der angepaßten Bibliothek ist unterwegs.
Du müßtest dort wahrscheinlich nur die Zeilen 743-746 auskommentieren, die Bibliothek packen und in die Resourcendatei kompilieren.

HJay 21. Nov 2012 15:43

AW: Google Maps über COM (Component Object Model)
 
@Thom: Ja, nochmals vielen Dank, hat alles tadellos geklappt. Die Markierungsfunktion sieht jetzt schick aus und funktioniert perfekt.

Ich habe eine neue res-Datei erzeugt, aber die Bibliothek noch nicht gepackt. Muss ich mal schauen, wie das geht. Wie groß sind denn die Performancevorteile?

Thom 21. Nov 2012 16:42

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

An der Performance wird sich wahrscheinlich nicht ändern - nur die Größe der fertigen Exe würde etwas reduziert, da die Resource dann kleiner ist. Wenn man sich allerdings die mit jeder neuen Delphi-Version steigenden Exe-Größen anschaut, spielen die paar KByte wahrscheinlich auch keine entscheidende Rolle mehr... :roll:

Packen kannst Du die Datei eigentlich mit jedem beliebigen JavaScript-Online-Kompressor.
Da in neueren Delphi-Versionen schon eine zip-Funktionalität eingebaut ist, bestände auch die Möglichkeit, die JavaScript-Bibliothek vor der Kompilierung in die res-Datei mittels zip-Verfahren zu komprimieren und dann im laufenden Betrieb wieder aus der Resource zu lesen und anschließend zu dekomprimieren.

HJay 21. Nov 2012 22:51

AW: Google Maps über COM (Component Object Model)
 
Mir ist aufgefallen, dass der TWebBrowser, der für die GoogleMap verwendet wird, keinen Rahmen hat.

Mir ist es selbst noch nicht gelungen, einen TWebBrowser ohne lästigen und relativ unschönen 3D-Rahmen darzustellen. Magst Du verraten, wie das funktioniert? Ich würde gerne einen zweiten TWebBrowser auf meiner Form haben, der auch rahmenlos ist.

Thom 22. Nov 2012 00:55

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

HJay 22. Nov 2012 13:01

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

Thom 22. Nov 2012 14:47

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

HJay 22. Nov 2012 15:20

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

Thom 22. Nov 2012 15:32

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

HJay 22. Nov 2012 22:21

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:49 Uhr.
Seite 34 von 55   « Erste     24323334 353644     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