Chertenok.ru - все о программировании
Вход  |  Регистрация  |  Поиск 
Праздник
Сегодня :

День славянской письменности и культуры


почему призакрытии одной из форм закрывается вся прога???


Новая тема  Ответить  Печать Предыдущая тема  Следующая тема
Автор Сообщение
Weiss
Гость







СообщениеСр, 26-Окт-2005 0:22    Заголовок сообщения: почему призакрытии одной из форм закрывается вся прога???
Цитата

Вот вобщем то и вопрос такой...
у меня прога свёрнута в трее но можно от неё вызвать какуюлибо из форм... и когда такая какая нибудь из форм открыта то соответственно в меню пуск отображается такой прямоуголничек с названием открытой формы... так вот проблема в том что если я на данный от формы на панели пуск прямоугольник нажимаю правой кнопкой мыши и в появившемся меню нажимаю "закрыть" почемуто выходит так что вся программа звкрывается... прям геморой какой то... как сделать чтоб главная форма не зависила от других?? Офигеть! Shocked
В начало
Пол:Муж aka57
Я живу тут....


Возраст: 28
Знак зодиака: Стрелец
Зарегистрирован: 03.07.2003
Сообщения: 1287

СообщениеСр, 26-Окт-2005 9:34 
Цитата

Тут вся фишка в VCL. Прямоугольничек на панеле задач и окно программы - две разных вещи. То есть Дельфя поступает так: создает окно приложения и окно главной формы. Не важно, какая форма на экране, на панеле задач будет окно приложения (этим и объясняется разные заголовки - окна и в панеле задач). Выход тут напращивается такой.

Запрещаем отображение окна приложения в трее.

Разрешаем каждому "неглавному" окну отображать себя на панеле задач. В таком случае там будет его иконка.

Вот и все. За программной реализацией обращайся в отдел WinApi :)
В начало
Посмотреть профиль Отправить личное сообщение
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 26-Окт-2005 10:19 
Цитата

К сожалению, при использовании 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;

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Weiss
Гость







СообщениеСр, 26-Окт-2005 11:42 
Цитата

Давайте решим эту проблему проще мне просто надо чтоб у остальных форм кроме главной или даже у всех форм неотображался этот прямоугльник на панели задач ...
В начало
Пол:Муж Ktf
Администратор


Возраст: 32
Знак зодиака: Рак
Зарегистрирован: 15.05.2005
Сообщения: 1502
Откуда: localhost
СообщениеСр, 26-Окт-2005 11:44 
Цитата

тогда тебе хватит одного
Код:
ShowWindow(Application.Handle, SW_HIDE);

_________________
Пойду посплю перед сном.
В начало
Посмотреть профиль Отправить личное сообщение
Weiss
Гость







СообщениеСр, 26-Окт-2005 14:35 
Цитата

Спасибки
В начало
Показать сообщения:   
Страница 1 из 1
Перейти:  
Новая тема  Ответить  Печать

Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете присоединять файлы в этом форуме
Вы можете скачивать файлы в этом форуме
хостинг от .masterhost 
Rambler's Top100