Текущий архив: 2003.03.27;
Скачать: CL | DM;
ВнизБудете смеятся - вопрос про иконку в треее... Найти похожие ветки
← →
Дремучий (2003-03-14 11:41) [0]собственно, с ней все нормально... сидит в трее она нормально.
НО, я хочу к тому ж убрать прогу из панели задач. Убирается, но глючит. Когда прога запускается - на секунду(еле заметно) мелькает в таскбаре. При щелчке на иконке в трее - показ окна проги - тоже самое мерцание, при минимизации - тоже самое...
Не критично, но хочется, чтоб таки красиво было.
Использую такой код
procedure TdmMain.MyWindowRestore;
begin
Application.Restore;
Application.BringToFront;
end;
procedure TdmMain.AppEventsRestore(Sender: TObject);
begin
{$IFDEF WIN32}
if NewStyleControls then ShowWindow(Application.Handle, SW_HIDE);
//if NewStyleControls then ShowWindow(Application.Handle, SW_SHOW);
{$ENDIF}
end;
procedure TdmMain.AppEventsMinimize(Sender: TObject);
begin
{$IFDEF WIN32}
if NewStyleControls then ShowWindow(Application.Handle, SW_HIDE);
{$ENDIF}
end;
procedure TdmMain.TrayIconDblClick(Sender: TObject);
begin
MyWindowRestore;
end;
чего ей еще подсобачить, чтоб в таскбаре не мелькала?
← →
Smithson (2003-03-14 11:49) [1]Дарю.
(**********************************************************************)
procedure HideApp(AHide: Boolean);
var I: DWord;
Begin
I := GetWindowLong(Application.Handle, GWL_EXSTYLE);
if AHide then begin
ShowWindow(Application.Handle, SW_HIDE);
Application.MainForm.Hide;
Application.Minimize;
iAppDefEXSTYLE := I;
I := I and (not WS_EX_APPWINDOW);
I := I or WS_EX_TOOLWINDOW;
end
else begin
ShowWindow(Application.Handle, SW_Show);
if iAppDefEXSTYLE > 0 then I := iAppDefEXSTYLE
else begin
I := I and (not WS_EX_TOOLWINDOW);
I := I or WS_EX_APPWINDOW;
end;
end;
SetWindowLong(Application.Handle, GWL_EXSTYLE, I);
if not AHide then begin
Application.Restore;
Application.MainForm.Show;
Application.MainForm.WindowState := wsNormal;
Application.BringToFront;
end;
End;
← →
Дремучий (2003-03-14 12:42) [2]пасиб, интересная процедурка, НО...
стартовые свойства формы
-невидимая
-минимизированная
Application.Initialize;
HideApp(true);
Application.CreateForm(TdmMain, dmMain);
Application.CreateForm(TfmMain, fmMain);
Application.Run;
так экзепшен.... и я с ним согласен...
Application.Initialize;
Application.CreateForm(TdmMain, dmMain);
Application.CreateForm(TfmMain, fmMain);//майнформ
HideApp(true);
Application.Run;
так не глючит, но при запуске прога видна пару секунд в таскбаре
после этого...
1)востанавливается так как надо(в таскбаре не видно) !!!
2)минимизируется специфино(анимация - прячется под кнопку Старт), мне этого не нужно... Думаю это "эффект" тоже можно убрать, но как?
← →
nikkie (2003-03-14 14:10) [3]а как на счет TApplication.ShowMainForm?
← →
LongIsland (2003-03-14 14:24) [4]
var
WnHnd : Integer;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
WnHnd := GetWindowLong(Application.Handle, GWL_EXSTYLE);
if (WnHnd and WS_EX_TOOLWINDOW) = WS_EX_TOOLWINDOW then
WnHnd := WnHnd - WS_EX_TOOLWINDOW
else
WnHnd := WnHnd or WS_EX_TOOLWINDOW;
Application.MainForm.Hide;
SetWindowLong(Application.Handle, GWL_EXSTYLE, WnHnd);
Application.MainForm.Show;
Application.Run;
end.
А так все еще висит?
← →
Дремучий (2003-03-14 15:39) [5]
> nikkie © (14.03.03 14:10)
Application.MainForm.Hide;
Application.Run;
мерцает...
> LongIsland © (14.03.03 14:24
переставив SetWindowLong и MainForm.Hide местами...
не мерцает, но минимизируется с анимацией, что не есть нужным
SetWindowLong(Application.Handle, GWL_EXSTYLE, WnHnd);
Application.MainForm.Hide;
как убрать анимацию минимизации?
← →
LongIsland (2003-03-14 15:43) [6]Ой! Это оно и из трея убирает:-( Забыл совсем, придется доработать
← →
nikkie (2003-03-14 15:58) [7]я настырничать не буду, но все же перечитай мой пост.
← →
LongIsland (2003-03-14 16:07) [8]Кстати, о птичках. Посмотрел, как минимизируется WinCmd, так тоже с анимацией
← →
Smithson (2003-03-14 16:13) [9]Мне кажется, что анимация чего бы то ни было - свойства системы.
← →
Дремучий (2003-03-14 16:13) [10]
> nikkie © (14.03.03 15:58)
> я настырничать не буду, но все же перечитай мой пост.
так я пробовал....
Дремучий © (14.03.03 15:39
также втыкал Application.MainForm.Hide; сюда...
procedure TdmMain.AppEventsMinimize(Sender: TObject);
begin
{$IFDEF WIN32}
if NewStyleControls then ShowWindow(Application.Handle, SW_HIDE);
Application.MainForm.Hide;
{$ENDIF}
end;
все равно на какое-то время в таскбаре появляется "окошко" проги
← →
Дремучий (2003-03-14 16:16) [11]
> LongIsland © (14.03.03 16:07)
> Кстати, о птичках. Посмотрел, как минимизируется WinCmd,
> так тоже с анимацией
аську (2002а) посмотри - без анимаци... :P
← →
Юрий Зотов (2003-03-14 17:25) [12]Что ж так мучаться-то...
Выкиньте все эти извраты на помойку, оставьте стандартный DPR, а в OnCreate главной формы напишите всего 1 строку от nikkie. Там же сажайте в трэй иконку. И все.
← →
Дремучий (2003-03-14 20:04) [13]
> Юрий Зотов © (14.03.03 17:25)
Выкиньте все эти извраты на помойку,
закоментирвал, авось выбрасывать еще рано...
оставьте стандартный
> DPR, а в OnCreate главной формы напишите всего 1 строку
> от nikkie. Там же сажайте в трэй иконку. И все.
строчка от nikkie - Application.MainForm.Hide;
как с боротся с экзепшеном?
> Юрий Зотов ©
и как ОнКриэйт будет влиять на минимизацию?
Application.MainForm.Hide; в procedure TdmMain.AppEventsMinimize(Sender: TObject); к нужному эффекту не приводит. Вы или неправильно поняли проблему или поспешили с ответом
← →
Юрий Зотов (2003-03-14 21:42) [14]> Дремучий © (14.03.03 20:04)
> строчка от nikkie - Application.MainForm.Hide;
> как с боротся с экзепшеном?
А если быть повнимательнее, то строчка от nikkie такая: TApplication. Show MainForm
А если еще нажать F1, то получится такая строчка:
Application.ShowMainForm := False;
И ни с чем не надо бороться. Кроме собственной невнимательности и торопливости.
> Вы или неправильно поняли проблему или поспешили с ответом
Это вряд ли, как говорил тов. Сухов. Дело в том, что подобных примеров я в одном только этом форуме приводил уже, наверное, с десяток. И все проверенные, все работающие. Так что понять "проблему" в очередной раз очень, знаете ли, несложно.
Формы трэй-приложений вовсе не минимизируются/восстанавливаются, а просто прячутся/показываются. Можно, конечно, навертеть и анимацию, и вообще что угодно, но этот путь самый простой и самый распространенный. Для его реализации пишется та самая строчка, обработчик WM_SYSCOMMAND и собственно обработчик сообщения от иконки. Вот и вся "проблема".
Загляните сюда:
http://www.delphikingdom.com/helloworld/samples_win.htm#link11
Там пример трехлетней давности. Не идеальный, но работающий.
← →
Дремучий (2003-03-14 22:22) [15]сижу и чешу бошку....
как я три раза "перечитав" сообщение nikkie
вместо Application.ShowMainForm увидел Application.MainForm.Hide
8-o
вывод - надо чаще пользоваться буфером обмена, он читает внимательнее %))
Формы трэй-приложений вовсе не минимизируются/восстанавливаются, а просто прячутся/показываются. этот путь самый простой и самый распространенный. Для его реализации пишется та самая строчка, обработчик WM_SYSCOMMAND и собственно обработчик сообщения от иконки.
действительно то решение, что я искал
спасибо всем... Вы рулез!
моя "невнимательность" мастдай!
%))
Страницы: 1 вся ветка
Текущий архив: 2003.03.27;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.009 c