首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

大家帮小弟我看一上这段代码有什么有关问题

2013-01-04 
大家帮我看一下这段代码有什么问题啊unit Unit1interfaceusesWindows, Messages, SysUtils, Variants, Cl

大家帮我看一下这段代码有什么问题啊


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,ShellApi;
const
  WM_BARICON = WM_USER + 200;
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
  function createNotifyIcon:PNotifyIconData; //创建托盘图标
  procedure deleteNotifyIcon(lpData:PNotifyIconData); //删除托盘
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  AppniData:PNotifyIconData = nil; //应用程序图标

implementation

{$R *.dfm}
function Tform1.createNotifyIcon:PNotifyIconData;
var lpData:PNotifyIconData;
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);
    result :=  lpData;
end;
procedure TForm1.deleteNotifyIcon(lpData:PNotifyIconData);
begin
   Shell_NotifyIcon(NIM_DELETE,@lpData);
   dispose(lpData);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
   AppniData := createNotifyIcon();
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   deleteNotifyIcon(AppniData);
end;

end.


就是窗口创建的时候创建一个托盘
关闭的时候关闭托盘

运行的时候报错了   大家帮我分析一下  哪里有问题啊  谢谢了
[解决办法]
dispose(lpData);这句话去掉,你这里释放了,那AppniData也就成了野指针
[解决办法]
Shell_NotifyIcon(NIM_ADD, lpData);
    dispose(lpData);  //////////  这里释放了,还返回什么呢?????
    result :=  lpData;

热点排行