控制二次运行及最小化SDI时发现不显示窗体内容,请帮帮我!(100分)

  • 主题发起人 主题发起人 tywjh
  • 开始时间 开始时间
T

tywjh

Unregistered / Unconfirmed
GUEST, unregistred user!
发现问题:(Email:tywjh@etang.com)
二次运行程序时窗体出菜单外,其他内容不显示,请教解决之法。以下是相关代码:
在Form的OnClose事件中有:
Action := caNone;
ShowWindow(handle,SW_MINIMIZE);
使得窗体不能被关闭。
在工程文件中用:
var oHandle:Integer;
begin
oHandle := FindWindow('TDogServer',nil);
if oHandle <> 0 then
begin
if IsIconic(oHandle) then
DefWindowProc(oHandle, WM_SYSCOMMAND, SC_RESTORE, 0)
else SetForegroundWindow(oHandle);
Exit;
end;
......
end.
 
试试
if IsIconic(oHandle) then
SendMessage(oHandle, WM_SYSCOMMAND, SC_RESTORE, 0);
//或者:
ShowWindow(oHandle, SW_RESTORE);
 
试一试在OnClose的时候
Application.Minimize;

因为据我了解,Delphi在启动一个程序时,创建了一个不显示的窗口作为程序的主窗口
对程序的最小最大化和恢复都是针对这个窗口的。在程序里创建的其他窗口都不是直接
和程序关联的,所以最小化这些窗口并不会最小化整个应用程序。

在win98,win2000中可以看到,用delphi写的程序最小化时并不像其他很多程序那样,
有一个小动画。那是因为其实程序的主窗口本来就是hide的。

没试过,希望能解决你的问题
 
没有明白你的要求。
按照你的代码,我这里最小话时窗体根本不会弹出
 
谢谢关注:
1.其实DefWindowProc(oHandle, WM_SYSCOMMAND, SC_RESTORE, 0)和
SendMessage(oHandle, WM_SYSCOMMAND, SC_RESTORE, 0) 一样。
2.Application.Minimize没用,我试过,反复几次后竟然最小化都不行了。
 
DefWindowProc怎么会和SendMessage一样?
SendMessage将调用Window的WindowProc进行消息处理
DefWindowProc将跳过该Window的WindowProc而直接调用默认的消息处理(结果是
忽略所有WindowProc中对消息的响应)
 
多人接受答案了。
 
后退
顶部