我想让我弹出的窗体用户只能关闭,不能进行其他的操作(包括对窗体中控件的操作),我写了下面的代码,弹出的窗体却什么都不响应了,而且关闭程序时要等好久大家帮看看有什么问题,或有什么其他的方法实现我的要求
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;

解决方案 »

  1.   

    如果实现这样目的不应该用OnMessage,象WM_PAINT之类的进队消息都被屏蔽了
    当然程序没有反应了,
    可以把窗体上的控件都Disabled了
    var
      I : Integer;
    begin
      for I := 0 to Self.ControlCount - 1 do
        Self.Controls[I].Enabled := False;end;
      

  2.   

    把消息处理函数改为这样试试:
    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就可以了
      

  3.   

    有些消息是得不到的,无法屏蔽
    并且真的全部屏蔽,那怎么关闭窗口呢
    对于我来说,只是得到一个TForm我不可能去改动窗体的东西
      

  4.   

    服了you,不是让你放panel了吗!
      

  5.   

    别人给我的接口,我得到一个TForm,至于上面有什么控件,要执行什么事件,他已经写好,对我来说不知道,也不关心,我只要窗口暂时只能关闭不能做别的事件就行了
    也不许我对窗口进行改造
      

  6.   

    这样的话还有办法:
    1 按我说的改造消息函数
    2 或者,用CreateParented方法