我正在尝试在webbrowser中获取htmlinputtextelement的id,其中插入符号正在闪烁。所以当我按TAB时它会改变。
如何在delphi中执行此操作?
你知道什么时候你去一个网站,并有多个inputtexlements。您可以按Tab键滚动浏览它们。完成框1,TAB后,填写框2,TAB,框3,TAB,直到您在网站上填写完表格。我想做这个。通过了解当前插入符所在的inputtexlement的id是什么。
您可以使用getcursorpos获取鼠标位置。你能以同样的方式获得插入位置吗?他们没有为x和y提供相同的位置...... ??
procedure TForm1.Button2Click(Sender: TObject);
var
MausPos: TPoint;
HtmlElement: IHTMLElement;
iHTMLDoc: IHtmlDocument2;
tag1:string;
id1:string;
begin
if Supports(webbrowser1.Document, IHtmlDocument2, iHTMLDoc) then
begin
if GetcaretPos(MausPos) then
begin
MausPos := webbrowser1.screentoclient(MausPos);
HtmlElement := iHTMLDoc.ElementFromPoint(MausPos.X, MausPos.Y);
答案 0 :(得分:3)
Caret并不像鼠标光标位置那么简单:每个Window都可以自由创建并显示它自己的插入符号,无论它在哪里。这是一个Using Carets link on MSDN。你通常希望一个窗口只显示一个Caret,如果它有键盘焦点,但我认为即使它没有键盘焦点也没有任何东西阻止显示Caret。
由于正常行为仅在键盘焦点处显示插入符号,因此您可以使用:GetFocus进行检查。但你可能会发现TWebBrowser本身就是焦点,我怀疑每个HTML元素都有一个Window Handle。
我认为你真正想要的是活跃元素。你可以使用:
(TWebBrowser.Document as IHTMLDocument2).activeElement
以下是使用此属性的简短代码段:
procedure TForm25.Button2Click(Sender: TObject);
begin
if (W.Document as IHTMLDocument2).activeElement <> nil then
ShowMessage((W.Document as IHTMLDocument2).activeElement.tagName);
end;