请问各位朋友,我做了个小程序,不论最大化还是最小化,想只在系统托盘区显示图标,请问怎么实现呢?谢谢!

解决方案 »

  1.   

    Application.ShowMainForm := False;
      

  2.   

    用个TRzTrayIcon
    再加上1楼那句就OK了,或者自己用代码实现托盘图标
      

  3.   

    可能是我说得不太清楚。
    就是在程序运行时不在任务栏显示,只在托盘区显示图标,就像千千静听一样。一楼的语句我试了,程序没反应。
    代码如下:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Application.ShowMainForm:=False;
    end;
    我已经加上了那个RZTrayIcon。
      

  4.   

    你直接用了主窗体, OnShow 中写到
    ShowWindow(Application.Handle, SW_HIDE);
    直接用主窗体会有些问题
    比较好的办法是主窗体空在那里, 就一个白的就可以按楼上办法, OnCreate 中写到Application.ShowMainForm:=False; 
    // 这里另建一个窗口作界面
    xxxForm := TxxxForm.Create(Self);
    xxxForm.Show;
      

  5.   

    在 vproject1.dpr 中写   Application.Initialize; 之后其他语句之前写  Application.ShowMainForm:=False; 
      

  6.   

    SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
      

  7.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, shellapi, Menus, ExtCtrls;
    const
      TrayIconID = 1;
      CM_TRAYICON=WM_USER+1001;
    type
      TForm1 = class(TForm)
        PopupMenu1: TPopupMenu;
        Timer1: TTimer;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure N1Click(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure Timer1Timer(Sender: TObject);
      private
        FIcon: TIcon;
        Flag: Boolean;
        nid: TNotifyIconData;
        procedure MessageHandler(var msg: TMessage); message CM_TRAYICON;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      FIcon := TIcon.Create;
      FIcon.Handle := LoadIcon(HInstance, 'MainIcon' );
      if FIcon.Handle = 0 then
      begin
        MessageDlg('无法打开图标!', mtError, [mbok], 0);
        Application.Terminate;
        exit;
      end;  with nid do
      begin
        cbSize := sizeof(TNotifyIconData);
        Wnd := Handle;
        uID := TrayIconID;
        uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
        uCallbackMessage := CM_TRAYICON;
        hIcon := FIcon.Handle;
        StrPCopy(szTip, '这是一个测试程序!')
      end;
      Shell_NotifyIcon(NIM_ADD, @nid);
      SetWindowLong(Application.Handle, GWL_EXSTYLE, WS_EX_TOOLWINDOW);
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Shell_NotifyIcon(NIM_DELETE, @nid);
      FIcon.Free;
    end;procedure TForm1.N1Click(Sender: TObject);
    begin
      MessageDlg('这是一个测试程序!', mtInformation, [mbOK], 0);
    end;procedure TForm1.N2Click(Sender: TObject);
    begin
      close;
    end;procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      Timer1.Enabled := false;
      if Flag = false then
        if Visible then
          Hide
        else
          Show;
    end;procedure Tform1.MessageHandler(var msg: TMessage);
    var
      Point: TPoint;
    begin
      if msg.WParam = TrayIconID then
        case msg.LParam of
          WM_LBUTTONDOWN:
          begin
            with Timer1 do
            begin
              Enabled := true;
              Interval := GetDoubleClickTime;
            end;
          end;
          WM_LBUTTONDBLCLK:
          begin
            Flag := true;
            MessageDlg('这是一个测试程序!', mtInformation, [mbok], 0);
            Flag := false;
          end;
          WM_RBUTTONDOWN:
          begin
            GetCursorPos(Point);
            PopupMenu1.Popup(Point.X, Point.Y);
          end;
        end;
    end;end.如果要控制就加一个全局控制变量就好了
      

  8.   

     shell_notifyicona(NIM_ADD,@popm);//这是一个win api 函数,用于添加托盘图标,具体用法可查帮助
     Form1.Hide;//隐藏窗体
     ShowWindow(Application.Handle,SW_HIDE);//隐藏任务栏图标
    //如此就可以了
      

  9.   

     showwindow(application.Handle,sw_Hide);    //设置窗口为隐藏状态
     //改变窗体的 GWL_EXSTYLE 属性
     setwindowlong(application.Handle,GWL_EXSTYLE,
     getwindowlong(application.Handle,GWL_EXSTYLE)
     or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);