Главная страница
    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
2-1221625602
Ivanov Ivan
2008-09-17 08:26
2008.10.26
Индекс строки ListView


1-1200822679
Ильдар
2008-01-20 12:51
2008.10.26
ListBox


2-1221889767
AlexDan
2008-09-20 09:49
2008.10.26
Как узнать есть ли файл на диске..


10-1150270549
Grant
2006-06-14 11:35
2008.10.26
Работа с Excel


11-1194330061
Robt
2007-11-06 09:21
2008.10.26
Collapse





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский