How to get an image that has been downloaded in TWebBrowser to a TPicture without copying it to clipboard or looking in to cache contents.
Asked
Active
Viewed 6,315 times
1
-
If you just want to download an image (or any other file) from the web, that's very easy. (Much easier than using a `TWebBrowser`). But I guess you have your reasons? – Andreas Rejbrand Nov 18 '12 at 20:20
-
@AndreasRejbrand i updated my question. I found a c# solution. But would need to someone to translate. – Nov 18 '12 at 20:20
-
`DrawToDC` is deprecated, see [MSDN DOC](http://msdn.microsoft.com/en-us/library/aa752273%28v=vs.85%29.aspx). Also this SO question: [How to render WebBrowser to device context?](http://stackoverflow.com/q/10884088/576719). – LU RD Nov 18 '12 at 20:50
-
@LURD not quite the same question he want to render whole page. – Nov 18 '12 at 20:56
-
That question illustrates the problem with the deprecated `DrawToDC`. – LU RD Nov 18 '12 at 20:58
1 Answers
8
ok i made sample with last answer to you :
fisrt get image with this function by Id :
function GetImgElementById(const Doc: IDispatch; const id : string): IHTMLImgElement;
var
Document: IHTMLDocument2; // IHTMLDocument2 interface of Doc
Body: IHTMLElement2; // document body element
Tags: IHTMLElementCollection; // all tags in document body
Tag: IHTMLElement; // a tag in document body
I: Integer; // loops thru tags in document body
begin
Result :=nil ;
// Check for valid document: require IHTMLDocument2 interface to it
if not Supports(Doc, IHTMLDocument2, Document) then
raise Exception.Create('Invalid HTML document');
// Check for valid body element: require IHTMLElement2 interface to it
if not Supports(Document.body, IHTMLElement2, Body) then
raise Exception.Create('Can''t find <body> element');
// Get all tags in body element ('*' => any tag name)
Tags := Body.getElementsByTagName('img');
// Scan through all tags in body
for I := 0 to Pred(Tags.length) do
begin
// Get reference to a tag
Tag := Tags.item(I, EmptyParam) as IHTMLElement;
// Check tag's id and return it if id matches
if AnsiSameText(Tag.id, id) then
begin
Result := Tag as IHTMLImgElement ;
Break;
end;
end;
end;
after you can use it :
var
img : IHTMLImgElement ;
rnd : IHTMLElementRender ;
begin
//
img := GetImgElementById(wb1.Document,'imgid');
// img1 is TImage
img1.Height := img.height ;
img1.Width := img.width ;
rnd := img as IHTMLElementRender ;
rnd.DrawToDC(img1.Canvas.Handle);
end;
dont forget "MSHTML" unit ;

A1Gard
- 4,070
- 4
- 31
- 55
-
Is it possible to modify the function based on src attribute? tag=AnsiContainsStr('imagehostname.com')
– Nov 18 '12 at 21:10
-
-
-
No, you can't use direct this way , you must passing result to `TWebBrowser` . – A1Gard Jun 20 '13 at 20:01