Hallo jonathan,
verwende die Funktion zum speichern des Inhaltes des WebBrowsers in einem JPG-File, hatte ich aus einem Beitrag hier im Forum
Delphi-Quellcode:
procedure WebBrowserScreenShot( const wb:TWebBrowser;const FileName:TFileName );
var viewObject : IViewObject;
r : TRect;
Bitmap : TBitmap;
begin
if wb.Document <> nil then
begin
wb.Document.QueryInterface( IViewObject,viewObject );
if Assigned( viewObject )then
try
Bitmap := TBitmap.Create;
try
r := Rect( 0,0,wb.Width,wb.Height );
Bitmap.Height := wb.Height;
Bitmap.Width := wb.Width;
viewObject.Draw( DVASPECT_CONTENT,1,nil,nil,Application.Handle,Bitmap.Canvas.Handle,@r,nil,nil,0 );
with TJPEGImage.Create do
try
Assign( Bitmap ) ;
SaveToFile( FileName ) ;
finally
Free;
end;
Clipboard.Assign( Bitmap );
finally
Bitmap.Free;
end;
finally
viewObject._Release;
end;
end;
end;
dabei setze ich die Größe der Karte vorher auf eine virtuelle Größe die ich im Ziel haben will z.B. w:=4096,h:=4096
Delphi-Quellcode:
WebBrowserMap.Align := alNone;
WebBrowserMap.Width := w;
WebBrowserMap.Height := h;
danach zentriere ich den Kartenauschnitt auf meinen gewünschten Bereich
MapCenter; // eigene Funktion mit Script.Maps[0].FitBounds( t ) etc.
dann speichern.
WebBrowserScreenShot( WebBrowserMap,APP_PATHTEMPFILES + '\Test.jpg' );
Wichtig ist hier, dass es abhängig von der Breite/Höhe dauert, bis die Karte aufgebaut ist. Beim zweiten mal deutlich schneller -> Cache.
Ich verwende derzeit eine Zeitschleife. Versuche mit
WebBrowserMap.Busy=False
und
Map.OnTilesLoaded
waren bisher nicht erfolgreich. Die Lösung mit der Zeitschleife ist für persönliche Belange ausreichend, für die Weitergabe der Applikation indiskutabel aber sie tut. Das Ergebis ist dann eine schöne Karte in einer tollen detailierten Auflösung. Optimal z.B. für die Grundlage einer Kamerafahrt über die Karte beim Videoschnitt -> Indiana Jones Effekt. (Lizenzbestimmungen beachten).
Danach Browser wieder in Client und Ausschnitt zentrieren
Delphi-Quellcode:
WebBrowserMap.Align := alClient;
MapCenter;
Gruß DelphiFan2008