Вниз
Скачать: CL | DM;

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

← →
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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.008 c
2-1221626515
AlekseyB
2008-09-17 08:41
2008.10.26
Как сделать сообщение


2-1221425519
Дима С
2008-09-15 00:51
2008.10.26
Событие изменния ComboBox-a


2-1221737311
Int23
2008-09-18 15:28
2008.10.26
Как сохранить содержимое буфера обмена и восстановить


2-1221731916
cyborg
2008-09-18 13:58
2008.10.26
Нужен совет по выбору компонента


15-1220463031
Сергей М.
2008-09-03 21:30
2008.10.26
hMailServer




   Наверх