Иконка в трее, все как обычно... При перезапуске Explorer.exe иконка из трея исчезает. При 'ModifyIcon' не появляется. Подскажите как сделать... У меня два варианта, либо что-то вроде 'ModifyIcon' гонять по таймеру, либо удалить и сделать новую, но как тогда отследить перезапуск Explorer'а... желательно по проще... вот.
volvo
13.11.2006 9:55
После рестарта Explorer'а пересоздается TaskBar, и, естественно, тебе нужно пересоздать иконку... Чтобы не гонять таймер - обрабатывай TaskbarCreated...
Snake_B
13.11.2006 18:24
А можно пример, обработки этого TaskbarCreated...
volvo
13.11.2006 18:37
Можно... Что-то в этом роде:
Type TForm1 = class(TForm)
...
protectedprocedure WndProc(varMessage: TMessage); override;
end;
...
var
WM_TASKBARRESTART : DWORD;
{ Проверяешь, доступно ли тебе использование TaskbarCreated }function TaskbarCreatedAllowed:boolean;
var ovi : TOSVersionInfo;
beginResult:=false;
FillChar(ovi,0,sizeof(TOSVersionInfo));
ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
ifnot GetVersionEx(ovi) then exit;
if ((ovi.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS) and
(ovi.dwMajorVersion = 4) and (ovi.dwMinorVersion = 0)) then exit; //win95
Result:=true;
end;
procedure TForm1.WndProc(varMessage: TMessage);
beginif ((WM_TASKBARRESTART<>0) and (Message.Msg=WM_TASKBARRESTART)) then// Вот этот момент - перезагрузка TaskBar-а
PostMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0);
inherited;
end;
Не забудь где-нибудь в Form1.Create сделать:
if TaskbarCreatedAllowed then
WM_TASKBARRESTART:=RegisterWindowMessage('TaskbarCreated')
else
WM_TASKBARRESTART:=0
Snake_B
14.11.2006 6:00
Всё работает, спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.