首先三个概念:
1、响应窗口:比如窗口A中打开窗口B,B在A的上面,A得不到焦点,只有关闭了B,A才能重新被激活。
2、弹出式窗口:比如窗口A中打开窗口B,B在A的上面,AB都可以得到焦点。
3、主窗口:比如窗口A中打开窗口B,B可以在A的上面,A也可以跑到B的上面,AB都可以得到焦点。我的问题就是怎么样在任何情况下都能够提示响应窗口式的消息。我在一个1.pas(没有相应窗体,只有一个函数)里写消息提示框,可是好像都达不到 响应窗口的目的。
我用A.Showmodule打开窗口比较。然后把1.pas包含在A里面。首先,我用:
Application.NormalizeTopMosts;
Application.MessageBox('合同期满提醒.'+#13+'请重试!', 
'Application.MessageBox', [smbOK]);
Application.RestoreTopMosts;
效果是 两个成了 主窗口 的关系。
查帮助:
Use NormalizeTopMosts to allow a message box or dialog box that is displayed using Qt functions, appear on top of a topmost form. Otherwise the topmost form remains on top, and may obscure the message box.
它是说可以在form里打开响应窗口的,可是奇怪我在窗口里尝试打开也不行啊。错在哪里呢?
在我的pas里打开就更没用了。第二,我用ShowMessage()。
两者成了弹出窗口的关系。
第三,我用Messagedlg(),
两者成了弹出窗口的关系。
===================谁能告诉怎么令弹出的消息窗口和A是响应窗口的关系呢?

解决方案 »

  1.   

    2、弹出式窗口和3、主窗口可用
       form1:=tform1.create(self);
       form1.show;
       form1.update;
      

  2.   

    在form创建事件或显示事件里显示对话框。
      

  3.   

    to:Erice(白雪公猪)
    2、弹出式窗口和3、主窗口可用
       form1:=tform1.create(self);
       form1.show;
       form1.update;==============老大,什么意思啊?不懂?
      

  4.   

    to:samcrm(阿靖) 
    在form创建事件或显示事件里显示对话框。
    ===================没明白你什么意思?
      

  5.   

    to:samcrm(阿靖) 你的意思是不是说我把函数直接写在A里好了,是不是这样子?可问题是一定要放在一个新的pas里创建函数的。因为我的pas就只要放一些常用的函数。
    我想让函数直接来完成所有提示,懒得写返回值再根据返回值提示。
      

  6.   

    第二,我用ShowMessage()。
    两者成了弹出窗口的关系。
    第三,我用Messagedlg(),
    两者成了弹出窗口的关系。??/
    兄弟,你的表达让人……:(
      

  7.   

    to pressman(还穿三角裤) 
    刚开始时我有说明。
      

  8.   

    messagebox(application.handle,'模态显示','提示',MB_OK);
      

  9.   

    fengjn(小枫):
    老大,顺便告诉我怎么样将 application.handle 转化为HWND?
    application.handle :
    ndicates the unique 4-byte identifier for the underlying Qt QApplication widget instance.
      

  10.   

    messagebox(application.handle,'hello,'提示',MB_OK);//application.handle是关键
      

  11.   

    to 楼上我现在的问题就是不知道如何将application.handle 转化为Long型的Hwnd啊?unique 4-byte --》Long?
      

  12.   

    application.handle 本身就是hwnd
    直接就可以当作long使用。
      

  13.   

    to:fengjn(小枫)Handle property (TApplication)Delphi syntax:property Handle: QApplicationH;=================
    你那不用转换可以通过??
    QApplicationH=Long??
    -------------
    QApplicationH = class(QObjectH) end;
    --------------所以要转化,怎么转化?
      

  14.   

    而且问题是
    QApplicationH 转化了能得到long型的Hwnd?我看还是有问题!
      

  15.   

    property Handle: HWnd read FHandle write SetHandle;
    QApplication……是在clx中使用的,你的是什么应用程序啊?
      

  16.   

    其他的是handle是 property Handle: HWnd read FHandle write SetHandle;
    但是你查一下 TApplication 的handle就知道了。
      

  17.   

    to:fengjn(小枫)你那边编译通过?
      

  18.   

    procedure TForm1.Button2Click(Sender: TObject);
    var i: int64;
    begin
      i:= application.Handle;
      showmessage(inttostr(i));
    end;
      

  19.   

    自己设计一个 FormB,
    把 B 窗口的 FormStyle 属性置为 fsStayOnTop 不就行了
      

  20.   

    晕倒,我是搞不懂 你那怎么回事,可以通过?-------------------[Error]  Incompatible types: 'Int64' and 'QApplicationH'
      

  21.   

    to: hiflower(花) fsStayOnTop是不是说显示在最上面的,但是其他窗口也可以得到焦点的吧?我要的是 响应窗口的形式,响应窗口不关闭,其他窗口是得不到焦点的。
      

  22.   

    messagebox(handle,'hello,'提示',MB_OK);
    handle:  getforegroundwindow//总是在屏幕最前面
              form.handle//form的前面
              0//
      

  23.   

    我平时都是用Showmessge();没碰到你这样的问题。
      

  24.   

    to  fengjn(小枫) :
    知道原因了,是因为我在Uses里包含了Forms和QForms,而QForms放在后面一个,编辑的时候它提醒了我QForms的handle的定义。可是运行之后还是没能达到响应窗口的关系!我也是无能为力了。Q开头的单元是干什么的?确实不懂啊。是CLX的?
    那我查帮助是不是要查VCL的?===============
    此生就带着遗憾过日子吧!----------------
    你们都没有遇到这样子的问题吗?
    那我算不算得古今第一人?是我写的代码有问题还是我这个人有问题?
    还是两者都有问题?
      

  25.   

    是不是象下面三个单元的形式?
    没有什么问题啊!//主窗体单元
    unit Unit1;interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses Unit3;{$R *.dfm}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      A.ShowModal;  // Show 一个模式的窗体
    end;
    end.//一个用于 ShowModal 的窗体单元
    unit Unit3;interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,unit2, StdCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      A: TForm3;
    implementation{$R *.dfm}procedure TForm3.Button1Click(Sender: TObject);
    begin
       ShowMe;
    end;
    end.//消息提示函数的单元
    unit Unit2;interface
    uses
      Dialogs;function ShowMe:Boolean;
    implementation
    function ShowMe:Boolean;
    begin
      ShowMessage('sg');
    end;
    end.
      

  26.   

    》to: hiflower(花) 》fsStayOnTop是不是说显示在最上面的,但是其他窗口也可以得到焦点的吧?》我要的是 响应窗口的形式,响应窗口不关闭,其他窗口是得不到焦点的。
    ------------------------------
    楼主的意思是 响应窗口 = 模式窗口 ??form.ShowModal
      

  27.   

    to:to: hiflower(花) 
    非常感谢你,我终于知道我错在哪里了。
    哎,真是,我在uses里多放了一个,QDialogs;
    --------------------------------------不过经过这次不断的测试,我终于知道其中的奥妙揭帖!
    ---
    让各位就等了!