![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
не создавать дочернюю форму [D7, XP]
_Gras_ © (2006-09-04 18:08:00)Привет всем!!! Такой вопрос: фот создал MDI-форму, создал дочернюю, убрал из списка автосоздания. При нажатии на кнопку выполняется код Form:=TForm.Create(self);
И каждый раз создается новое дочернее окно, а как сделать так, чтобы при нажатии на кнопку дочернее окно создавалось только 1 раз и если доченряя форма создана, то при последубщем нажатии на кнопку ничего не создавалось?
Loginov Dmitry (2006-09-04 21:33:00) [1]> if Screen.Forms[i] is FormClass then
Не нравится мне эта строка. Лучше уж
if Screen.Forms[i].ClassType = FormClass.ClassType then
имхо
Рустем (2006-09-04 20:34:00) [2]Прошу прощения, в [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 18:44:00) [3]
procedure TForm1.Button6Click(Sender: TObject);
begin
if Form2 = nil then
Form2 := TForm2.Create(Application);
end;
Рустем (2006-09-04 18:13:00) [4]Добавь в свое приложение следующую функцию:
function TMDIForm.OpenForm(FormClass: TFormClass): Boolean;
begin
Result:=True;
Screen.Cursor := crHourGlass;
try
FindShowForm(FormClass, '');
finally
Screen.Cursor := crDefault;
end;
end;
и дочернюю форму открывай так:
OpenForm(TChildForm);
Ega23 (2006-09-04 18:12:00) [5]if Form<>nil then ......
Только на удаление не забыть
Form.Free;
Form:=nil;