Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1220406185
Tricky
2008-09-03 05:43
2008.10.26
Тест Роршаха


15-1220458307
@!!ex
2008-09-03 20:11
2008.10.26
Началось...


2-1221743924
Дмитрий87
2008-09-18 17:18
2008.10.26
Оптимизация


15-1220127613
Anatoly Podgoretsky
2008-08-31 00:20
2008.10.26
Система Рада


15-1220467529
Кое кто
2008-09-03 22:45
2008.10.26
Фуникулёр с гидравлическим противовесом





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский