就是運行後在右下角顯示時間的地方只有個圖標,後台運行無法打開。
應該怎麼樣寫代碼,最好在關鍵地方能夠給出說明

解决方案 »

  1.   

    是的
    我用的是D7+WINDOWS XP
    謝謝指教
      

  2.   

    我在網上找得都是 win98的,說在2000 xp下無法通過
      

  3.   

    52、如何隐藏应用程序? 
      一、从任务栏上隐藏应用程序的按纽 
      用过金山词霸的朋友一定对其主窗口的工作方式很感兴趣。当它显示时,在任务栏有一个对应
    的按纽,而当它最小化的时候则从任务栏上消失了。如何在我们的程序中实现这一技巧呢?通过
    研究Delphi程序的工件方式和试验摸索,本人得出了实现这一技巧的方法。现在写出来与大家共
    享,希望能对大家编程有所帮助。其实本来实现这一技巧很容易的,只要在窗口的最小化事件代
    码中加入:self.hide;就行了。但问题是Form没有最小化事件。通过摸索,本人发现当主窗口最
    小化时会调用Application   对象的OnMinimize方法。只要在自己的主窗口定义中添加一个自己
    的方法,再将它安装到Application对象的OnMinimize方法上去就行了。要再次显示主窗口只要调
    用show;方法就行了。不过要注意:一定要主窗口的OnShow事件方法中加入Application.Restore;
    方法调用,否则,第二次按最小化按纽的时候,程序将什么也不做。要使程序启动时不显示主窗
    口,只要在Project代码中加入Application.ShowMainForm:=false;就行了。 以下是程序片段。{WinKill.Dpr} 
      program WinKill;
      uses
      Forms,
      FMain in 'FMain.pas' {FormMain};
      {$R *.RES}
      begin
      Application.Initialize;
      Application.CreateForm(TFormMain, FormMain);
      Application.ShowMainForm:=false;//*****
      Application.OnMinimize:=FormMain.AppMinimize;//******
      Application.Run;
      end.
      {Unit FMain}
      .
      .
      .
      procedure TFormMain.M_ShowClick(Sender: TObject);
      begin
      self.Show;
      end;
      procedure TFormMain.AppMinimize(Sender: TObject);
      begin
      inherited;
      self.Hide;
      end;
      procedure TFormMain.FormShow(Sender: TObject);
      begin
      Application.Restore;
      //如果将这句去掉,则第二次按最小化按纽的时候,程序将什么也不做。
      end;
    這個好像有用,我試試,找好久
      

  4.   

    有专门的托盘有关的消息
    或者直接使用封装后的托盘控件这种也是普通win32桌面应用,不是后台服务,只是可以不显示正常的窗口
      

  5.   

    unit Unit1;interfaceuses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs,ShellAPI, ExtCtrls, StdCtrls;const
    WM_BARICON=WM_USER+200;
    type
    TForm1 = class(TForm)
        Timer1: TTimer;
       // procedure FormClose(Sender: TObject; var Action: TCloseAction);
    // procedure Timer1Timer(Sender: TObject);
    private
        procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
        procedure WMBarIcon(var Message:TMessage);message WM_BARICON;public
        { Public declarations }
    end;var
    Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.WMSysCommand (var Message:TMessage);
    var
        lpData:PNotifyIconData;
    begin
       if Message.WParam = SC_close  then    //最小化了.最大化 SC_ZOOM,關閉:SC_CLOSE
       begin
          //如果用户点击关闭窗口则将窗口隐藏并在任务栏上添加图标
         lpData := new(PNotifyIconDataA);
         lpData.cbSize := 88;
         lpData.Wnd := Form1.Handle;
         lpData.hIcon := Form1.Icon.Handle;
         lpData.uCallbackMessage := WM_BARICON;
         lpData.uID :=0;
         lpData.szTip := '   ';
         lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
         Shell_NotifyIcon(NIM_ADD,lpData);
         dispose(lpData);
         Form1.Visible := False;
       end
       else
       begin//如果是其它的SystemCommand消息则调用系统缺省处理函数处理之。
         DefWindowProc(Form1.Handle,Message.Msg,Message.WParam,Message.LParam);
       end;
    end;procedure TForm1.WMBarIcon(var Message:TMessage);
    var
    lpData:PNotifyIconData;
    begin 
    if (Message.LParam = WM_LBUTTONDOWN) then
    begin//如果用户点击任务栏图标则将图标删除并回复窗口。
        lpData := new(PNotifyIconDataA);
        lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
        lpData.Wnd := Form1.Handle;
        lpData.hIcon := Form1.Icon.Handle;
        lpData.uCallbackMessage := WM_BARICON;
        lpData.uID :=0;
        lpData.szTip := '   ';
        lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
        Shell_NotifyIcon(NIM_DELETE,lpData);
        dispose(lpData);
        Form1.Visible := True;
       end;
    end;
    end.
    经测试,可行,虽然原理并不十分了解,看明白大概,有时间再去研究
    好深奥