我正在尝试使用TWebBrowser在旧的Delphi 6程序中显示查询结果。每行都有一个组合框(HTML“select”),它列出了用户可以执行的许多操作。使用CommandStateChange事件,我可以计算出在组合框中选择了哪一行和哪个项目。但是,即使简单地删除了组合,事件也会触发 - 即用户尚未特别选择。我不完全确定这是正确的事件,说实话!
所以,给出一些像这样的部分HTML:
<td><select id="row1">
<option value="option1">Run</option>
<option value="option2">Jump</option>
</select></td>
<td><select id="row2">
<option value="option1">Run</option>
<option value="option2">Jump</option>
</select></td>
和一些代码:
procedure TFooListV2Form.WebBrowserCommandStateChange(Sender: TObject; Command: Integer; Enable: WordBool);
var
Doc: IHTMLDocument2; // document object
Sel: IHTMLSelectionObject; // current selection
selectElement : IHTMLSelectElement;
begin
// Check we have a valid web browser triggering this event
if not Assigned(Sender) or not (Sender is TWebBrowser) then
Exit;
// Check we have required command
if TOleEnum(Command) <> CSC_UPDATECOMMANDS then
Exit;
// Get ref to document object and check not nil
Doc := WebBrowser.Document as IHTMLDocument2;
if not Assigned(doc) then
Exit;
Caption := '';
if Assigned(doc.activeElement) then begin
if supports(doc.activeElement, IHTMLSelectElement) then begin
selectElement := doc.activeElement as IHTMLSelectElement;
Caption := doc.activeElement.id + selectElement.value;
end;
end;
end;
给出的结果如下:
row1option1
这很棒。但是,在组合框崩溃的情况下,在用户实际选择一个选项之前,我在扩展时得到组合框中的第一个结果。我随后得到了正确的结果。
那么,我如何检测到用户实际点击了某个项目?非常感谢。