Главная страница
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.031 c
15-1157187351
Nic
2006-09-02 12:55
2006.09.24
Почти полностью загружается и вылетает


2-1157024256
2face
2006-08-31 15:37
2006.09.24
Ошибка


15-1157009903
tsa
2006-08-31 11:38
2006.09.24
Гугле десктопные гаджеты фигня!!


15-1156681887
Desdechado
2006-08-27 16:31
2006.09.24
Дружба


15-1156932901
AntiKur
2006-08-30 14:15
2006.09.24
Курение вредно для здаровья