小编Mil*_*lan的帖子

Delphi和Internet Explorer,创建"全局"IE

我有一些继承的代码用于打开IE,这是短版本:

procedure OpenIE(URL: OleVariant; FieldValues: string = '');
var ie : IWebBrowser2;
begin
  ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
  ie.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
  ShowWindow(ie.HWND, SW_SHOWMAXIMIZED);
  ie.Visible := true;
  ...
end;
Run Code Online (Sandbox Code Playgroud)

由于CreateOleObject需要很长时间才能执行,所以我希望第一次运行时有一个"准备好的"IE.

例如,在Main FormCreate中调用CreateOleObject,然后对OpenIE的第一次调用使用已经创建的"IE"对象.

对于OpenIE的第2次,第3次调用 - 通常调用ie:= CreateOleObject

当我尝试编写它时,我得到一些线程和编组错误,我是这个领域的新手.什么是正确的方法(一些小代码示例会很棒)?

提前致谢.

delphi internet-explorer ole

1
推荐指数
1
解决办法
3099
查看次数

Delphi从2个不同的线程访问OleObject

我有一些继承的代码用于打开IE,我有一些麻烦,这就是我所拥有的:

IEUnit.pas(无表格)具有LoadIE和OpenIE的例程

从单独的线程调用OpenIE,它看起来像这样

procedure OpenIE(URL: OleVariant; FieldValues: string = '');
var ie : IWebBrowser2; // <-- This should become "global" variable for the IEUnit
begin
  ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
  ie.Navigate2(URL, Flags, TargetFrameName, PostData, Headers);
  ShowWindow(ie.HWND, SW_SHOWMAXIMIZED);
  ie.Visible := true;
  ...
end;
Run Code Online (Sandbox Code Playgroud)

我想在单元中有"全局"即变量,并像这样编写LoadIE例程:

应从FormCreate(主线程)调用LoadIE

它应该只是创建"全局"即对象

  ie := CreateOleObject('InternetExplorer.Application') as IWebBrowser2;
Run Code Online (Sandbox Code Playgroud)

所以OpenIE功能不需要创建它,只是为了使用它(目的是加快速度)

所以问题是如何从2个不同的线程访问相同的OLE对象,一个创建对象,另一个使用它.


当我编写不处理线程的代码时,我收到错误

异常类EOleSysError,消息'该应用程序称为为不同线程编组的接口'

我应该怎么做,照顾线程(我没有线程经验,欢迎一些阅读和视频链接).

提前致谢

delphi multithreading ole

1
推荐指数
1
解决办法
2076
查看次数

如何组织帮助函数

我需要创建很多帮助程序来转换字符串.

就像是 :

String Function1(String s) {}
Run Code Online (Sandbox Code Playgroud)

我想从任何人那里打电话给他们Activity.

做这个的最好方式是什么 ?我是否需要创建课程?我只是想拥有一个包含所有这些功能的独立文件.这是否是包裹的候选人?

java string android helpermethods

0
推荐指数
2
解决办法
8743
查看次数