Ich staune auch immer wieder, was da alles drin ist...
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;