我想让我弹出的窗体用户只能关闭,不能进行其他的操作(包括对窗体中控件的操作),我写了下面的代码,弹出的窗体却什么都不响应了,而且关闭程序时要等好久大家帮看看有什么问题,或有什么其他的方法实现我的要求
var
fhandle :HWND;procedure TForm1.AppMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
m:Integer;
begin
Handled := false;
if(Msg.hwnd = fhandle) then
begin
if(Msg.message<>WM_CLOSE) then
begin
Handled := true;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
fhandle := form2.Handle;
Application.OnMessage := AppMessageHandler;
end;
var
fhandle :HWND;procedure TForm1.AppMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
m:Integer;
begin
Handled := false;
if(Msg.hwnd = fhandle) then
begin
if(Msg.message<>WM_CLOSE) then
begin
Handled := true;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
form2.Show;
fhandle := form2.Handle;
Application.OnMessage := AppMessageHandler;
end;
当然程序没有反应了,
可以把窗体上的控件都Disabled了
var
I : Integer;
begin
for I := 0 to Self.ControlCount - 1 do
Self.Controls[I].Enabled := False;end;
procedure TForm1.AppMessageHandler(var Msg: TMsg; var Handled: Boolean);
begin
if(Msg.hwnd = fhandle) then
if 是鼠标或键盘消息 then
Handld := True;
end;
其实,对于你的要求有一个简单的办法:
在窗体上放一个Panel,设为alClient,然后所有的控件都放在Panel上,最后设Panel的Enable属性为False就可以了
并且真的全部屏蔽,那怎么关闭窗口呢
对于我来说,只是得到一个TForm我不可能去改动窗体的东西
也不许我对窗口进行改造
1 按我说的改造消息函数
2 或者,用CreateParented方法