为什么在一个工程里打开的窗口在windows的任务栏里都会显示出来,而不是只显示主窗口?

leon528 2004-10-15 12:02:43
我在工程的主窗口里,用ocx.create(self)方法创建了一个自己开发的activexform控件类型的对象,
在程序运行时,凡是这个控件里打开的窗口(在控件里通过form.create(self),然后showmodal),都会在windows的任务栏里显示出来,这样打开的窗口多了以后,windows任务栏里就会排满了窗口。
为什么不能像在一个工程里那样,不管打开多少个窗口,在windows任务栏里始终只显示程序的主窗口?
...全文
292 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
leon528 2004-10-23
  • 打赏
  • 举报
回复
搞定了,谢谢你啊
leon528 2004-10-23
  • 打赏
  • 举报
回复
我看看
leon528 2004-10-21
  • 打赏
  • 举报
回复
我用的不是动态库,是activexform啊
xthmpro_cn 2004-10-21
  • 打赏
  • 举报
回复
上面的我没有说完,我没有开发过OCX你参考一下dll吧,我认为原因是一样的!
你创建一个DLL,导出两个函数
TFunction1=procedure Stdcall;
TFunction2=procedure (HostAppHandle: THandle); Stdcall;
TFunction1,用于show一个FORM,
AForm.Create(Application).Show;

TFunction2,用于设置Application.handle:
Application.Handle:=HostAppHandle;

运行EXE,此时点击按钮,必然在状态条上出现两个任务条.现在将Exe程序中的:
//myFunction2(Application.Handle);取消注释.

在运行程序,则只有一个任务条了.
我想OCX也有这个问题,可能途径不同.你自己查资料.
xthmpro_cn 2004-10-20
  • 打赏
  • 举报
回复
我测试通过了:
下面的代码放在EXE中:
TFunction1=procedure Stdcall;
TFunction2=procedure (HostAppHandle: THandle); Stdcall;

procedure TForm1.BitBtn2Click(Sender: TObject);
var
handle: THandle;
myFunction1: TFunction1;
myFunction2: TFunction2;
begin
//加载插件
handle:=LoadLibrary('H:\MyProgram\BBS\Bin\test.dll');
if handle <= 0 then
begin
MessageBox(Application.Handle,'无法加载动态库','asf',MB_OK);
exit;
end;

//获取插件初始化函数地址
@myFunction1:=GetProcAddress(handle,'showForm2');
@myFunction2:=GetProcAddress(handle,'SetApplicationHandle');
if not Assigned(myFunction1) then
begin
MessageBox(Application.Handle,'无效的动态库','asf',MB_OK);
FreeLibrary(handle);
exit;
end;
//myFunction2(Application.Handle);
myFunction1;

end;
xthmpro_cn 2004-10-19
  • 打赏
  • 举报
回复
如果再不行,联系一下,我做一下测试,现在没空.
xthmpro_cn 2004-10-19
  • 打赏
  • 举报
回复
你传递:
Application.Handle
你自己测试一下,我以前写Dll的时候也有这种现象,反正是通过Application搞定的.
你然后创建窗体用:Create(Application)
leon528 2004-10-18
  • 打赏
  • 举报
回复
??????
leon528 2004-10-17
  • 打赏
  • 举报
回复
没有人知道么
hellolongbin 2004-10-15
  • 打赏
  • 举报
回复
应该是窗口属性的问题
设为子窗口或弹出窗口试试
leon528 2004-10-15
  • 打赏
  • 举报
回复
在activexform中,哪个是主窗体呢?
askwho 2004-10-15
  • 打赏
  • 举报
回复
主窗体的模式设置为fsMDIform,子窗体设置为fsMDIchild,并且在project菜单下将child属性的窗体从左侧的列表中移动到右侧
leon528 2004-10-15
  • 打赏
  • 举报
回复
请问,如何把application传递给ocx?
如果在ocx中做一个接口来接收,那接收的参数类型怎么设置?
xthmpro_cn 2004-10-15
  • 打赏
  • 举报
回复
把Application传递给OCX,
记住原来的Application对象.
在OCX中设置Application=传递进来的Application,

释放OCX的时候还原Application.
leon528 2004-10-15
  • 打赏
  • 举报
回复
formstyle都是fsnormal,没用mdi的方式。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧