![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как предотвратить повторный запуск формы?
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]что значит "форма была запущена"?