Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.017 c
3-87823
Злодей
2003-03-08 12:05
2003.03.27
BDE


1-87966
Dim!S
2003-03-18 05:25
2003.03.27
Есть у меню подменю


3-87810
Солер
2003-03-08 18:02
2003.03.27
Не работает фильтр


7-88277
BJValentine
2003-02-04 18:45
2003.03.27
Событие Scroll


14-88202
alxx
2003-03-10 22:02
2003.03.27
Рисунки.