| Автор
| Сообщение |
|
|
|
Цитата |
|
Вот вобщем то и вопрос такой...
у меня прога свёрнута в трее но можно от неё вызвать какуюлибо из форм... и когда такая какая нибудь из форм открыта то соответственно в меню пуск отображается такой прямоуголничек с названием открытой формы... так вот проблема в том что если я на данный от формы на панели пуск прямоугольник нажимаю правой кнопкой мыши и в появившемся меню нажимаю "закрыть" почемуто выходит так что вся программа звкрывается... прям геморой какой то... как сделать чтоб главная форма не зависила от других??  |
|
| В начало |
|
 |
|
|
 |
 aka57
Я живу тут....

Возраст: 28
Знак зодиака: 
Зарегистрирован: 03.07.2003
Сообщения: 1287
|
|
|
Цитата |
|
Тут вся фишка в VCL. Прямоугольничек на панеле задач и окно программы - две разных вещи. То есть Дельфя поступает так: создает окно приложения и окно главной формы. Не важно, какая форма на экране, на панеле задач будет окно приложения (этим и объясняется разные заголовки - окна и в панеле задач). Выход тут напращивается такой.
Запрещаем отображение окна приложения в трее.
Разрешаем каждому "неглавному" окну отображать себя на панеле задач. В таком случае там будет его иконка.
Вот и все. За программной реализацией обращайся в отдел WinApi  |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
К сожалению, при использовании VCL программная реализация такой штуки несколько затруднена.
Ну хорошо, вот скрыли мы кнопку приложения на панели задач одной командой ShowWindow(Application.Handle, SW_HIDE)
Но для того чтобы окно не зависело от Application, придется немного потрудиться.
Для этого, во-первых, будем создавать окна и обрабатывать их сообщения несколько иначе.
вот этот кусок кода с файле проекта
| Код: | begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
Application.Run;
end. |
заменим на такой
| Код: | begin
Application.Initialize;
Form1:=TForm1.Create(nil);
Form2:=TForm2.Create(nil);
try
Form1.Show;
ShowWindow(Application.Handle, SW_HIDE);
with Application do
repeat
try
HandleMessage;
except
HandleException(Application);
end;
until Terminated;
finally
Form2.Free;
Form1.Free;
end;
end. |
во-вторых, сделаем так, чтобы каждая форма показывала кнопку на панели задач.
| Код: | TForm1 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
{ ......... }
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=0;
end; |
| Код: | TForm2 = class(TForm)
protected
procedure CreateParams(var Params: TCreateParams); override;
end;
{ ......... }
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
inherited;
Params.WndParent:=0;
end; |
и в третьих, обеспечиваем корректное завершение приложения при закрытии всех форм.
| Код: | procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not Form2.Visible then Application.Terminate;
end; |
| Код: | procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if not Form1.Visible then Application.Terminate;
end; |
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
|
Цитата |
|
| Давайте решим эту проблему проще мне просто надо чтоб у остальных форм кроме главной или даже у всех форм неотображался этот прямоугльник на панели задач ... |
|
| В начало |
|
 |
 Ktf
Администратор

Возраст: 32
Знак зодиака: 
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
|
|
|
Цитата |
|
тогда тебе хватит одного
| Код: | | ShowWindow(Application.Handle, SW_HIDE); |
_________________ Пойду посплю перед сном. |
|
| В начало |
|
 |
|
|
| В начало |
|
 |
|