Форум: "Начинающим";
Текущий архив: 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