Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
ВнизКак предотвратить повторный запуск формы? Найти похожие ветки
← →
Matveih1 © (2008-09-18 09:22) [0]Есть главная форма, из которой запускаются остальные не модальные формы. Как сделать проверку, что если форма была запушена, то показать ее, а не создавать новую.
← →
Dennis I. Komarov © (2008-09-18 09:29) [1]что значит "форма была запущена"?
← →
Vlad Oshin © (2008-09-18 09:34) [2]
> что значит "форма была запущена"?
это когда наименования по умолчанию, компаненты не ровно накиданы..
← →
Matveih1 © (2008-09-18 09:36) [3]Например в главной форме при нажатии на кнопку происходит следующее:
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:54) [4]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 10:05) [5]не работает. При первом запуске ругается на Access violation
← →
Правильный$Вася (2008-09-18 10:07) [6]
> Как сделать, чтобы при повторном нажатии на кнопку не создавалась
> новая форма, а показывалась существующая.
тогда нужно не локальную переменную для формы создавать, а использовать ту, которую сама дельфи создает
и не разрушать ее по кнопке, а просто использовать умолчательный Hide-реакцию на закрытие
и проверять переменную на nil
← →
Vlad Oshin © (2008-09-18 10:22) [7]можно попробовать
comp:=application.FindComponent("Forma_твоя");
if comp<>nil then
← →
Плохиш © (2008-09-18 10:32) [8]
> procedure TForm1.Button14Click(Sender: TObject);
> var
> F: TForm;
> begin
> if Assigned(F)
> then F.Show
Улыбнуло :-)
Screen.Forms
← →
Германн © (2008-09-18 14:28) [9]
> Плохиш © (18.09.08 10:32) [8]
+1
← →
[i2e] (2008-09-18 14:42) [10]При запуске формы ставил флажок, что она запущена.
Ниже - открытие двух форм по нажатию кнопок.
Может и не самое красивое решение - но работает.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;
Тоже работает.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.10.26;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c