限定条件:所有控制代码,必须在基类完成。
constructor TBoxForm.Create(AOwner: TComponent);
var
   lpData:PNotifyIconData;
begin
  inherited;
  //如果用户最小化窗口则将窗口隐藏并在任务栏上添加图标
     //定义托盘图标结构。
     lpData := new(PNotifyIconDataA);
     //lpData变量字节数。
     lpData.cbSize := 88;
     //SizeOf(PNotifyIconDataA);
     lpData.Wnd := self.Handle;
     //要加入的图标句柄,可任意指定,此处为在Tform中Icon属性中指定的图标。
     lpData.hIcon := Application.Icon.Handle;
     //回调函数消息 。
     lpData.uCallbackMessage := WM_BARICON;
     //内部标识,可设为任意数。
     lpData.uID :=0;
     //托盘信息。
     lpData.szTip := 'FWS版本升级程序';
     //指明那些消息有效。
     lpData.uFlags := NIF_ICON or NIF_MESSAGE  or NIF_TIP;
     //将程序的窗口样式设为TOOL窗口,可避免在任务条上出现.     SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);     Shell_NotifyIcon(NIM_ADD,lpData);
     //释放。
     dispose(lpData);
     ShowWindow(Application.Handle,SW_HIDE);
     //Application.ShowMainForm := false;
end;
问题就出在最后一行代码上,当我继承这个基类,创建一个子类时,子类窗体上原先的可视化控件,都没有了,变成了光秃秃的窗体我怀疑最后一句代码使控件没有创建出来,到现在也没有找到合适的方法。

解决方案 »

  1.   

    先 ShowWindow(Application.Handle,SW_shownormal);再 ShowWindow(Application.Handle,SW_HIDE);呢?
      

  2.   

    不可以!那就无法使程序创建起来就隐藏。
    必须加Application.ShowMainForm := false;主窗体才在创建以后隐藏!
      

  3.   

    Application.MainForm.Visible :=false;试试
      

  4.   

    怎么就不行呢??
    to: lion_lh(xmanx)  不行啊!
      

  5.   

    看看这个:
    在项目开始时就隐藏
    begin
      Application.Initialize;
      Application.CreateForm(TServerForm, ServerForm);
      Application.ShowMainForm := False;//这句话隐藏主窗口
      Application.Run;
    end.
      

  6.   

    to:amei2000go(浪子) 
    请看:
    限定条件:所有控制代码,必须在基类完成。
    这样将违背了独立的原则!
      

  7.   

    你们看看coolTray的源码就知道了
      

  8.   

    已经找到了解决办法:
    procedure TBoxForm.WMBarIcon(var Message:TMessage);
    var
       lpData:PNotifyIconData;
    begin
      //   WM_LBUTTONDOWN
      if (Message.LParam = WM_LBUTTONDBLCLK ) then
       begin
         
         lpData := new(PNotifyIconDataA);
         lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
         lpData.Wnd := Self.Handle;
         lpData.hIcon := Self.Icon.Handle;
         //ÍÐÅÌ·µ»ØÏûÏ¢¡£
         lpData.uCallbackMessage := WM_BARICON;
         lpData.uID :=0;
         lpData.szTip := 'FWS°æ±¾Éý¼¶³ÌÐò';
         lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
         Shell_NotifyIcon(NIM_DELETE,lpData);
         dispose(lpData);
         ShowWindow(self.Handle, SW_Show);
         Application.ShowMainForm := true;
         self.Show;//关键是这句。
       end;
    ShowMainForm := true;不管用。只有使用了self.SHow才能显示出来,
    不明白。
    请教高手讲???
      

  9.   

    因为你是在基类中完成的,当然无法用showmainform:=true,而只能用self.show,正常呀
      

  10.   

    SetWindowLong( Application.Handle, GWL_EXSTYLE,
                     GetWindowLong(Application.Handle, GWL_EXSTYLE) or
                     WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
        application.ShowMainForm :=false;
    这样应该可以了