TWebBrowser <select> <option>单击</option> </select>

时间:2014-01-10 07:19:23

标签: delphi combobox html-select twebbrowser

我正在尝试使用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

这很棒。但是,在组合框崩溃的情况下,在用户实际选择一个选项之前,我在扩展时得到组合框中的第一个结果。我随后得到了正确的结果。

那么,我如何检测到用户实际点击了某个项目?非常感谢。

0 个答案:

没有答案