Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild vom TWebbrowser erstellen (https://www.delphipraxis.net/200304-bild-vom-twebbrowser-erstellen.html)

Youuuu 8. Apr 2019 10:01

Bild vom TWebbrowser erstellen
 
Guten Morgen,

gibt es eine Möglichkeit ein Bild vom TWebbrowser zuerstellen, also nur die Komponente an sich mit Inhalt?

Grüße
Steven

Michael II 8. Apr 2019 10:15

AW: Bild vom TWebbrowser erstellen
 
Vielleicht so … (?)

Delphi.Narium 8. Apr 2019 10:30

AW: Bild vom TWebbrowser erstellen
 
Delphi-Quellcode:
{ Bildschirmfotos machen }
function CaptureScreenRect( ARect: TRect ): TBitmap;
var
  ScreenDC: HDC;
begin
  Result := TBitmap.Create;
  with Result, ARect do begin
    Width := Right - Left;
    Height := Bottom - Top;
    ScreenDC := GetDC( 0 );
    try
      BitBlt( Canvas.Handle, 0, 0, Width, Height, ScreenDC, Left, Top, SRCCOPY );
    finally
      ReleaseDC( 0, ScreenDC );
    end;
  end;
end;

{ Bildschirmfotos machen }
function CaptureScreen: TBitmap;
begin
  with Screen do Result := CaptureScreenRect(Rect( 0, 0, Width, Height));
end;

{ Bildschirmfoto eines Controls machen. }
function CaptureClientImage( Control: TControl ): TBitmap;
begin
  with Control, Control.ClientOrigin do
    Result := CaptureScreenRect( Bounds( X, Y, ClientWidth,
                ClientHeight ));
end;

{ Bildschirmfoto eines Controls machen. }
function CaptureControlImage( Control: TControl ): TBitmap;
begin
  with Control do
   if Parent = nil then
      Result := CaptureScreenRect( Bounds( Left, Top, Width, Height ))
    else
      with Parent.ClientToScreen( Point( Left, Top )) do
        Result := CaptureScreenRect( Bounds( X, Y, Width,
                    Height ));
end;

{ Bildschirmfoto eines Controls machen. }
function CaptureWindowImage(Wnd: HWND): TBitmap;
var
  R: TRect;
begin
  GetWindowRect(Wnd, R);
  Result := CaptureScreenRect(R);
end;
Keine Ahnung, wo ich das wann auch immer gefunden habe.

Michael II 8. Apr 2019 13:48

AW: Bild vom TWebbrowser erstellen
 
Hallo DelphiNarium

das funktioniert in D10.3 nicht:
In CaptureScreenRect werden in deinem Code nicht width und height der Bitmap gesetzt, sondern von ARect. Die Bitmap behält dadurch Grösse 0x0. (Wieder einmal ein Ausgangspunkt zur Diskussion "with Ja oder Nein" ;-).)

Wenn du stattdessen with ARect, Result do begin schreibst, dann klappt's:

Delphi-Quellcode:
function CaptureScreenRect( ARect: TRect ): TBitmap;
var
  ScreenDC: HDC;
begin
  Result := TBitmap.Create;
  with ARect, Result do begin
    Width := Right - Left;
    Height := Bottom - Top;

Aber:
- Wenn du das Fenster über den Bildschirmrand hinaus schiebst, dann wird nur der sichtbare Bereich fotografiert.
- Wenn das Fenster durch ein anderes Fenster ganz oder teilweise überdeckt ist, dann klappt dein Ansatz auch nicht.

Kurz: Ich würde diesen Weg nicht gehen.

Delphi.Narium 8. Apr 2019 13:57

AW: Bild vom TWebbrowser erstellen
 
Bei dem von mir geposteten Code handelt es sich um ein Fundstück aus dem Internet, von dem ich leider nicht mehr weiß, wo es her ist.

In eigenem Code von mir wirst Du kein with finden, das ist in etwa so wie würfeln oder russisch Roulette, es kann gut gehen, muss es aber nicht.

Eventuell könnten die Routinen daher sein: http://delphiworld.narod.ru/base/cop...n_to_form.html

Oder daher? http://www.cyberforum.ru/delphi/thread5653.html

Keine Ahnung, wer da jetzt nun der Urheber ist und wer da was von wo übernommen / abgekupfert hat.

Tante Bei Google suchenCaptureScreenRect findet da noch einiges mehr.

Michael II 8. Apr 2019 14:03

AW: Bild vom TWebbrowser erstellen
 
Wenn du nicht den Weg via IHTMLImgElement; IHTMLElementRender (#2) und nicht die ganze Webseite benötigst (#7), sondern nur ein Bild vom Control (also nur von dem Teil der Webseite, welcher im Control sichtbar ist) machen willst, dann schlage ich mal vor:

Delphi-Quellcode:
procedure ScreenShot( Handle : HWND; BitMap: TBitMap);
var
  dc : HDC;
  rect : TRect;
begin
  GetWindowRect( Handle, rect );
  BitMap.SetSize( rect.Width, rect.Height );
  dc := GetDC( Handle );
  if (dc = 0) then exit;
  BitBlt(Bitmap.canvas.Handle, 0, 0, rect.Width, rect.height, dc, 0, 0, SRCCOPY);
  ReleaseDC( Handle, dc );
end;

Aufruf:

Delphi-Quellcode:
  hbit := TBitMap.Create;
 try
  ScreenShot( webbrowser1.Handle, hbit );
  hbit.SaveToFile( ... ); // zum Beispiel in ein File speichern
 finally
  hbit.Free;
 end;

HolgerX 8. Apr 2019 14:07

AW: Bild vom TWebbrowser erstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..

ein bischen Google...

ein bischen testen und bearbeiten...

.. und schon bekomme ich vom TWebBrowser einen kompletten Webseiten ScreenShot.

(Was von hier ausgeborgt und überarbeitet:

https://www.experts-exchange.com/que...FIX-A-BUG.html

Erstellt mit D6)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.

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