很多时候模式对话框没有关闭,用户一直在点击工具栏,
我看到很多软件都有这个功能,当用户点击其他地方时,会闪动模式对话框还有ShowMessage也可以这样闪动这要怎么做呢?

解决方案 »

  1.   

    这样的话 就要写很多代码了..  而且你也不能 showmodal了 要用show 不然点其他地方是没有反应的
      

  2.   

    用flashwindow,自己做个提示窗体
      

  3.   

    答案是:用新版本的 delphi,版本可以 delphi2007或以上。原因是 delphi 的窗体不是标准的 windows 窗体,新版本的 delphi 已经重构了大量代码,修正了。
    所以,我对于新手建议至少要用 delphi2007 版本。
      

  4.   


    为什么我看一个软件用Borland C++ 做的都可以闪动呢?  也是TForm
      

  5.   

    你都说是 Borland C++ 了,那是一样的工具吗?!
      

  6.   


    delphi不能实现吗?  没有提示 经常客户会不知道怎么点  一直点 都不行
      

  7.   

    flashwindow。
    闪动 任务栏窗体
      

  8.   


    在哪里加呢?showmodal 里面?
      

  9.   

    可在Application.onmessage处理。
    用FlashWinFO更弹性一些。var
      FR: FLashWinFO;
    begin 
      //判断是模式窗口,并且应用程序消息不是属于该模式窗口(意味鼠标在其它位置)
      if (Application.ModelLevel > 0) and (Msg.hwnd <> Applicaiton.ActiveFormHandle) then
      begin 
        FR.hwnd := Applicaiton.ActiveFormHandle;//设置要闪动的窗口
        FR.cbSize := Sizeof(FR);
        FR.uCount := 5;//闪动次数
        FR.dwTimeOut := 500;//闪动间隔
        FR.dwFlags := FLASHW_CAPTION;//闪动位置,具体参考帮助,这里设置为标题栏
        FLashWindowEx(FR);//开始闪动
      end;
    end;
      

  10.   

    请问Application.ModelLevel和ActiveFormHandle在哪呢?
    我用的是delphi7Application.OnMessage:=MyCustomMessage;
    procedure TForm2.MyCustomMessage(var Msg: tagMSG; var Handled: Boolean);
    beginend;
      

  11.   

    这两个东西,是delphi后续版本加的。
    ActiveFormHandle可自己写function GetActiveFormHandle: HWND;
    begin 
      Result := GetActiveWindow;
      if Result = 0 then
        Result := GetLastAtivePopup(Applicaiton.Handle)
    end;modelLevel是表示当前程序有模式窗口,且存在几层。
    可用取巧的方式:判断主窗口 IsWindowEnabled(..)即可
      

  12.   

    procedure TForm2.MyCustomMessage(var Msg: tagMSG; var Handled: Boolean);
    begin
    if Msg.message=WM_LBUTTONDOWN then
     begin
    //
    end;
    end;好像在窗体外 不执行啊
      

  13.   

    有一个blog专门针对delphi7和2007的说明,其中就说到delphi2007已经具备模态窗口的闪动功能。当然高版本也是可以的
      

  14.   

    今天看到一个delphi7做的软件 都可以啊
    效能日程提醒
    http://www.onlinedown.net/soft/77890.htm点关于弹出来的窗口是 TAboutForm  
    都可以闪动 就是不知道怎么实现的
      

  15.   

    这软件也没用dll啊  怎么实现的呢
      

  16.   

    delphi7也可以实现的。第一步:模式窗口定义unit uAbout;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, pngimage, ExtCtrls, StdCtrls, LbButton;type
      TfrmAbout = class(TForm)
        lbl2: TLabel;
        lbl3: TLabel;
        lbl4: TLabel;
        lbl5: TLabel;
        img1: TImage;
        lbl1: TLabel;
        lbl6: TLabel;
        img2: TImage;
        procedure lbl3Click(Sender: TObject);
      protected
        procedure CreateParams(var Para: TCreateParams); override; //闪烁标题
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmAbout: TfrmAbout;implementation{$R *.dfm}procedure TfrmAbout.CreateParams(var Para: TCreateParams);
    begin
      inherited CreateParams(Para);
      if ((Owner = Application) or (Owner = nil)) then
        Exit;
      Para.WndParent := TForm(Owner).Handle; //修改父窗口名称
    end;procedure TfrmAbout.lbl3Click(Sender: TObject);
    begin
      Close;
    end;end.
    第二步:调用:procedure TfrmMain.mniAboutClick(Sender: TObject);
    begin
      try
        frmAbout := TfrmAbout.Create(Self); 要传入父窗口的Handle
        frmAbout.ShowModal;
      finally
        frmAbout.Free;
        frmAbout := nil;
      end;
    end;
      

  17.   

    delphi7也可以实现的。第一步:模式窗口定义unit uAbout;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, pngimage, ExtCtrls, StdCtrls, LbButton;type
      TfrmAbout = class(TForm)
        lbl2: TLabel;
        lbl3: TLabel;
        lbl4: TLabel;
        lbl5: TLabel;
        img1: TImage;
        lbl1: TLabel;
        lbl6: TLabel;
        img2: TImage;
        procedure lbl3Click(Sender: TObject);
      protected
        procedure CreateParams(var Para: TCreateParams); override; //闪烁标题
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmAbout: TfrmAbout;implementation{$R *.dfm}procedure TfrmAbout.CreateParams(var Para: TCreateParams);
    begin
      inherited CreateParams(Para);
      if ((Owner = Application) or (Owner = nil)) then
        Exit;
      Para.WndParent := TForm(Owner).Handle; //修改父窗口名称
    end;procedure TfrmAbout.lbl3Click(Sender: TObject);
    begin
      Close;
    end;end.
    第二步:调用:procedure TfrmMain.mniAboutClick(Sender: TObject);
    begin
      try
        frmAbout := TfrmAbout.Create(Self); 要传入父窗口的Handle
        frmAbout.ShowModal;
      finally
        frmAbout.Free;
        frmAbout := nil;
      end;
    end;