我如何让我的DLL中的FORM最小化时,整个应用程序最小化。(50分)

  • 主题发起人 yanghaijun
  • 开始时间
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
什么意思?WindowState := wsMinmized不行吗?
 
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
当然不行,你必须使用APPLICATION的最小化,才能使指定的窗口缩小到任务栏上。
你从主程序中调用DLL的FORM后,若你点按DLL的FORM的最小化按钮,则其只能是
DLL的FORM最小化,而且还只是在桌面上最小化,不能缩到任务栏上。我以前见过
类似的一篇文章可做到,好象是要传递APPLICATION到DLL中,但我试了一下,怎么
也不能实现。
 

王寒松

Unregistered / Unconfirmed
GUEST, unregistred user!
下列代码放到你的FORM 最小画事件里
var hd: THandle;
BEGIN
hd:=FindWindow(nil, pchar('foxmail'))
//这里我最小化了正在运行的
//FOXMAIL,你应该用
//APPLICATION.TITLE换掉
//FOXMAIL
postmessage(hd,WM_SYSCOMMAND, SC_MINIMIZE, 0);
END;
 
D

DNChen

Unregistered / Unconfirmed
GUEST, unregistred user!
一个简单但是可能不是很实用的方法:
1、将exe重新编译为Uses package: VCL30
2、将DLL重新编译为uses package:VCL30
3、好了,现在你的DLL中的Application对象就是你的EXE中的application
对象了,可惜这种方法需要程序在发布时带上vcl30.dpl文件。
 

王寒松

Unregistered / Unconfirmed
GUEST, unregistred user!
TForm1 = class( TForm )

Private
procedure WMSysCommand( var Message : TWMSysCommand )
Message WM_SYSCOMMAND;
Public
end;

procedure TForm1.WMSysCommand( var Message : TWMSysCommand );
var
hd : THandle;
begin
inherited;
if ( Message.CmdType and $FFF0 = SC_MINIMIZE )
then
begin
hd := FindWindow( nil, pchar( 'winzip' ) );
If hd<>0 then
postmessage( hd, WM_SYSCOMMAND, SC_MINIMIZE, 0 );
end;
end;
 
Y

yanghaijun

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部