给TWebBrowser添加鼠标事件
学习用IsChild(WebBrowser1.Handle, Msg.Hwnd)判断鼠标事件是否来自TWebBrowser
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, MSHTML;
type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
private
{ Private declarations }
FLoaded: Boolean;
procedure AppMsg(var Msg: TagMsg; var Handled: Boolean);
procedure GetContronl;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.AppMsg(var Msg: TagMsg; var Handled: Boolean);
var
mPoint : TPoint;
begin
if IsChild(WebBrowser1.Handle, Msg.Hwnd) and
(Msg.Message = WM_MOUSEMOVE) and FLoaded then
begin
GetCursorPos(mPoint);
GetContronl;
//PopupMenu1.Popup(mPoint.X, mPoint.Y);
Handled:=True;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FLoaded := False;
WebBrowser1.Navigate( 'http://www.kitop.com ');
Application.OnMessage := AppMsg;
end;
procedure TForm1.GetContronl;
var
E: IHTMLElement;
tmpStr: String;
myPoint: TPoint;
begin
myPoint := Mouse.CursorPos;
myPoint := WebBrowser1.ScreenToClient(myPoint);
{
myPoint.X := myPoint.X + 100;
myPoint.Y := myPoint.Y + 100;
}
E := (WebBrowser1.Document as IHTMLDocument2).elementFromPoint(myPoint.X, myPoint.Y);
//E := (WebBrowser1.Document as IHTMLDocument2).elementFromPoint(100, 100);
//ShowMessage(E.title);
tmpStr := Format( '%s,%s,%s,%s;X:%d;Y:%d ',[E.className,E.id,E.tagName,E.innerHTML,
myPoint.X,myPoint.Y]);
Caption := tmpStr;
end;
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
FLoaded := True;
end;
end.
转自:http://t.zoukankan.com/delphi7456-p-1896632.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?