![]() |
Webbrowser Screenshot
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
Ich möchte aus von einem beliebigen IE Fenster ein Vorschaubildchen erstellen. Das funktioniert bestens mit der Funktion GetIEBitmap(), wenn ich einen TWebbrowser angebe. Wenn ich jedoch auf ein IHTMLDocument2 von einem IE Fenster zugreife, gibt's am Ende von Button1Click eine AV (Siehe auch Screenshot, asm Code) Zitat:
Delphi-Quellcode:
function GetIEBitmap(IEDoc: IWebBrowser2): TBitmap;
var ViewObject: IViewObject; DrawRect: TRect; begin Result := TBitmap.Create; Result.Width := IEDoc.Width; Result.Height := IEDoc.Height; if IEDoc.Document <> nil then begin IEDoc.Document.QueryInterface(IViewObject, ViewObject); if ViewObject <> nil then try DrawRect := Rect(0, 0, Result.Width, Result.Height); ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Form1.Handle, Result.Canvas.Handle, @DrawRect, nil, nil, 0); finally ViewObject._Release; end; end; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var IE: IWebbrowser2; targetBitmap: TBitmap; begin IE := Webbrowser1.DefaultInterface as IWebBrowser2; targetBitmap := GetIEBitmap(IE); try ImgPreview.Picture.Bitmap.Assign(targetBitmap); finally targetBitmap.Free; end; end; |
Re: Webbrowser Screenshot
Nachtrag: ViewObject._Release; habe ich nun weggelassen aber der Screenshot bleibt weiss..
|
Re: Webbrowser Screenshot
COM-Interfaces werden glaube ich automatisch freigegeben und müssen nicht selbst freigegeben werden.
|
Re: Webbrowser Screenshot
Zitat:
Aber das muss man selbst ausprobieren bei welchen aktionen das nötig ist. Zitat:
![]() |
Re: Webbrowser Screenshot
Wahrscheinlich musst du DrawRect noch initialisieren.
|
Re: Webbrowser Screenshot
Hallo Thomas.
DrawRect ist initialisiert - allerdings um ein Pixel zu groß. Das Form1.Handle wird ignoriert, weil der Parameter vorher auf nil gesetzt ist. Wird der LIndex = 1 (zweiter Parameter) überhaupt unterstützt?
Delphi-Quellcode:
Es passiert was du schon beschrieben hast - sobald auf ein "externes" Browser-Fenster zugegriffen wird, scheitert die Bildübernahme. Den Fehler-Code kenne ich nicht.
if ViewObject <> nil then
begin DrawRect := Rect(0, 0, Pred(Result.Width), Pred(Result.Height)); hr := ViewObject.Draw(DVASPECT_CONTENT, -1, nil, nil, 0, Result.Canvas.Handle, @DrawRect, nil, nil, 0); ViewObject := nil; ShowMessage(IntToHex(hr)); end; Grüße vom marabu |
Re: Webbrowser Screenshot
Zitat:
Der Fehler lautet: --------------------------- Debugger Exception Notification --------------------------- Project xyz.. raised exception class EOSError with message 'System Error. Code: 14000. Der angeforderte Abschnitt war im Aktivierunskontext nicht vorhanden'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- |
Re: Webbrowser Screenshot
Mit LIndex = 1 wird bei mir der Fehler-Code $800703F0 geliefert - der sagt mir aber auch nichts.
marabu |
Re: Webbrowser Screenshot
Ok.. hab jetz gefunden warum es nicht geht.
In der MSDN steht: Zitat:
![]() |
Re: Webbrowser Screenshot
Danke ACE-ppc!
Gibt's denn eine andere Moeglichkeit? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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