delphi 从 TWebbrowse组件中获取图片

在 delphi 中使用 TWebbrowse 组件,虽然效率不如用(idhttp之类)模拟操作效率高。但其难度低,上手快,简单粗暴有效。

从网上搜到的处理此问题的文章大多是 ctrl + c 复制到剪贴板的方法,但在 win7 64中,此法几乎没法使用,随时报剪贴板错误。

本方法利用 IHTMLElementRender 接口,完美地解决了问题。同时,也可以加深对接口的进一步理解。

delphi7源码下载

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, OleCtrls, SHDocVw, MSHtml;
type
  // 此定义是从 XE8 的 MSHTML 单元中抄的
  IHTMLElementRender = interface(IUnknown)
    [‘{3050F669-98B5-11CF-BB82-00AA00BDCE0B}‘]
    function DrawToDC(hdc: hdc): HResult; stdcall;
    function SetDocumentPrinter(const bstrPrinterName: WideString; hdc: hdc): HResult; stdcall;
  end;

  TForm1 = class(TForm)
    WebBrowser1: TWebBrowser;
    Image1: TImage;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    FFirstShow: Boolean;
    FCodeBmp: TBitmap;
  end;

var
  Form1: TForm1;

implementation
const
  csUrl = ‘https://account.guokr.com/sign_in/?‘;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FFirstShow := true;
  FCodeBmp := TBitmap.Create;
  FCodeBmp.Height := 40;
  FCodeBmp.Width := 100;
  FCodeBmp.PixelFormat := pf24bit;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
 // 做一个 FirstOnShow 功能。
 // OnCreate 事件中使用 WebBrowser1.Navigate 的话,会出错的。
  if FFirstShow then
  begin
    WebBrowser1.Navigate(csUrl);
    FFirstShow := false;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Doc: IHTMLDocument2;
  Render: IHTMLElementRender;
begin
  Doc := WebBrowser1.Document as IHTMLDocument2;
  Render := Doc.All.Item(‘captchaImage‘, EmptyParam) as IHTMLElementRender;
  Render.DrawToDC(Self.Canvas.Handle);
  Render.DrawToDC(FCodeBmp.Canvas.Handle);
  Image1.Picture.Assign(FCodeBmp);
end;

end.

原文地址:https://www.cnblogs.com/lackey/p/9053967.html

时间: 2024-07-29 10:32:54

delphi 从 TWebbrowse组件中获取图片的相关文章

angular2的ElementRef在组件中获取不到

angular2的ElementRef在组件中获取不到 angular2不推荐操作dom,但是实际应用中不可避免的需要使用到dom操作,怎么操作,官方文档提供了一系列api(ElementRef,ViewContainerRef ,TemplateRef)配合 @ViewChild或@ViewChildren就可以获取到dom元素,但是这个过程中有些文档未提及的坑,本人不小心踩进去,半天才爬出来,因此分享一下. 首先,需要在ng2的模板中使用 #banners 定义一个模板局部变量,如: <di

Android从Camera中获取图片的两种方法

方法一: 此方法会由Camera直接产生照片回传给应用程序,但是返回的是压缩图片,显示不清晰 /**   启动Camera */ private void intentCamera(){     try {          Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);          startActivityForResult(cameraIntent, 0);      } catch (Activi

从相册中获取图片

Intent intent=new Intent(); intent.setAction("android.intent.action.PICK"); intent.setType("image/*"); startActivityForResult(intent, 100); 在activity中重写onactivityForResult()方法,在里面获取得到的数据 从相册中获取图片

Android从相册中获取图片以及路径

首先是相册图片的获取: private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0;   //这里的IMAGE_CODE是自己任意定义的 //使用intent调用系统提供的相册功能,使用startActivityForResult是为了获取用户选择的图片 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.set

在自定义组件中获取spring底层组件

要想在自定义组件中获取spring底层的各种组件,只需让自定义组件实现一系列接口即可,这些接口都是Aware的子接口.常见的有: 1. ApplicationContextAware——用于获取IOC容器: 2. BeanNameAware——用于获取bean的名称: 3. EmbeddedValueResolverAware——用于获取字符串解析器,可以解析各种占位符,例如${}.$#{}等. 示例代码如下,自定义bean类实现了三种Aware接口 public class Candy imp

Android中使用OKHttp上传图片,从相机和相册中获取图片并剪切

效果: 注意:1:网络权限<uses-permission android:name="android.permission.INTERNET"></uses-permission>2:我封装了一个OKHttp,需要在build.gradle 中加入compile 'com.squareup.okhttp3:logging-interceptor:3.4.2' 在同步一在3:用SharedPreferences 保存和获取图片了,将图片和字符串进行了转换4: 可

Android中获取图片的宽和高

在Android中,我们想获取图片的宽和高应该怎么办?一.正常加载图片的方法下获取宽和高 举一个简单的例子:创建一个图片的副本 //加载原图 Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.photo3); //创建副本 //1.创建与原图一模一样大小的bitmap对象,该对象中目前是没有内容的,可以比喻为创建了和原图一样大小 //的白纸 Bitmap bmCopy = Bitmap.createBit

从网络中获取图片显示到Image控件并保存到磁盘

一.从网络中获取图片信息: 1 /// <summary> 2 /// 获取图片 3 /// </summary> 4 /// <param name="url">Url</param> 5 /// <returns>BitmapImage</returns> 6 public BitmapImage GetImage(string url) 7 { 8 BitmapImage image=null; 9 try

vue父组件中获取子组件中的数据

<FormItem label="上传头像" prop="image"> <uploadImg :width="150" :height="150" :name="'avatar'" size="150px*150px" ref="avatar"></uploadImg> </FormItem> <FormItem