窗体显示的问题

linzhengqun 2005-03-08 08:54:53
一个主窗体,一个副窗体。
主窗体Show出副窗体,这两个窗体在任务栏有两个标题:
这个的做法是,在副窗体中重载CreateParams,并实现如下:
procedure Form2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.wndParent := GetDesktopWindow;
end;

但现在有一个问题,即主窗体最小化后,点击任务栏的标题让它回复,它竟然跑到副窗体的后面去了。
各位试试,看看有什么解决的办法呀。


...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
linzhengqun 2005-03-08
  • 打赏
  • 举报
回复
哈太谢谢 ysai了,
马上结贴
:)
ysai 2005-03-08
  • 打赏
  • 举报
回复
为什么不行?不行就是你搞错了,全部代码如下.....主窗体的,副窗体不要动



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, StrUtils;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
public
procedure CreateParams(var Params: TCreateParams);override;
end;

var
Form1: TForm1;

implementation

uses
unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.show;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
with Application do
SetWindowLong(Handle, GWL_EXSTYLE,
GetWindowLong(Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
params.WndParent := 0;
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
case message.CmdType of
SC_MINIMIZE :
DefWindowProc(Handle, message.Msg,TMessage(message).wParam,TMessage(message).lParam);
else
inherited;
end;
end;

end.
linzhengqun 2005-03-08
  • 打赏
  • 举报
回复
闷郁当中,去大富翁问一下
Breakc0de 2005-03-08
  • 打赏
  • 举报
回复
学习。。
smiler007 2005-03-08
  • 打赏
  • 举报
回复
哎.....真是这样的....原来没有注意过.....学习学习...
linzhengqun 2005-03-08
  • 打赏
  • 举报
回复
To: ysai(所有真的都是假的真,所有假的都是真的假)
你的解决方法似乎也不行,不知是不是我试得不对,你如果测试成功可以把代码贴一下出来吗。

To: hsgrass37301(零点)
我再试着用另一种方法试试看吧。

各位试试看啊,这个可是一个大问题啊。
hsgrass37301 2005-03-08
  • 打赏
  • 举报
回复
// procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
if (Msg.CmdType = SC_MINIMIZE) then
begin
ShowMessage('min');
// 你的代码...
end;
if (Msg.CmdType = SC_MAXIMIZE) then
ShowMessage('max');
DefaultHandler(Msg);
end;
// 截获最大化和最小化消息更奇怪.
// 点击任务栏的主窗体两次就可以正常显示主窗体.你用程序试下模拟两次点击,应该有其它方法.但我想不到.sorry.Good Luck
ysai 2005-03-08
  • 打赏
  • 举报
回复
把application隐藏,把主窗体也用副窗体一样的方法,让它显示在任务栏上,自己处理最小化/关闭消息

5,392

社区成员

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

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