Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Страницы:   1 2

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

Здравствуйте.
В моей программе в 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: Конечно, можно делать таймером, или показывать главную форму на какой-то момент, но может быть есть более "прямые" способы?

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


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

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

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


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


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


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


Slym   (2010-10-01 11:49:00) [3]

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


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

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

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


Anatoly Podgoretsky   (2010-10-01 10:58:00) [5]

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


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

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

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

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

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


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


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

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


0x00FF00   (2010-09-30 18:33:00) [8]

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

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


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

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


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

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

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


Dennis I. Komarov   (2010-09-30 16:57:00) [11]


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

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


Anatoly Podgoretsky   (2010-09-30 16:53:00) [12]

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


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

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

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

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


Rouse_   (2010-09-30 16:48:00) [14]


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

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


Rouse_   (2010-09-30 16:47:00) [15]

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


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

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


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

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

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


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

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


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

Я создал новый проект, поместил в него код создания иконки (перед 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:28:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо