更新 WebBrowser 内容

问题描述 投票:0回答:0

我在表单上有以下控件:Memo1、Memo2 和 WebBrowser。 控件 Memo1 和 Memo2 的 OnExit 过程是用 Memo1.Text 和 Memo2.Text 的内容更新 WebBrowser 的内容。我为此使用以下程序:

procedure LoadBlankDoc(WB: TWebBrowser);
begin
  WB.Navigate('about:blank', EmptyParam, EmptyParam, EmptyParam, EmptyParam);
  while WB.ReadyState = READYSTATE_COMPLETE do
  begin
    Application.ProcessMessages;
    Sleep(0);
  end;
end;

procedure CheckDocReady(WB: TWebBrowser);
begin
  if not Assigned(WB.Document) then
    LoadBlankDoc(WB);
end;

procedure LoadDocFromString(WB: TWebBrowser; const HTMLString: string);
var
  v: OleVariant;
  HTMLDocument: IHTMLDocument2;
begin
  CheckDocReady(WB);
  HTMLDocument := WB.Document as IHTMLDocument2;
  v := VarArrayCreate([0, 0], varVariant);
  v[0] := HTMLString;
  HTMLDocument.Write(PSafeArray(TVarData(v).VArray));
  HTMLDocument.Close;
end;

问题是,当Memo1控件处于活动状态时,我们在WebBrowser区域中单击,然后在Memo2区域中单击,然后在输入第一个字符后光标不出现或消失。有时应用程序会丢失,您根本无法在备忘录中输入文本。 还有一件事:当我在 Memo1 和 Memo2 之间移动时,一切正常。通过单击 WebBrowser 区域出现 OnExit 时会出现此问题。 可能是什么原因?

2023-05-09
我对题目的进一步分析...

在论坛上发布这个问题,我相当怀疑 LoadDocFromString 过程中的一些错误。 然而,进一步的实验表明:

如果我们将焦点放在某些 Memo 控件上,例如。 Memo1,然后我们点击WebBrowser区域,然后焦点就从Memo1上移开了……但是!不执行 Memo1Exit 过程。
如果我们现在点击其他控件,例如Memo2,现在执行 Memo1Exit。
一切正常...
但是,在 Memo 控件的 OnExit 事件中调用 LoadDocFromString 就足够了……问题就开始了。

delphi twebbrowser
© www.soinside.com 2019 - 2024. All rights reserved.