请高手帮忙看看这段程序(100分)

  • 主题发起人 主题发起人 snowdeep
  • 开始时间 开始时间
S

snowdeep

Unregistered / Unconfirmed
GUEST, unregistred user!
下面是一段定时器响应程序。目的是要每次进来都将为Applicon换一个ICON。
这是在别人的例子之上加改的。运行后能正常更换图标。起到程序ICON闪动的
效果。可是过了一段时间之后就会报一个错误信息:
out of system resource。
不知道是什么原因?是不是我在换Applicon 的Icon的时候应该释放掉前一个
icon的资源?如果是,我怎么才能释放掉前一个ICON资源?因为Applicon的
ICON属性不是我创建的,我能去释放吗?

谢谢!

bool display = false;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 MEMORYSTATUS memory ;
 memory.dwLength = sizeof (memory) ;
 GlobalMemoryStatus (&memory) ;
 NOTIFYICONDATA icondata ;
 memset (&icondata, 0, sizeof (icondata)) ;
 icondata.cbSize = sizeof (icondata) ;
 icondata.hWnd = Handle ;
 String freemem = String ((int) (memory.dwAvailPhys / 1024)) + " K Free" ;
 strncpy (icondata.szTip, freemem.c_str (), sizeof (icondata.szTip)) ;
 Application->Icon->free;
 if( display ){
  Application->Icon->LoadFromFile("key.ico");
 }
 else
  Application->Icon->LoadFromFile( "face.ico");
 display = !display;
 icondata.hIcon = Application->Icon->Handle ;
 icondata.uFlags = NIF_ICON | NIF_TIP ;
 Shell_NotifyIcon (NIM_MODIFY, &icondata) ;
}
 
直接更改FORM的ICON属性不行吗??
 
直接修改Form的ICON不行,因为我的FORM是隐掉了,程序在 系统任务条上做了一个ICON,所以只能修改Application的ICON
 
补充:我的程序其实没有交互界面,也不需要交互界面,只是想通过系统任务栏接受点击后出菜单而选择程序所能提供的功能
 
用TASKICON控件(网上有下载),没有我提供。
程序运行后自动最小化,响应右键弹出菜单,在菜单中处理工作。
 
谢谢 Liu_Cheng_Gangwk, 能告诉我哪里下载?
另外,请问我用了这个控件之后,在程序运行
时能不断地更换 Application 的 Icon 吗?
我的目的是: 当程序运行后只在任务栏有一个
Icon, 当点击该 Icon?并选择一个功能的时候,
在该功能执行期间, Application 的 Icon 一直
闪动, 直到该功能执行完毕为止。 谢谢!
 
给我E_MAIL :
我的是:LIU_CHENG_GANG@163.com
 
未经测试的方法:
if( display ){
  Application->Icon->LoadFromFile("key.ico");
 }
 else
  Application->Icon->LoadFromFile( "face.ico");
干嘛要每次都LOAD?定义两个ICON类型的变量,程序启动就把两个ICON都LOAD进来,
在TIMER中再切换。。。
 
大把控件的,到深度历险看看吧
 
form create时:
h1:=ticon.Create;
h2:=ticon.Create;
h1.LoadFromFile('find.ico');
h2.LoadFromFile('task.ico');
TIMER中:
procedure TForm1.Timer1Timer(Sender: TObject);
var
nid : TNotifyIconData;
begin
with nid do
begin
cbSize := SizeOf( TNotifyIconData );
Wnd := Form1.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallbackMessage := WM_USER + 100;
// hIcon:=application.Icon.handle;
if b then
hIcon := h1.handle
else
hIcon:=h2.handle;
b:=not b;
szTip := 'This is the hint!';
end;
Shell_NotifyIcon( NIM_MODIFY, @nid );
end;

FORM CLOSE时:
h1.free;
h2.free;

这样应该没有什么问题
 
我接受答案了,谢谢大家,尤其是 xiao_min :)
 
后退
顶部