程序忽然不能最小化了,具体情况内详(200分)

  • 主题发起人 主题发起人 lvloj
  • 开始时间 开始时间
L

lvloj

Unregistered / Unconfirmed
GUEST, unregistred user!
忽然发现自己的程序不能最小化了, 最小化按钮不是灰掉的, 但点击它没有作用.
窗体是默认设置, 也没有用第三方的控件.

在我一句代码一句代码的屏蔽编译测试后,发现是一个调用DLL窗口的语句引起的(调用的DLL是静态加载的).DLL是自己写的,不能理解的是不执行那个调用DLL窗体的函数, 仅仅是编译到程序中,就不能最小化了.

而后的测试中发现, 使用DLL还是可以最小化的, 但调用的程序不能通过其他程序执行.
具体情况是: 我有个程序A, 执行以后, 可以调用程序B(B有调用DLL的语句.A,B都是Exe文件), 程序B就不能最小化. 如果程序B直接运行, 那么程序B可以最小化.
但现在我的程序B必须是由程序A来调用的.

还有就是程序如果在编译的时候选择上Build with runtime packages就不能最小化, 不选择则可以正常最小化.

Dll函数:
function ShowDllForm(const AppHandle: HWND; const ParamPack: OleVariant; var Data: OleVariant): Boolean; stdcall;

实现:
function ShowDllForm(const AppHandle: HWND; const ParamPack: OleVariant; var Data: OleVariant): Boolean; stdcall;
begin
Application.Handle := AppHandle;
Result := False;
FormCondition := TFormCondition.Create(Application);
with FormCondition do
try
...
ShowModal;
finally
Free;
end;
end;
请问: 问题出在哪里, 怎么解决.

谢谢!
 
你这样试试,看行吗?
function ShowDllForm(const AppHandle: HWND; const ParamPack: OleVariant; var Data: OleVariant): Boolean; stdcall;
begin
Application.Handle := AppHandle;
Result := False;
FormCondition := TFormCondition.Create(Application);
with FormCondition do
try
...
ShowModal;
windows.SetParent(Application.Handle,GetdesktopWindow);
finally
Free;
end;
end;
 
上面代码咐啥意思啊,见过好几次了。不懂,大唐电信兄,能讲讲吗?
 
我也遇到过类似的情况,后来是在主程序中捕获消息解决的

procedure WMMINIMIZE(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

procedure TForm1.WMMINIMIZE(var Msg: TWMSysCommand);
begin
if Msg.CmdType = SC_MINIMIZE then
WindowState := wsMinimized;
inherited;
end;
 
多谢大家, xianguo的代码可以让程序最小化了, 如果找不到答案, 我想这是最后的方案了, 但我真的想知道是哪里的代码导致的问题.

大唐电信: 你的代码我试过了不行, 还有就是Dll编译进入Exe, 程序就不能最小化, 不是调用了Dll才不能最小化...

此贴还想保留几天, 看看大家的意见, 谢谢.
 
程序不能最小化, 还有一个特点, 就是正常的程序编译后, 默认的图标是Delphi带的那个, 现在我不能最小化的程序运行后在任务栏图标是一个窗口样子的图标, 好像程序的句柄被改变了一样. 但我只是把dll静态编译就这样了, 不包含dll编译就是正常的图标.也能最小化.
 
接受答案了.
 
后退
顶部