这样的窗体很难实现吗?(200分)

  • 主题发起人 主题发起人 caowei
  • 开始时间 开始时间
C

caowei

Unregistered / Unconfirmed
GUEST, unregistred user!
快被搞死了 。。。。
Form1,里面有个按钮button1,按下后,显示form2。
要求:
1. form2在form1的上面,form1始终在桌面其他所有窗口的上面
2. form1和form2都不能最小化,即使按下任务栏的“显示桌面”。
我已经把DFW的文章查遍了,综合出的方法如下:
在两个FORM创建的时候均调用SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
为了使窗口不能被缩小,在Form1创建时调用:
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
结果:
所需要的两个功能均没有实现!如果不点button1,那么form1就是对的,即它总在最前面
而且不能被缩小,但是为什么一旦form2出来就都不对了呢???
怎么办呢????

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWinDowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
form2.show;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;
 
呵呵,这个问题在dfw好象是不可能完成的任务,问了太多,也太多人回答,但好象没有人实现
或者有人实现了,却不愿意说
 
应该会有人告诉我吧?期待中...
以前的答案我都试验遍了,也没有找到好办法。
 
泡杯茶,慢慢等哈。。。不要急。。。面包会有的,牛乃也会有的。。。
 
也能被缩小,只是在桌面左下角!
 
先把windows的状态栏找到, 隐藏了, 就不可以按显示桌面了, 我的办法怎么样啊?
 
我試了我的軟件,發現原來很簡單
顯示桌面的按鈕隻對在任務欄有顯示的程序有效果
如果禁止了任務欄顯示,就不會被最小話了
禁止程序任務欄顯示的方法:
SetWindowLong( Application.Handle, GWL_EXSTYLE,
GetWindowLong(Application.Handle, GWL_EXSTYLE) or
WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
 
对 form1 和 form2 都覆盖一下以下过程:

procedure CreateParams(VAR Params: TCreateParams); override; { Public declarations }



unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure CreateParams(VAR Params: TCreateParams); override; { Public declarations }
end;

var
Form1: TForm1;

implementation

uses Unit2;

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWinDowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.showModal;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
params.WndParent:=0;
end;

end.






unit Unit2;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
procedure CreateParams(VAR Params: TCreateParams); override; { Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
params.WndParent:=0;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

end;

end.


 
Form2.FormStyle:=fsStayOnTop;
Form2.Show;

至于最小化的事情,你可不可以在选项卡里面设置阿?那里有form的设置选项阿!
 
unit1
.....
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
end;

unit2
....

type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
procedure WMSyscommand(var message:TWMSyscommand);message WM_SYSCOMMAND;
{ Private declarations }
public
procedure CreateParams(var Params:TCreateParams);override;
{ Public declarations }
end;

var
Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WndParent:=Form1.Handle;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
end;

procedure TForm2.WMSyscommand(var message: TWMSyscommand);
begin
if (message.CmdType and $FFF0=SC_MINIMIZE) then
else
inherited;
end;
 
后退
顶部