怎样来区分,鼠标单击的是哪个ID元素 ( 积分: 100 )

  • 主题发起人 主题发起人 ptfjy
  • 开始时间 开始时间
P

ptfjy

Unregistered / Unconfirmed
GUEST, unregistred user!
我不知道,怎样只用一个事件,就能区分刚才单击的是哪一个网页元素的id ?
 
我不知道,怎样只用一个事件,就能区分刚才单击的是哪一个网页元素的id ?
 
连接HTMLDocumentEvents2
利用他的onclick就可以了。
 
我的问题没那么简单!
 
你的问题这样解决没问题,onclick接收一个IHTMLEventObj 的参数,你可以从里面得到fromElement,他是个IHTMLElement,你就可以读出id来对比了。
思路就是这样,我还要上班,没时间给你写demo,见谅。


http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/events/htmldocumentevents2/onclick.asp
 
兄弟,所有的标签的点击事件都会触发onclick的,你在里面把id抓出来判断就可以了,那里需要一个标签一个事件。你的做法和我作的肯定不一样。发代码到satanmonkey@21cn.com
 
to satanmonkey:
兄弟,已发了,请查收!
 
没收到。
 
看到了你的代码,你一次只hook了一个元素的onclick当然出现你的哪种问题了。
我告诉你的方法是hook整个document的onclick。

就照我说的做就可以了。连接HTMLDocumentEvents2用这句
InterfaceConnect(Doc, HTMLDocumentEvents2, Self, Connection);
doc是ihtmldocument,self是IDispatch的实现,uses comobj就有InterfaceConnect函数
HTMLDocumentEvents2需要uses mshtml
 
thanks for you!
 
对不起,上班很忙,没时间帮你修改代码,你照我说的思路做,不会又问。
 
unit Cweb2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, StdCtrls, ActiveX;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure DemoEventSink(Sender: TObject);
private
public
{ Public declarations }

end;

var
Form1: TForm1;

implementation
{$R *.dfm}
uses MSHTML, IEDocHostUIHandler, IEConst, DHTMLEvent,comobj;
var
FDocHostUIHandler: TDocHostUIHandler;//为屏蔽右键菜单
Doc : IHTMLDocument2;
Element : IHTMLElement;
EventSink: TDHTMLEvent;

procedure TForm1.FormCreate(Sender: TObject);
begin
FDocHostUIHandler := TDocHostUIHandler.Create;//为屏蔽右键菜单
EventSink := TDHTMLEvent.Create;
WebBrowser1.Navigate(GetCurrentDir + '/index.htm');
end;

procedure TForm1.DemoEventSink(Sender: TObject);
Var
S:String;
begin
S:='B0';
Element:=Doc.all.item(S, 0) as IHTMLElement;
if nil<>Element then
Begin
Element.style.color:='#ff0000';
ShowMessage('您的鼠标单击了第一行文字!');
end;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
S:String;
Connection,i:integer;
begin
Doc := IHTMLDocument2(WebBrowser1.Document);
InterfaceConnect(Doc, HTMLDocumentEvents2, EventSink, Connection);

end;

end.
 
利用下班的十分钟给你改了个,还是不会我就没办法了。记得给分哦。
 
to satanmonkey:
太感谢您了,我先看一下,马上给分!
 
因为我试了以后,鼠标移过去后根本没有反应!
 
晕了。用我贴出来的代码,替换你原来的同名文件,然后编译,我在d7下编译的,然后去点你的html,应该会弹出id来。不是移上去就出来,你好像要的就是单击的啊。我调出来的代码早删除了,现在回家了。明天再给你答复。

onclick那个过程你看到了吧,我是把id取出来showmessage,你自己改改,改成比较id来判断是某个元素就可以了。
 

Similar threads

D
回复
0
查看
943
DelphiTeacher的专栏
D
D
回复
0
查看
882
DelphiTeacher的专栏
D
D
回复
0
查看
959
DelphiTeacher的专栏
D
D
回复
0
查看
786
DelphiTeacher的专栏
D
后退
顶部