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

Вниз

Как создавать дочерние формы в единственном экземпляре ?   Найти похожие ветки 

 
IronHawk   (2002-02-28 16:53) [0]

Нужно пораждать несколько разных дочерних форм без возможности их дублирования !
Дано :
Есть Материнская форма FMain и 3 дочерние FChild1, FChild2, FChild3.
Как обрубить возможность их дублирования ?

Есть такое :

procedure FMain.Button1Click(Sender: TObject);
begin
FChild1 := TFChild.Create(Application);
end;
procedure FMain.Button2Click(Sender: TObject);
begin
FChild2 := TFChild.Create(Application);
end;
procedure FMain.Button3Click(Sender: TObject);
begin
FChild3 := TFChild.Create(Application);
end;

так создаеться их немерянно !

А так может быть только одна из них :

procedure FMain.Button1Click(Sender: TObject);
begin
if FMain.MDIChildCount<>1 then FChild1 := TFChild.Create(Application);
end;
procedure FMain.Button2Click(Sender: TObject);
begin
if FMain.MDIChildCount<>1 then FChild2 := TFChild.Create(Application);
end;
procedure FMain.Button3Click(Sender: TObject);
begin
if FMain.MDIChildCount<>1 then FChild3 := TFChild.Create(Application);
end;

Какой и куда надо сунуть код, что б могло быть только по одной FChild форме ???


 
Виктор Щербаков   (2002-02-28 16:58) [1]

procedure FMain.Button1Click(Sender: TObject);
begin
if FChild1 <> nil then
FChild1 := TFChild.Create(Application);
end;

procedure FMain.Button2Click(Sender: TObject);
begin
if FChild2 <> nil then
FChild2 := TFChild.Create(Application);
end;

procedure FMain.Button3Click(Sender: TObject);
begin
if FChild3 <> nil then
FChild3 := TFChild.Create(Application);
end;



 
Виктор Щербаков   (2002-02-28 17:03) [2]

Всё наоборот:

procedure FMain.Button1Click(Sender: TObject);
begin
if FChild1 = nil then
FChild1 := TFChild.Create(Application);
end;

procedure FMain.Button2Click(Sender: TObject);
begin
if FChild2 = nil then
FChild2 := TFChild.Create(Application);
end;

procedure FMain.Button3Click(Sender: TObject);
begin
if FChild3 = nil then
FChild3 := TFChild.Create(Application);
end;



 
IronHawk   (2002-02-28 17:07) [3]

>>> Виктор Щербаков ©
Отлично, только так они ваще непораждаються ! :-(


 
SDS   (2002-02-28 17:07) [4]

Вот так (если эти формы хоть чем - нибудь отличаються, например отличаются именем класса одна TForm1 другая TForm2 и т.д.)

procedure FMain.Button2Click(Sender: TObject);
var
i : integer;
IsForm : boolean;
begin
IsForm := false;
for i := 0 to FMain.MDIChildCount - 1 do{бегаем по "дочкам" и ищем одну из них}
if FMain.MDIChildren[i] is TForm2 then begin
FMain.MDIChildren[i].Show;
IsForm := true;
break;
end;
if Not IsForm then
FChild2 := TFChild.Create(Application);
end;


 
Виктор Щербаков   (2002-02-28 17:09) [5]

IronHawk © (28.02.02 17:07)
См. Виктор Щербаков © (28.02.02 17:03)

И при закрытии каждой MDIChild зануляй ссылку на неё.


 
IronHawk   (2002-02-28 17:11) [6]


> Виктор Щербаков © (28.02.02 17:09)
> IronHawk © (28.02.02 17:07)
> См. Виктор Щербаков © (28.02.02 17:03)
>
> И при закрытии каждой MDIChild зануляй ссылку на неё.

ДА !
СРАботало я попробовал так !

Спасибо огромное !
Работает!
Вы настоящие мастера : Виктор Щербаков ©
: SDS ©

Всем спасибо !

ВОПРОС Снимаеться !


 
Кулюкин Олег   (2002-02-28 17:19) [7]

Предвосхищая следующий вопрос.
Вывести форму на передний план - FChild1.BringToFront


 
IronHawk   (2002-02-28 17:31) [8]


> И при закрытии каждой MDIChild зануляй ссылку на неё.

А вот этого момента непонял ! 8-)


 
Алексей Петров   (2002-02-28 17:35) [9]

> И при закрытии каждой MDIChild зануляй ссылку на неё
Это слишком приземленно для такого великого мастера, как IronHawk


 
IronHawk   (2002-02-28 17:42) [10]


> > Виктор Щербаков ©

Извините повторюсь ...

> > И при закрытии каждой MDIChild зануляй ссылку на неё

Можно пояснить на пальцах ?


 
Виктор Щербаков   (2002-02-28 17:46) [11]

На пальцах:

> if FChild1 = nil then
> FChild1 := TFChild.Create(Application);


Означает:
Если переменная FChild1 равна nil то создаем форму и записываем адрес экземпляра класса созданной формы в FChild1.

После закрытия формы, переменная FChild1 не изменит своего значения. Делай выводы!


 
Юрий Зотов   (2002-02-28 17:48) [12]

procedure TForm1.OnDestroy(Sender: TObject);
begin
Form1 := nil
end;

То же повторить для остальных форм.


 
IronHawk   (2002-02-28 18:00) [13]

>>> Юрий Зотов ©

Спасибо !
Оказываеться надобыло не в FormClose, а в OnDestroy !
СПАСИБО !


 
Shirson   (2002-03-01 09:04) [14]

В onClose это работает ничуть не хуже.
Если форма MDIChild то на onClose следует написать

Action:=caFree;
Form1:=nil;

И все, форма благополучна умерла.


 
IronHawk   (2002-03-01 10:46) [15]

>>> Shirson ©
Я это сделал но наоборот !



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

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

Наверх





Память: 0.47 MB
Время: 0.007 c
1-43087
ProfiUglq
2002-02-27 12:02
2002.03.14
Вопрос по поводу кодов ошибок


14-43140
Дима566
2002-01-29 16:39
2002.03.14
ОН УМЕР!!!


6-43133
GHF
2001-12-26 13:27
2002.03.14
Закачка страницы html


1-43069
Light Elf
2002-02-27 10:22
2002.03.14
wsMaximized


1-43028
kirill2000
2002-02-25 15:09
2002.03.14
Desktop Resolution





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