Тема
|
Dinami4ni formi
|
|
Автор | Vermax (Нерегистриран) |
Публикувано | 21.08.03 11:30 |
|
..Един тъп въпрос
Как мога да разбера от дадена Форма кога друга форма(която се създава динами4но) е активна?
..heeeelllp (zabravil sym kak stava6e )![](http://i.dirbg.com/clubs/icons/blush.gif)
|
|
Тема
|
Re: Dinami4ni formi
[re: Vermax]
|
|
Автор |
Pechenia (нема лабаво ;-) |
Публикувано | 21.08.03 12:46 |
|
if Form.Active then...
чети и дишай по-леко
|
|
Тема
|
Re: Dinami4ni formi
[re: Pechenia]
|
|
Автор | Vermax (Нерегистриран) |
Публикувано | 21.08.03 13:18 |
|
...qvno ne sym se izrazil qsno...
tova bi rabotilo ako za formata se zadelq pamet pri startirane na prilojenieto, no ako formata se syzdava dinami4no (toest pamet za neq se zadelq v posledstvie-po vreme na rabota na prolijenieto) i ot druga forma se pravi proverka s "if Form.Active" - Delphi hvyrlq "Access Violation".
ta Vyprosa mi be6e - kak moga da razbera 4e formata,koqto se syzdava dinami4no e syzdadena i e activna (Tyi kato pri zatvarqneto i - zadelenata za neq pamet se osvobojdava)
|
|
Тема
|
Re: Dinami4ni formi
[re: Vermax]
|
|
Автор |
Pechenia (нема лабаво ;-) |
Публикувано | 21.08.03 13:30 |
|
Направих си труда да напиша едно приложение, ето кода:
procedure TForm1.FormCreate(Sender: TObject);
var p: TForm;
begin
p:=TForm.Create (nil); // това заделя памет за формата
p.Show; // това прави формата p активна
if p.Active then ShowMessage ('p is active') else ShowMessage ('p is not active');
end;
Изтрий коментираните редове и я пусни пак. Аз лично не получих Access ViolationРедактирано от Pechenia на 21.08.03 13:34.
|
|
Тема
|
Blagodarq
[re: Pechenia]
|
|
Автор | Vermax (Нерегистриран) |
Публикувано | 21.08.03 15:30 |
|
Благодаря приятелю ,но наистина явно не можем да се разберем
...както и да е аз си спомних как ставаха работите:
Var
ChildForm:TForm1; //globalna promenliva
//Ако на някой бутон имаш:
procedure Buttonclick......
begin
ChildForm:=TForm1.create(self);
ChildForm.Showmodal;
end;
//to
Procedure Table1.Afterscroll.....
begin
if assigned(ChildForm) then //proverqva dali formata e v pametta
.......
end;
![](http://i.dirbg.com/clubs/icons/cool.gif)
|
|
Тема
|
Re: Blagodarq
[re: Vermax]
|
|
Автор |
Eмил () |
Публикувано | 21.08.03 16:15 |
|
"if assigned(ChildForm) then //proverqva dali formata e v pametta "
Има един подводен камък.
Ако после освободиш формата:
ChildForm.Free
и след това провериш
if assigned...
то ChildForm няма да е nil, но паметта за
формата ще е освободена и проверката
if ChildForm.Active ...
пак ще гръмне. (Защото assigned просто
проверява дали обекта е nil или не, но дали
тази памет е достъпна е друг въпрос )
Затова вместо
ChildForm.Free
може да се използва
FreeAndNil(ChildForm)
за да си сигурен че ще стане nil.
Еквивалентно на
Form.free и Form:=nil;
Друг способ:
var FlagIsFormActive:boolean;
...
FlagIsFormActive:=false;
try FlagIsFormActive:=Form.Active except end;
{и сега вече}
if FlagIsFormActive then ...
|
|
|
Ми то под "активна" се разбира дали е на фокус... Както и да е, щом си се оправил...
чети и дишай по-леко
|
|
Тема
|
Re: Dinami4ni formi
[re: Vermax]
|
|
Автор | about (Нерегистриран) |
Публикувано | 22.08.03 17:08 |
|
Имаш MainForm и ChildForm.
Добавяш един флаг ChildFormActive: boolean в MainForm
Slagash w OnCreate methoda na ChildForm
MainForm.ChildFormActive:=true;
Slagash w OnDestroy methoda na ChildForm
MainForm.ChildFormActive:=false;
Ако не знаеш как да хванеш динамично OnCreate i OnDestroy пиши тук...
|
|
Тема
|
Оф, хора :)
[re: about]
|
|
Автор |
z_free (людоед) |
Публикувано | 22.08.03 18:10 |
|
Шашкам се вече :) Какво му е на if Assigned(форма) then .. аз лично никога не пиша обект.Free; - винаги заnilявам ![](http://i.dirbg.com/clubs/icons/cool.gif)
-------------
Special killer double trouble triple extra nicotine monster!
|
|
Тема
|
Re: Оф, хора :)
[re: z_free]
|
|
Автор | about (Нерегистриран) |
Публикувано | 22.08.03 20:09 |
|
Ами, на мен ми е малко мътно какво точно прави това assigned.
Пък и с флаг си е абсолютно ясно за какво става дума...
А ти що не ползваш фрии ? :)
|
|