Delphi-PRAXiS
Seite 10 von 55   « Erste     8910 111220     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)

BlueLiquidCell 28. Jun 2011 18:25

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

Hätte noch ne kleine Frage zu den Overlays ;-)

Ist es möglich ein Overlay wieder zu löschen oder zu verschieben?
Hab darüber leider nichts gefunden :-(

Schöne Grüße
Christoph

Thom 28. Jun 2011 19:38

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

Ja, das geht - wenn auch wieder nur über die Trickkiste. :lol:
Leider bietet (T)OverlayView keine Methode oder Eigenschaft, um die Größe oder Position des Overlays zu beeinflussen.

Schaut man sich allerdings TUSGSOverlay aus der Demo SimpleOverlay an, kann man feststellen, daß in der Methode OnAdd ein DIV-Container erstellt wird, der das Overlay-Bild aufnimmt und dessen Größe und Position in der Methode Draw an die gewünschten Koordinaten angepaßt wird.

Die erste Möglichkeit besteht also darin, den DIV-Container einfach auf der Karte an die gewünschte Stelle zu verschieben.
Bei der zweiten Möglichkeit wird das Overlay mit
Delphi-Quellcode:
Overlay.SetMap(TMap(nil));
//...
von der Karte entfernt, worauf die Methode OnRemove aufgerufen wird. Anschließend wird das Overlay einfach wieder der Karte zugeordnet
Delphi-Quellcode:
Overlay.SetMap(Map);
//...
, worauf wieder OnAdd und Draw durchlaufen werden und damit die Möglichkeit besteht, das Overlay an einer anderen Stelle zu positionieren.

BlueLiquidCell 28. Jun 2011 19:49

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

Super deine Trickkiste!!!!
Habs aber irgendwie nicht hinbekommen. :-(

Delphi-Quellcode:
Overlay.SetMap(Map);
geht gar nicht weil er das nicht kennt

Delphi-Quellcode:
Overlay.SetMap(Map);
bringt folgenden error:
[Error] Unit1.pas(366): This form of method call only allowed for class methods

Könntest du vielleicht nen kurzes beispiel schreiben auch mit dem DIV-Container? Nur wenns nicht zuviel aufwand ist ;-)

Vielen Dank
Christoph

Thom 28. Jun 2011 20:22

AW: Google Maps über COM (Component Object Model)
 
Ich staune auch immer wieder, was da alles drin ist... :lol:

Noch ein kleiner Tip: Wenn Du das Overlay öfters aus- und wieder einblendest, wäre es eventuell sinnvoll, das Abräumen der Delphi-Wrapper für die DIV-Elemente von der Destroy- in die OnRemove-Methode zu verlegen:
Delphi-Quellcode:
destructor TUSGSOverlay.Destroy;
begin
  //FDivNode.Free; <- hier und
  //FImageNode.Free; <- hier weg
  inherited;
end;

procedure TUSGSOverlay.OnRemove;
begin
  Variant(DivNode.ParentNode).RemoveChild(DivNode.Disp);
  FDivNode.Free; //<- und dafür hier
  FImageNode.Free; //<- und hier hin
end;
Machst Du das nicht, produzierst Du zwar dank der Aufräum-Automatik des Frameworks keine Speicherlecks - dafür packst Du Dir aber den Hauptspeicher unnötig voll.

OK. Veränderte Demo SimpleOverlay:
Delphi-Quellcode:
  TForm1 = class(TForm)
    //...
  private
    FMap: TMap; //<- neu
    FOverlay: TOverlayView; //<- neu
    //...
  public
    //...
    property Map: TMap read FMap write FMap; //<- neu
    property Overlay: TOverlayView read FOverlay write FOverlay; //<- neu
  end;

procedure TForm1.FormShow(Sender: TObject);
var
  //Map: TMap; <- hier entfernen
  //...
begin
  //...
  Overlay:=TUSGSOverlay.Create(Bounds,SrcImage,Map); //<-Overlay in Variable speichern
end;

procedure TForm1.Button1Click(...)
begin
  Overlay.SetMap(TMap(nil)); //<- Overlay von der Karte entfernen -> OnRemove wird aufgerufen
  Overlay.SetMap(Map); //<- Overlay wieder einblenden -> OnAdd und Draw werden aufgerufen
end;

BlueLiquidCell 28. Jun 2011 20:35

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

Vielen dank aber es gibt immernoch Fehler aber ich suche morgen nochmal :-)

Christoph

Thom 28. Jun 2011 20:50

AW: Google Maps über COM (Component Object Model)
 
Wenn's morgen nicht klappt: Ich kann auch noch mal meine veränderte Demo SimpleOverlay posten, wenn es Dir hilft. An der hatte ich das Ein- und Ausblenden des Overlays gerade getestet.

BlueLiquidCell 28. Jun 2011 20:52

AW: Google Maps über COM (Component Object Model)
 
Das wär super, hab wahrscheinlich irgendwas vergessen ;-)

Danke
Christoph

Thom 28. Jun 2011 22:07

AW: Google Maps über COM (Component Object Model)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ok. Da ist sie.

Ist nicht schön: Einfach nur ein Button über die Karte geklebt - demonstriert aber das Aus- und Einblenden eines Overlays...:lol:

Anhang 34504

Ich habe die Demo doch noch etwas "schöner" gemacht:
Jetzt ist der Button zum Aus- und Einblenden des Overlays an der richtigen Stelle und über zwei Schieberegler können sogar Opazität und horizontale Verschiebung der Overlays beeinflußt werden. 8-)

BlueLiquidCell 29. Jun 2011 11:53

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

Jetzt gehts! Super!

Christoph

Thom 29. Jun 2011 12:14

AW: Google Maps über COM (Component Object Model)
 
Prima - meistens hilf es wirklich, mal eine Nacht über ein Problem zu schlafen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:26 Uhr.
Seite 10 von 55   « Erste     8910 111220     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