Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 如何从TWebBrowser获取图像到TImage_Delphi_Twebbrowser_Timage - Fatal编程技术网

Delphi 如何从TWebBrowser获取图像到TImage

Delphi 如何从TWebBrowser获取图像到TImage,delphi,twebbrowser,timage,Delphi,Twebbrowser,Timage,我在表单顶部有一个面板,上面有一个小小的TMemo,作为URL的放置目标。下面我有一个带有两个选项卡的页面控件。我在一个选项卡中设置了TWebBrowser,在第二个选项卡中设置了一些其他内容。在TWebBrowser中,我需要登录到我们拥有的bug票务站点,然后浏览票务。某些票上有客户希望我们使用的小图片链接(比如logo)。我可以左键单击它们,然后将链接从TWebBrowser拖放到表单顶部的TMemo。它会按预期拾取图像的URL和标题 关联的OnDrop事件也切换到第二个选项卡,我在其中单

我在表单顶部有一个面板,上面有一个小小的TMemo,作为URL的放置目标。下面我有一个带有两个选项卡的页面控件。我在一个选项卡中设置了TWebBrowser,在第二个选项卡中设置了一些其他内容。在TWebBrowser中,我需要登录到我们拥有的bug票务站点,然后浏览票务。某些票上有客户希望我们使用的小图片链接(比如logo)。我可以左键单击它们,然后将链接从TWebBrowser拖放到表单顶部的TMemo。它会按预期拾取图像的URL和标题

关联的OnDrop事件也切换到第二个选项卡,我在其中单击“流程”按钮。这会导致浏览器导航到图像(通过Navigate2),并将其加载到浏览器窗口中。此时浏览器窗口中只有该图像

所以现在我需要代码来抓取图像并将其加载到第二个选项卡上的TImage中。FWIW,原始图像是PNG

我可以从目标图像中获得图像的高度和宽度,但我不能让图像本身在大多数时间显示在图像中。有时,但大多数情况下不是。我可以将PNG加载到这些图像对象中,所以我知道它可以正确显示PNG


(也许有一种方法可以直接下载图片,但我无法实现。TWebBrowser用于登录到一个提供图片的内部bug票务系统,并且我只能访问该站点,前提是该站点位于同一表单上并且我已经登录。否则DL将加载一个HTML登录页面而不是图片。如果在目前的框架下,有一种方法可以做到这一点,我愿意听取建议。)

我使用IHTMLElement2.getelementsByTagName('img')在网页上查找图像文件,并抓取第一个图像文件(因为我知道这就是网页上的全部内容)

Image1与名为Image1_frame的面板上的客户端对齐。因此,我设置了框架的H&W,它们设置为ok

但是图像通常是看不见的,它只是白色的


我发现DrawToDC已被弃用,但我还没有找到替代它的方法。

您可以使用这种方法自动登录(如果需要):


然后,您可以使用此选项获取图像:

“我看到DrawToDC已被弃用,但我还没有找到替换它的方法”-请参阅“也许有一种方法可以直接下载图像,但我无法使其正常工作。”。是的,您可以使用http客户端组件下载任何文件,只要您有URL。您可以使用ICS(或使用Delphi自己的GetIT获取)或Indy。某些URL是受保护的web区域的一部分,因此您还必须使用HTTP组件进行身份验证和/或通过某些页面获取cookie,然后才能交付文档。我尝试了Indy的DL方法,但不断返回一个大文本块,该文本块是构成登录页面的html。我不知道需要什么cookieed.正如我所说,这就是为什么我将浏览器放在第一个选项卡上,因此其他逻辑与初始登录在同一会话中运行。一旦用户登录到第一个选项卡上,我如何才能发出DL请求?这对我来说是不清楚的。我不在乎它是Indy还是ICS,我只是不清楚如何做,因为我发现了它。如果我是al准备好通过TWebBrowser组件登录了,难道没有任何方法可以通过它发出下载请求吗?我看到的所有东西都需要一个单独的组件,或者用一些非常复杂的方法来完成。我只需要右键单击-->另存为…我不想每次下载文件时都要处理登录页面。第一个part看起来可能很管用;我必须试一试。但每个人都不断地向我指出使用不推荐的DrawToDC API的相同示例,但这些示例不起作用。我想看看在不使用100多行卷积代码的地方使用什么。通常当一个函数不推荐使用时,它会被另一个执行使用不同的参数或稍有不同的方法。我所看到的只是几十行代码,它们使用了API的晦涩部分,我几乎找不到任何文档。DrawToDC不是有一个简单的替代品吗?
  img := getFirstImage;
  Image1_frame.Height := img.height+2;
  Image1_frame.Width := img.width+2;
  rnd := img as IHTMLElementRender ;
  rnd.DrawToDC(Image1.Canvas.Handle);