怎么样在程序起动后其快捷图标自动放入桌面的任务栏最右边,就像QQ一样~
而且其窗体始终是在最前的(当其被执行时)也就是跟WINDOWS的任务管理器一样~
总是只要其被打开其窗体始终是被置最前的~

解决方案 »

  1.   

    1、总在最前,设置主窗口的FormStyle为fsStayOnTop
    2、以下为无组件实现系统栏图标的代码
    unit Main;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, ShellAPI;const
      MyMessage = wm_user + 1001;
      MyData = 100;type
      TfrmMain = class(TForm)
        PopupMenu1: TPopupMenu;
        Exit1: TMenuItem;
        procedure Exit1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
        //自定義消息處理函數,處理鼠標點擊圖標事件
        Icon: TIcon;
        procedure MouseMessage(var message: TMessage); message MyMessage;
      public
        { Public declarations }
      end;var
      frmMain: TfrmMain;
      IconData: TNotifyIconDataA;implementation{$R *.dfm}procedure TfrmMain.Exit1Click(Sender: TObject);
    begin
      Icon.Free;                    //释放图标资源
      Shell_NotifyIconA(NIM_DELETE, @IconData);   //清除系统栏的图标
      Application.Terminate;
    end;procedure TfrmMain.MouseMessage(var message: TMessage);
    var
      MousePos: TPoint;
    begin
      inherited;  case message.LParam of
        WM_LBUTTONDBLCLK:
          ShowMessage('Double Clicked.');
        WM_RBUTTONUP:
        begin
          SetForegroundWindow(Handle);
          GetCursorPos(MousePos);
          PopupMenu1.Popup(MousePos.X, MousePos.Y);
        end;
        WM_LBUTTONUP:
        begin
          ShowWindow(Handle, SW_SHOW);
          ShowWindow(Application.Handle, SW_SHOW);
        end;
      end;  message.Result := 0;
    end;procedure TfrmMain.FormCreate(Sender: TObject);
    begin
      Icon := TIcon.Create;
      Icon.LoadFromFile('E:\Projects\Icons\_xp\2.ico');  //这里载入Icon
      IconData.cbSize := SizeOf(TNotifyIconDataA);
      IconData.Wnd := Handle;
      IconData.uID := MyData;
      IconData.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
      IconData.uCallbackMessage := MyMessage;
      IconData.hIcon := Icon.Handle;
      IconData.szTip := '这是系统栏图标';
      Shell_NotifyIconA(NIM_ADD, @IconData);
    end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caNone;
      ShowWindow(Handle, SW_HIDE);
      ShowWindow(Application.Handle, SW_HIDE);
    end;end.
      

  2.   

    hthunter(核桃-我的心在下雨,雨中我和她携手漫步) ( ) 信请问~我按你的做了为什么会报这样的错呢?
    [Error] Main.pas(55): Undeclared identifier: 'Popup'
    这是怎么一回事呀?
      

  3.   

    -_-#
    用过PopupMenu没有?窗体上需要放置一个TPopupMenu,然后添加一个名为Exit1的Item,并跟Onclick事件使用Exit1Click关联,窗体的OnClose、OnCreate事件分别跟FormClose、FormCreate事件关联……
      

  4.   

    逼我出绝招-_-#//下面的代码用记事本保存为SystemIcon.dpr文件  **************************************
    program SystemIcon;uses
      Forms,
      Main in 'Main.pas' {frmMain};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TfrmMain, frmMain);
      Application.Run;
    end.
    //下面的代码用记事本保存为Main.dfm文件  **************************************
    object frmMain: TfrmMain
      Left = 325
      Top = 113
      Width = 696
      Height = 480
      Caption = 'frmMain'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      FormStyle = fsStayOnTop
      OldCreateOrder = False
      OnClose = FormClose
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object PopupMenu1: TPopupMenu
        Left = 100
        Top = 76
        object Exit1: TMenuItem
          Caption = 'Exit'
          OnClick = Exit1Click
        end
      end
    end
    //还有上面第一次提供的代码用记事本保存为Main.pas文件  ******************************
    在Delphi中,OpenProject->打开SystemIcon.dpr,编译运行……………………
      

  5.   

    放入托盘有个第三方组件CoolTrayIcon,用着很方便的~~
      

  6.   

    hthunter(核桃-我的心在下雨,雨中我和她携手漫步)
    谢谢你~!大虾~我按你的做了~看到效果了~不过我想在一开始运行时就希望它就自动放入托盘了~
    而不是在我点了窗口的X时才放入啊~
    我应该怎么改呢?
      

  7.   

    上面的代码是一开始就有系统栏图标的啊,并且你开始的问题也没有提最小化的事情啊。
    你的意思是窗口启动后就最小化?并且最小化的时候只要系统栏图标、不要任务栏图标?
    上面的程序作这样的改动:
    1、窗体的windowsState属性设置为wsMinimized;
    2、在窗体中添加一个TApplicationEvents控件;
    3、在ApplicationEvents1的OnMinimize事件中添加如下代码:
      ShowWindow(Handle, SW_HIDE);
      ShowWindow(Application.Handle, SW_HIDE);
      

  8.   

    程序启动
    设置窗体的windowsState属性设置为wsMinimized;
    ShowWindow(Handle, SW_HIDE);
    ShowWindow(Application.Handle, SW_HIDE);
    在用控件trayicon就可以啊.
      

  9.   

    hthunter(核桃-我的心在下雨,雨中我和她携手漫步)呵呵~
    你真强~
    实现 了~
    对了~
    我还想变一下!~就是我点窗体的右上角的X时我不希望窗体被放入托盘~
    而是希望窗体或都说系统退出了~不运行了!~
    怎么改呢?
      

  10.   

    《Delphi 5开发人员指南》
    第24章   扩展Windows外壳 795
    24.1   托盘图标组件 795
    24.1.1   API 795
    24.1.2   处理消息 797
    24.1.3   图标及提示 797
    24.1.4   鼠标点击 798
    24.1.5   隐藏应用程序 799
    24.1.6   托盘图标应用程序举例 805
      

  11.   

    吐血……要求可真多,你自己慢慢翻书或者google吧,可真没心情跟你纠缠下去了……
      

  12.   

    最后一次满足你的要求…… -_-#
    把WM_LBUTTONUP那里改成这样:    WM_LBUTTONUP:
          begin
            ShowWindow(Application.Handle, SW_RESTORE);
            ShowWindow(Application.Handle, SW_HIDE);
            SetWindowLong(Application.Handle, GWL_EXSTYLE,
              GetWindowLong(Application.Handle, GWL_EXSTYLE) or
              WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);
            ShowWindow(Application.Handle, SW_SHOW);
            ShowWindow(Handle, SW_RESTORE);
          end;
      

  13.   

    放入托盘有个第三方组件CoolTrayIcon,用着很方便的~~还有就是我不希望图标在任务栏出现~
    我只希望它一直在托盘里~
    不管怎么样都不会出现在任务栏里~
    而你那种只要窗体没有最小化,窗体的快捷图标就会出现在任务栏里出现的~
    只有当其最小化了图标才进入托盘~可是卓面上却就没有窗体了~这些都可以实现~~~