应该是你的弹出窗体遮挡再消失后,自绘窗体并没有马上得到焦点,所以不能激活 FormActivate 事件

解决方案 »

  1.   

    画标题栏要响应WM_NCPAINT消息。还是把窗口设置成无边框,做个假的标题栏吧
      

  2.   

    procedure TForm1.FormPaint(Sender: TObject);
    begin
      DrawCaption;
    end;
    上面这个事件是不是就是响应WM_NCPAINT呢?貌似也没用
      

  3.   

    水平是比较差,不好意思,呵呵,我拦截了这个消息,但还是不行type
      TForm1 = class(TForm)
      private
        { Private declarations }
        procedure DrawCaption;
        procedure WMNCPaint(var Message:TWMNCPaint);message WM_NCPAINT;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.DrawCaption;
    var
      ACanvas: TCanvas;
    begin  ACanvas := TCanvas.Create;
      try
        ACanvas.Handle := GetWindowDC(Self.Handle);
        with ACanvas do
        begin
          Brush.Color := clActiveCaption;
          Font.Name := 'Arial';
          Font.Size := 10;
          Font.Color := clCaptionText;
          Font.Style := [fsBold];
          TextOut(GetSystemMetrics(SM_CYMENU) + GetSystemMetrics(SM_CXBORDER),
          Round((GetSystemMetrics(SM_CYCAPTION) - Abs(Font.Height)) / 2) + 1,
          ' SwissDelphiCenter');
        end;
      finally
        ReleaseDC(Self.Handle, ACanvas.Handle);
        ACanvas.Free;
      end;
    end;procedure TForm1.WMNCPaint(var Message: TWMNCPaint);
    begin
      inherited ;
      DrawCaption;
    end;一弹出别的窗体,还是会把form的caption弄的消失掉
      

  4.   

    刚才试验了一下,我添加了两个消息   procedure WMNCPaint(var Message:TWMNCPaint);message WM_NCPAINT;
        procedure WMNCActivate(var Message:TWMNCActivate);message WM_NCACTIVATE;在不带皮肤的DELPHI程序里面,可以实现,但是放到DEV皮肤里面,发现没用,我该怎么改呢
      

  5.   

    等待答案,希望在DEV皮肤里面试验一下
      

  6.   

    如果这样子做的话,我的关闭按钮,最小化,最大化之类怎么放置呢,因为我假如我放置panel,肯定是在mainmenu下面啊,
      

  7.   

    用PopupMenu弹出。现在的很多软件都没主菜单了,即使有,也默认隐藏。你都用主菜单这么老土的东西了,还搞什么自绘?