[ShowWindow后]窗口最小化问题 var ExistHwnd: Hwndbegin ExistHwnd := FindWindow(PChar('TServiForm'),nil); ShowWindow(ExistHwnd,SW_RESTORE);end;其中TServiForm是一个已经打开的窗口,执行上面代码后窗口是显示了,但右上角的最小化按钮无效了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 findwindow获取的应该是form的HANDLE,而你恢复的也是FORM的窗口,但是project的窗口并没有恢复,你可以右键你的菜单栏看看,应该还是最小化的。可以用保存application handle来操作 “ShowWindow(ExistHwnd,SW_RESTORE);” 这句要看你的上小文,如果之前最小化或者最大化了,运行这个可以恢复。 如果只是想显示,可以用 ShowWindow(ExistHwnd,SW_SHOWNORMAL);, 最大化或者最小化也都有对应的参数。想修改 z-order,可以用 SetWindowPos, 或者 BringWindowToTop。 program Project1;uses Forms, windows, Unit1 in 'Unit1.pas' { Form1 } ;Resourcestring FMutex = 'Mutex_ONLY_ONE';{$R *.RES}var hMutex: HWND; iRet: integer; ExistHwnd: HWND;begin Application.Initialize; hMutex := CreateMutex(nil, False, PChar(FMutex)); iRet := GetLastError; if iRet <> ERROR_ALREADY_EXISTS then begin Application.CreateForm(TForm1, Form1); Application.Run; end else begin ExistHwnd := FindWindow(PChar('TForm1'),nil); ShowWindow(ExistHwnd,SW_RESTORE); end; ReleaseMutex(hMutex);end.简化了下,写了个测试,意思就是打开了form1就不让打开第二个了,顺便想把已经打开的那个实例激活到windows的最上面,发现的问题是,这样可以把Form1激活,但是Form1的右上角的最小化按钮已经没效了! IsIcon 判断一下窗体是不是最小化了,如果不是,就不要restore,直接 bring to top 不知道我在说什么吗~~ 唉~ 多想下为什么出这种问题啊~ 在ShowWindow(ExistHwnd,SW_RESTORE);之前加上ExistHwnd := GetWindow(ExistHwnd, GW_OWNER);看看 GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。 这个问题其实Borland取巧,TApplication本身就是一个窗口,只是她是不可见的,四围是(0,0,0,0),而且她过滤主窗体的系统消息。所以,你要最小化整个应用程序,应该用Application.Minimize。 可以写代码把word文件中的指定图片导出来吗? AdvStringGrid1 编辑设置 数字格式问题(100分) 怎樣把表中的字段名加到combobox中? 关于界面的控制 怎样在delphi 中调用帮助文件,急急!!!在线等待 在用DBLookupCombox时,下拉框不出来 我要疯了------〉〉〉〉〉〉〉〉为什么访问本类的私有变量都能造成非法访问内存? 紧急求救!关于delphi的控件 同样是下午6:00前散分:怎么查找文件? 共享软件开发用的什么语言? TAiHint的问题?
可以用保存application handle来操作
program Project1;uses
Forms,
windows,
Unit1 in 'Unit1.pas' { Form1 } ;Resourcestring
FMutex = 'Mutex_ONLY_ONE';
{$R *.RES}var
hMutex: HWND;
iRet: integer;
ExistHwnd: HWND;begin
Application.Initialize;
hMutex := CreateMutex(nil, False, PChar(FMutex));
iRet := GetLastError;
if iRet <> ERROR_ALREADY_EXISTS then
begin
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
begin
ExistHwnd := FindWindow(PChar('TForm1'),nil);
ShowWindow(ExistHwnd,SW_RESTORE);
end; ReleaseMutex(hMutex);
end.简化了下,写了个测试,意思就是打开了form1就不让打开第二个了,顺便想把已经打开的那个实例激活到windows的最上面,发现的问题是,这样可以把Form1激活,但是Form1的右上角的最小化按钮已经没效了!
唉~
多想下为什么出这种问题啊~
在ShowWindow(ExistHwnd,SW_RESTORE);之前加上ExistHwnd := GetWindow(ExistHwnd, GW_OWNER);看看
这个问题
其实Borland取巧,TApplication本身就是一个窗口,只是她是不可见的,四围是(0,0,0,0),而且她过滤主窗体的系统消息。所以,你要最小化整个应用程序,应该用Application.Minimize。