Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.12.26;
Скачать: CL | DM;

Вниз

Не "запуздыривается" [орешник (c)] иконка в трей   Найти похожие ветки 

 
И. Павел ©   (2010-09-30 15:30) [0]

Здравствуйте.
В моей программе в OnCreate главной формы расположен код размещения иконки в трее:

 with TrayIconData do
 begin
   cbSize := SizeOf(TrayIconData);
   Wnd := Handle;
   uID := 0;
   uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
   uCallbackMessage := WM_ICONTRAY;
   hIcon := IconEmpty.Picture.Icon.Handle;
   StrPCopy(szTip, Caption);
 end;
 Shell_NotifyIcon(NIM_ADD, @TrayIconData);


Перед Application.Run у меня стоит команда:

if ParamStr(1) = "auto" then Application.ShowMainForm := false;

Если запланировать запуск программы с ключем "auto"  при входе в Windows, то инокна не появляется (хотя процесс выполняется). Если запускать программу вручную, или автоматически но без ключа "auto", то иконка отображается.

Подскажите, пожалуйста, как можно разместить иконку в трее для программы с ShowMainForm = false, запускаемой планировщиком?

PS: Конечно, можно делать таймером, или показывать главную форму на какой-то момент, но может быть есть более "прямые" способы?

Заранее спасибо.


 
Palladin ©   (2010-09-30 15:41) [1]

перед Application.Run
или на Application.OnActivate


 
И. Павел ©   (2010-09-30 15:56) [2]

> [1] Palladin ©   (30.09.10 15:41)

Application.ShowMainForm := false у меня стоит прямо перед Application.Run


 
Palladin ©   (2010-09-30 16:03) [3]

какая разница где это стоит, я тебе говорю в каком месте запуздыривать


 
И. Павел ©   (2010-09-30 16:26) [4]

> [3] Palladin ©   (30.09.10 16:03)

Я попробовал разместить код создания иконки прямо перед Application.Run и в обработчике Application.OnActivate. Результат тот же - иконка не появляется при перезапуске сеанса, хотя планировщик процесс запускает...


 
И. Павел ©   (2010-09-30 16:28) [5]

На всякий случай уточню, что в настройках пункт "скрывать значки" не выбран.


 
И. Павел ©   (2010-09-30 16:37) [6]

Я создал новый проект, поместил в него код создания иконки (перед Run). Но все равно иконка не появляется.

Если у кого-нибудь найдется время - пожалуйста, попробуйте назначить такую программу  в качестве задания "при входе в Windows" для вашей учетной записи, выйдите из системы (завершите сеанс) , и опять войдите. Буду очень признателен.

Вот код файла dcu (форма Form1 пустая):

program Project1;

uses
 Forms, StdCtrls, ShellAPI, Menus, ImgList, ExtCtrls, AppEvnts,
 ActnList, XPStyleActnCtrls, ActnMan, Buttons, ComCtrls, jpeg, RxGIF,
 acPNG, ComObj, ADODB, GridsEh, DBGridEh, Grids, DB, MMSystem,
 Unit1 in "Unit1.pas" {Form1};

{$R *.res}

var TrayIconData: TNotifyIconData;
begin
 Application.Initialize;
 Application.ShowMainForm := false;
 Application.CreateForm(TForm1, Form1);

 Application.ShowMainForm := false;

 with TrayIconData do
 begin
   cbSize := SizeOf(TrayIconData);
   Wnd := Form1.Handle;
   uID := 0;
   uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
//    uCallbackMessage := WM_ICONTRAY;
   hIcon := Application.Icon.Handle;
 end;
 Shell_NotifyIcon(NIM_ADD, @TrayIconData);

 Application.Run;
end.


 
И. Павел ©   (2010-09-30 16:40) [7]

Из модулей нужны только  Forms, StdCtrls, ShellAPI. Я там много лишнего присоединил.


 
Anatoly Podgoretsky ©   (2010-09-30 16:43) [8]

> И. Павел  (30.09.2010 16:26:04)  [4]

Что отладчик говорит?


 
Palladin ©   (2010-09-30 16:43) [9]

какой еще к чертям form1.handle, откуда он возьмется?
application.handle


 
Rouse_ ©   (2010-09-30 16:47) [10]

Появляется иконка, все нормально.
Если у тебя семерка то проверь настройки - иконка может появляться на скрытой панельке (которая стрелочкой разворачивается)


 
Rouse_ ©   (2010-09-30 16:48) [11]


> Palladin ©   (30.09.10 16:43) [9]
>
> какой еще к чертям form1.handle, откуда он возьмется?

Application.CreateForm(TForm1, Form1); для кого?


 
И. Павел ©   (2010-09-30 16:50) [12]

> Что отладчик говорит?

Никаких ошибок и предупреждений не возникает.

У коллеги иконка появилась... Видимо, дело в настройках моей системы.


 
Anatoly Podgoretsky ©   (2010-09-30 16:53) [13]

Имелось в виду попадаешь ли в OnCreate


 
Dennis I. Komarov ©   (2010-09-30 16:57) [14]


> Application.CreateForm(TForm1, Form1); для кого?

Что же это за приложениее, да бес форм? ;)


 
И. Павел ©   (2010-09-30 16:57) [15]

> Имелось в виду попадаешь ли в OnCreate

Да. Там запускается таймер, и программа работает нормально.
Даже если вынести создание иконки из OnCreate все равно не появляется.
Еще у одного коллеги проверил - у него тоже не появляется...


 
Anatoly Podgoretsky ©   (2010-09-30 17:00) [16]

Это к тому, что ты приводишь недостаточно информации.


 
0x00FF00 ©   (2010-09-30 18:33) [17]

Выложи минимально компилирующийся кусок проекта, в котором повторяется баг, с исходниками.
Так получится застрелить сразу двух зайцев — исключить "ошибку в программе ©" и "ошибку в системе".

ЗЫ.
И заодно посмотрим, запуздырится ли оно в xfce-panel из-под WINE =)
C EVEREST"овской иконкой, кстати, справилось!


 
И. Павел ©   (2010-09-30 18:57) [18]


> 0x00FF00 ©   (30.09.10 18:33) [17]

Exe с ошибкой остался на работе, а дома этот баг не повторяется, поэтому я пока не буду выкладывать что попало (т.к. может быть дело в скомпилированном файле), а завтра с утра выложу 100% неработающий exe и исходный код к нему.


 
И. Павел ©   (2010-10-01 08:25) [19]

Вот архив с файлами программы (в т.ч. exe), которая при запуске планировщиком (при входе в Windows (log-on в английской версии)) не помещает иконку в трей:

http://letitbit.net/download/83746.8a5f8335ced8d4c6d4dcf1f7ec77/TestTray.rar.html

http://turbobit.net/9tbm6pxpnpjf.html

PS: Я поместил программу в папку "автозагрузка" и все заработало. Так что буду делать пока так. Но все равно было бы интересно разобраться: почему происходит такая ошибка.


 
Anatoly Podgoretsky ©   (2010-10-01 10:58) [20]

Какой log-on при запуске планировщиком?


 
И. Павел ©   (2010-10-01 11:20) [21]

> Какой log-on при запуске планировщиком?

Я имею ввиду, что в английской версии в окне планировщика пункт "При входе в Windows" переводится как "start on log-on".


 
Slym ©   (2010-10-01 11:49) [22]

возможно прога грузится раньше шела...
Если не работает при автозагрузке - см http://yandex.ru/yandsearch?text=WM_TASKBARCREATED&lr=213


 
Игорь Шевченко ©   (2010-10-01 11:54) [23]


> которая при запуске планировщиком (при входе в Windows (log-
> on в английской версии)) не помещает иконку в трей:


а зачем ты так делаешь ? Так делать не надо


 
И. Павел ©   (2010-10-01 12:09) [24]

> [22] Slym ©   (01.10.10 11:49)

Спасибо. По всей видимости так оно и есть. Я поместил программу в папку "автозгрузка" - теперь все отлично работает. Видимо действительно программу рановато планировщик запускал.



Страницы: 1 вся ветка

Текущий архив: 2010.12.26;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.01 c
15-1283932268
boriskb
2010-09-08 11:51
2010.12.26
Опять "Academia"


2-1286133494
Sperry
2010-10-03 23:18
2010.12.26
"обратный цыкл"


15-1284562158
Baks
2010-09-15 18:49
2010.12.26
Компоненты Indy для Delphi 5


2-1283250786
madmech
2010-08-31 14:33
2010.12.26
Проблема с рисованием на канве TDBGrid


2-1285851032
coder123
2010-09-30 16:50
2010.12.26
Как найти открытую форму по типу и по части названия?