![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Schreduler [D6]
ssergey © (2004-11-05 14:29:00)Пишу schreduler, сидит в трее и в заданное время выполняет архивирование базы.
Сообщения от пользователя обрабатываю с помощью компонента TRxTrayIcon.
Прблема в том, что
1) TRxTrayIcon тащит за собой модуль Forms и др.,
в результате увеличиваетя объём занимаемой памяти.
2) Когда в трее кликаю на иконку и вылазит меню - останавливается
основной цикл (на время активизации меню)
Опыт программирования на API небольшой.
Конструкция следующая:
program rBackup;
uses
Windows, Menus, Classes, SysUtils, ServerList, ZIPDLL,
ZCallBck, RXShell, СВBurn;
{$R RBACKUP_ICON.RES}
type TMyTrayIcon = Class(TRxTrayIcon)
private
pm : TPopupMenu;
procedure MyExit(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
.......
begin
.....
ti := TMyTrayIcon.Create(Nil);
repeat
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
begin
if (Msg.Message = WM_TIMER) then
begin
if Msg.wParam = AgentTimer then
begin
Msg.Message := 0;
if not ServersListLocked then
begin
CheckCurrentDate(ServersList);
CheckMemFile(ShareBuf, ServersList, BackupList);
CheckBackupList(ServersList, BackupList);
end;
end
else
if (Msg.wParam = CDWriteList.CDWriteTimer) then
PostThreadMessage(CDWriteList.ThreadID, Msg.Message, Msg.wParam, Msg.lParam);
end
else
if Msg.Message <> WM_QUIT then
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end
else
begin
PostThreadMessage(CDWriteList.ThreadID, WM_QUIT, 0, 0);
CDWriteList.WaitFor;
CDWriteList.Free;
end;
end
else WaitMessage;
until Msg.Message = WM_QUIT;
.........
end.
GuAV (2004-11-05 21:23:00) [1]The taskbar notification area is sometimes erroneously called the "tray." (c) MSDN
Anatoly Podgoretsky (2004-11-05 19:49:00) [2]А вопрос есть?
Cobalt (2004-11-05 19:43:00) [3]Прикольно :)