Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Вопрос: иконка в трее

Автор: Snake_B 13.11.2006 13:51

Иконка в трее, все как обычно... При перезапуске Explorer.exe иконка из трея исчезает.
При 'ModifyIcon' не появляется.
Подскажите как сделать...
У меня два варианта, либо что-то вроде 'ModifyIcon' гонять по таймеру,
либо удалить и сделать новую, но как тогда отследить перезапуск Explorer'а...
желательно по проще... вот.

Автор: volvo 13.11.2006 13:55

После рестарта Explorer'а пересоздается TaskBar, и, естественно, тебе нужно пересоздать иконку... Чтобы не гонять таймер - обрабатывай TaskbarCreated...

Автор: Snake_B 13.11.2006 22:24

А можно пример, обработки этого TaskbarCreated...

Автор: volvo 13.11.2006 22:37

Можно... Что-то в этом роде:

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 14.11.2006 10:00

Всё работает, спасибо.