http://delphibbs.com/delphibbs/dispq.asp?lid=757737
去看看

解决方案 »

  1.   

    运行下面的程序,点击程序窗口标题栏上的最小化按钮,你就可以看到窗口被“最小化”成了一个任务栏图标,点击图标,窗口又会恢复原来的状态。 
    unit Unit1; 
    interface 
    uses 
    Windows, Messages, SysUtils, 
    Classes, Graphics, Controls, Forms, 
    Dialogs,ShellAPI; const 
    WM_BARICON=WM_USER+200; type 
    TForm1 = class(TForm) 
    private 
    procedure WMSysCommand(var 
    Message: TMessage); message WM_SYSCOMMAND; 
    procedure WMBarIcon(var 
    Message:TMessage);message WM_BARICON; 
    { Private declarations } 
    public 
    { Public declarations } 
    end; var 
    Form1: TForm1; implementation {$R *.DFM} 
    procedure TForm1.WMSysCommand 
    (var Message:TMessage); 
    var 
    lpData:PNotifyIconData; 
    begin 
    if Message.WParam = SC_ICON 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 := 'Samples'; 
    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 := 'Samples'; 
    lpData.uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP; 
    Shell_NotifyIcon(NIM_DELETE,lpData); 
    dispose(lpData); 
    Form1.Visible := True; 
    end; 
    end; end. 
      

  2.   

    首先在单元的声明部分定义消息:const MY_Message=WM_USER+100; //用户自定义的消息范围为100~$7FFF;然后声明和定义消息处理过程:procedure MYMessage(var Msg:TMessage);message MY_Message;//声明消息处理过程;//定义消息处理过程;
    procedure TForm1.MYMessage(var Msg:TMessage);begin   {填写相应代码}end;这样自定义消息的处理过程声明和定义完毕后,即可在需要发送消息时使用;如下;
    procedure TForm1.Button1Click(Sender: TObject);begin    form1.Perform(MY_Message,0,0);//发送自定义的消息;end;