Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.12.26;
Скачать: [xml.tar.bz2];

Вниз

Не "запуздыривается" [орешник (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.004 c
15-1284701719
Zenith
2010-09-17 09:35
2010.12.26
Библиотека для быстрых операций с массивами


2-1285328385
PavDimka
2010-09-24 15:39
2010.12.26
Keywords: record, class, interface, object. Object?


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


2-1285609884
menart
2010-09-27 21:51
2010.12.26
TImage


15-1284489244
0x00FF00
2010-09-14 22:34
2010.12.26
Реклама Delphi на ВМК





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский