Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как предотвратить повторный запуск формы?


Matveih1 ©   (2008-09-18 09:22:00) 

Есть главная форма, из которой запускаются остальные не модальные формы. Как сделать проверку, что если форма была запушена, то показать ее, а не создавать новую.


[i2e]   (2008-09-18 14:42:00) [1]

При запуске формы ставил флажок, что она запущена.
Ниже - открытие двух форм по нажатию кнопок.
Может и не самое красивое решение - но работает.

procedure TMainForm.ShowIndItemClick(Sender: TObject);
begin
 if fShowIndForm then ShowIndForm.SetFocus
 else
 begin
    Application.CreateForm(TShowIndForm, ShowIndForm);
    ShowIndForm.Show;
   fShowIndForm := True;
 end;
end;

procedure TMainForm.TextSItemClick(Sender: TObject);
begin
 if fTextSForm then TextSForm.SetFocus
 else
 begin
    Application.CreateForm(TTextSForm, TextSForm);
    TextSForm.Show;
   fTextSForm := True;
 end;
end;


Для MDI-формы, для проверки уже открытого файла, делал так:

   // тест на повторное открытие
   for N1 := MDIChildCount - 1 downto 0 do
   if MDIChildren[N1].Caption = mfOpenFileName then begin
      MessageDlg('Файл ' + mfOpenFileName + ' уже открыт', mtInformation, [mbOk], 0);
      Exit;
   end;


Тоже работает.


Германн   (2008-09-18 14:28:00) [2]


> Плохиш ©   (18.09.08 10:32) [8]

+1


Плохиш   (2008-09-18 10:32:00) [3]


> procedure TForm1.Button14Click(Sender: TObject);
> var
> F: TForm;
> begin
> if Assigned(F)
>  then F.Show

Улыбнуло :-)

Screen.Forms


Vlad Oshin   (2008-09-18 10:22:00) [4]

можно попробовать

comp:=application.FindComponent('Forma_твоя');
if comp<>nil then


Правильный$Вася   (2008-09-18 10:07:00) [5]


> Как сделать, чтобы при повторном нажатии на кнопку не создавалась
> новая форма, а показывалась существующая.

тогда нужно не локальную переменную для формы создавать, а использовать ту, которую сама дельфи создает
и не разрушать ее по кнопке, а просто использовать умолчательный Hide-реакцию на закрытие
и проверять переменную на nil


Matveih1   (2008-09-18 10:05:00) [6]

не работает. При первом запуске ругается на Access violation


Vlad Oshin   (2008-09-18 09:54:00) [7]

procedure TForm1.Button14Click(Sender: TObject);
var
F: TForm;
begin
if Assigned(F)
 then F.Show
 else F := TForm.Create(Self);
try
  F.Show;
except
  F.Free;
end;
end;


Matveih1   (2008-09-18 09:36:00) [8]

Например в главной форме при нажатии на кнопку происходит следующее:

procedure TForm1.Button1Click(Sender: TObject);
var
 F: TForm2;
begin
 F := TForm2.Create(Self);
 try
   F.Show;
 except
   F.Free;
 end;
end;


Как сделать, чтобы при повторном нажатии на кнопку не создавалась новая форма, а показывалась существующая.


Vlad Oshin   (2008-09-18 09:34:00) [9]


> что значит "форма была запущена"?

это когда наименования по умолчанию, компаненты не ровно накиданы..


Dennis I. Komarov   (2008-09-18 09:29:00) [10]

что значит "форма была запущена"?


Наверх

Титульная страница Поиск, карта сайта Написать письмо