2

这是我从http://delphi.about.com/cs/adptips2004/a/bltip0104_4.htm下载的代码示例

procedure WBLoadHTML(WebBrowser: TWebBrowser; HTMLCode: string) ;
var
   sl: TStringList;
   ms: TMemoryStream;
begin
   WebBrowser.Navigate('about:blank') ;
   while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
    Application.ProcessMessages;

   if Assigned(WebBrowser.Document) then
   begin
     sl := TStringList.Create;
     try
       ms := TMemoryStream.Create;
       try
         sl.Text := HTMLCode;
         sl.SaveToStream(ms) ;
         ms.Seek(0, 0) ;
         (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms)) ;
       finally
         ms.Free;
       end;
     finally
       sl.Free;
     end;
   end;
end;

我正在使用 RAD Studio XE5,编译器抱怨 WebBrowser 实例的 ReadyState 和 Document 属性。

因此,在我来自的 Java 世界中,当 Java 之神弃用某些 API 功能时,他们会在 API 中引用我应该做的事情。

这似乎不会在 Delphi 世界中发生。TWebBrowser 类的 ReadyState 和 Document 属性已从 API 中简单地删除。

我相信这里有人可以将这段代码快速成型。但是,我需要找到更改 Delphi API 问题的通用解决方案。这不是我第一次遇到这种情况。

另一个例子是 TButton 曾经有一个名为 Caption 的属性,现在称为 Text。那个我不得不自己猜测。

所以我想我正在寻找的是一个 Delphi API 更新日志,最好是在线提供......

我在哪里可以找到这样的东西?

4

2 回答 2

4

此代码示例是为 VCL 应用程序设计的。您已清楚地将其放入 FMX 应用程序中。通过切换到 VCL 应用程序来解决问题。

也就是说,我无法推荐此代码。它在 Web 浏览器控件上执行忙碌等待!它包括对饱受诟病的人的呼吁,这是正确的,Application.ProcessMessages. 那个繁忙的循环只是等到文档完成加载。并且组件提供了一个在发生这种情况时触发的事件,即DocumentComplete.

于 2013-10-16T14:34:27.320 回答
2

当代码示例无法编译时,我会从编译器读取消息并检查uses子句中是否包含正确的单元。有时我会参考文档,在极端情况下,我会用 grep 搜索特定的库文件,或者如果那天我感觉特别虐待狂,就问一下关于 SO 的 Delphi Gods。

于 2013-10-17T04:00:24.183 回答