Главная страница
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.47 MB
Время: 0.03 c
2-1157617630
newbie2
2006-09-07 12:27
2006.09.24
Как объект передать через интовую переменную?


15-1156905876
X9
2006-08-30 06:44
2006.09.24
Выбор стиральной машины


15-1156343106
TUser
2006-08-23 18:25
2006.09.24
Каковы причины Первой Мировой Войны?


15-1157019915
Idiot
2006-08-31 14:25
2006.09.24
Есть ли что то на подобе процедуры VAL в БД ....


2-1157398753
TimScorp
2006-09-04 23:39
2006.09.24
FreeReport