Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.26;
Скачать: 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 вся ветка

Текущий архив: 2008.10.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1218448786
tomkat
2008-08-11 13:59
2008.10.26
Web приложение


4-1198141284
guav
2007-12-20 12:01
2008.10.26
Доступная память


4-1198653645
Rav
2007-12-26 10:20
2008.10.26
Как опеределить язык GUI Windows!!! Не GetSystemDefaultLCID!!!


2-1221827778
Vlad Oshin
2008-09-19 16:36
2008.10.26
Вот так оптимизатор..


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