AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild vom TWebbrowser erstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Bild vom TWebbrowser erstellen

Ein Thema von Youuuu · begonnen am 8. Apr 2019 · letzter Beitrag vom 8. Apr 2019
Antwort Antwort
Youuuu

Registriert seit: 9. Okt 2016
60 Beiträge
 
Delphi 11 Alexandria
 
#1

Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 10:01
Guten Morgen,

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

Grüße
Steven
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 10:15
Vielleicht so … (?)
Michael Gasser
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#3

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 10:30
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.

Geändert von Delphi.Narium ( 8. Apr 2019 um 13:49 Uhr) Grund: Schreibfehler - wie immer
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 13:48
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.
Michael Gasser

Geändert von Michael II ( 9. Apr 2019 um 00:45 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#5

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 13:57
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.
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 14:03
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;
Michael Gasser

Geändert von Michael II ( 9. Apr 2019 um 00:48 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
969 Beiträge
 
Delphi 6 Professional
 
#7

AW: Bild vom TWebbrowser erstellen

  Alt 8. Apr 2019, 14:07
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)
Angehängte Dateien
Dateityp: zip Test_WebBrowser_ScreenShot.zip (1,82 MB, 7x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:45 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