Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.24;
Скачать: CL | DM;

Вниз

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

 
_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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
15-1157207050
Zeqfreed
2006-09-02 18:24
2006.09.24
Проблема с жестким диском


1-1155188154
DelphiN!
2006-08-10 09:35
2006.09.24
AV при попытке поиска в строке


15-1157694446
ilya39
2006-09-08 09:47
2006.09.24
Windows Server 2003 R2 пакет предустановки


15-1157272702
Проггер из библиотеки
2006-09-03 12:38
2006.09.24
Глюки в программах


1-1155276837
AlexKniga
2006-08-11 10:13
2006.09.24
Помогите перевести с C на Pascal