Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Вниз

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

 
_Gras_   (2006-09-04 18:08) [0]

Привет всем!!! Такой вопрос: фот создал MDI-форму, создал дочернюю, убрал из списка автосоздания. При нажатии на кнопку выполняется код Form:=TForm.Create(self);
И каждый раз создается новое дочернее окно, а как сделать так, чтобы при нажатии на кнопку дочернее окно создавалось только 1 раз и если доченряя форма создана, то при последубщем нажатии на кнопку ничего не создавалось?


 
Ega23 ©   (2006-09-04 18:12) [1]

if Form<>nil then ......
Только на удаление не забыть
Form.Free;
Form:=nil;


 
Рустем ©   (2006-09-04 18:13) [2]

Добавь в свое приложение следующую функцию:

function TMDIForm.OpenForm(FormClass: TFormClass): Boolean;
begin
 Result:=True;
 Screen.Cursor := crHourGlass;
 try
   FindShowForm(FormClass, "");
 finally
   Screen.Cursor := crDefault;
 end;
end;

и дочернюю форму открывай так:

 OpenForm(TChildForm);


 
Loginov Dmitry ©   (2006-09-04 18:44) [3]


procedure TForm1.Button6Click(Sender: TObject);
begin
 if Form2 = nil then
   Form2 := TForm2.Create(Application);
end;


 
Рустем ©   (2006-09-04 20:34) [4]

Прошу прощения, в [2] функция должна выглядеть так:

function TMDIForm.OpenForm(FormClass: TFormClass): Boolean;
var
 MyForm: TForm;
 i: Integer;
begin
 Result:=True;
 MyForm := nil;
 Screen.Cursor := crHourGlass;
 try
   for i := 0 to Screen.FormCount - 1 do
   begin
     if Screen.Forms[i] is FormClass then
     begin
       MyForm := Screen.Forms[i];
       Break;
     end;
   end;
   if MyForm = nil then Application.CreateForm(FormClass, MyForm);
   with MyForm do
   begin
     if WindowState = wsMinimized then WindowState := wsNormal;
     Show;
   end;
 finally
   Screen.Cursor := crDefault;
 end;
end;

Данный метод имеет свой плюс при использовании нескольких дочерних форм.

P.S. Повзаимствовано из библиотеки RxLib...


 
Loginov Dmitry ©   (2006-09-04 21:33) [5]

> if Screen.Forms[i] is FormClass then


Не нравится мне эта строка. Лучше уж

if Screen.Forms[i].ClassType = FormClass.ClassType then

имхо



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.041 c
1-1155644817
DelphiLexx
2006-08-15 16:26
2006.09.24
Копировать и вставить несколько контролов


15-1157098933
ArtemESC
2006-09-01 12:22
2006.09.24
Людмила Путина вступилась за школьников


15-1157053384
R0NYN
2006-08-31 23:43
2006.09.24
Форум Microsoft весна 2006


11-1130323876
Reset
2005-10-26 14:51
2006.09.24
"Закрыть" MAINICON


4-1148380924
VitalZ
2006-05-23 14:42
2006.09.24
Unit для const THREAD_SUSPEND_RESUME





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