Помощь - Поиск - Пользователи - Календарь
Полная версия: Вопрос: иконка в трее
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Snake_B
Иконка в трее, все как обычно... При перезапуске Explorer.exe иконка из трея исчезает.
При 'ModifyIcon' не появляется.
Подскажите как сделать...
У меня два варианта, либо что-то вроде 'ModifyIcon' гонять по таймеру,
либо удалить и сделать новую, но как тогда отследить перезапуск Explorer'а...
желательно по проще... вот.
volvo
После рестарта Explorer'а пересоздается TaskBar, и, естественно, тебе нужно пересоздать иконку... Чтобы не гонять таймер - обрабатывай TaskbarCreated...
Snake_B
А можно пример, обработки этого TaskbarCreated...
volvo
Можно... Что-то в этом роде:

Type TForm1 = class(TForm)
...
protected
procedure WndProc(var Message: TMessage); override;
end;

...

var
WM_TASKBARRESTART : DWORD;

{ Проверяешь, доступно ли тебе использование TaskbarCreated }
function TaskbarCreatedAllowed:boolean;
var ovi : TOSVersionInfo;
begin
Result:=false;
FillChar(ovi,0,sizeof(TOSVersionInfo));
ovi.dwOSVersionInfoSize := sizeof(TOSVersionInfo);
if not 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(var Message: TMessage);
begin
if ((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
Всё работает, спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.