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

Вниз

из dynamic Child зделать nill   Найти похожие ветки 

 
Dema-X ©   (2004-12-10 19:21) [0]

Есть массив Child типа  tform как сделать так чтобы при закрытии child:=nill а то
procedure TA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action := caFree;
срабатывает но child не равен нил и генерит исключение при обращении к нему или как проверить что окно убито?


 
DiamondShark ©   (2004-12-10 19:54) [1]

procedure TA.FormClose(Sender: TObject; var Action: TCloseAction);
var
 I: integer;
begin
 Action := caFree;
 I := Low(Child);
 while (I <= High(Child)) and (Child[I] <> Sender) do Inc(I);
 if I <= High(Child) then Child[I] := nil;
end;


 
Alexander Panov ©   (2004-12-10 20:12) [2]

Пример класса, который может обнулить значение ссылки на создаваемый объект:

 TMyClass=class
 private
   FObjRef: PInteger;
   FValue: String;
 public
   constructor Create(ObjRef: Pointer; Value: String);
   destructor Destroy; override;
   class function CreateObj(ObjRef: Pointer; Value: String): TMyClass;
 end;


{ TMyClass }

constructor TMyClass.Create(ObjRef: Pointer;
 Value: String);
begin
 FValue := Value;
 FObjRef := ObjRef;
end;

class function TMyClass.CreateObj(ObjRef: Pointer;
 Value: String): TMyClass;
begin
 Result := TMyClass.Create(ObjRef,Value);
end;

destructor TMyClass.Destroy;
begin
 FObjRef^ := 0;
 inherited;
end;

Пример вызова:

var
 M: TMyClass;
begin
 M := TMyClass.CreateObj(@M,"adfsdf");
 M.Free;


 
Leonid Troyanovsky   (2004-12-10 20:18) [3]


> Есть массив Child типа  tform как сделать так чтобы при
> закрытии child:=nill а то
> procedure TA.FormClose(Sender: TObject; var Action: TCloseAction);
> begin
>  Action := caFree;
> срабатывает но child не равен нил и генерит исключение при
> обращении к нему или как проверить что окно убито?


Все формы есть в Screen.Forms.
Кроме того, у каждого компонента есть Notification.

--
С уважением, LVT.


 
Alexander Panov ©   (2004-12-10 20:21) [4]

Кстати, без функции class function CreateObj(ObjRef: Pointer; Value: String): TMyClass;
тоже можно обойтись...


 
Leonid Troyanovsky   (2004-12-10 20:32) [5]


> DiamondShark ©   (10.12.04 19:54) [1]
>  while (I <= High(Child)) and (Child[I] <> Sender) do Inc(I);


Точнее было б Self.

--
С уважением, LVT.


 
DiamondShark ©   (2004-12-10 20:36) [6]


> Leonid Troyanovsky   (10.12.04 20:32) [5]
> Точнее было б Self.



procedure TMainForm.OpenChild;
var
 ChildForm: TForm;
begin
 ChildForm := TChildForm.Create(Application);
 ChildForm.OnClose := ChildClose;
end;


Ты всё ещё уверен, что "точнее было б Self"?


 
Leonid Troyanovsky   (2004-12-10 20:42) [7]


> > Точнее было б Self.

>  ChildForm.OnClose := ChildClose;

> Ты всё ещё уверен, что "точнее было б Self"?


Уверен.
А что ты хотел сказать приведенным?

--
С уважением, LVT.


 
DiamondShark ©   (2004-12-10 20:46) [8]


> Leonid Troyanovsky   (10.12.04 20:42) [7]
> Уверен.

Аминь.


> А что ты хотел сказать приведенным?

Вы хотите об этом поговорить?


 
Leonid Troyanovsky   (2004-12-10 20:55) [9]


> Leonid Troyanovsky   (10.12.04 20:42) [7]
> >  ChildForm.OnClose := ChildClose;


А.. Только это тоже фигня.
Если уж все делать из главной формы, то и переопределяй DoClose.

И, вообще не понятна нужда в каком-то массиве Child :)

--
С уважением, LVT.


 
Leonid Troyanovsky   (2004-12-10 20:59) [10]


> DiamondShark ©   (10.12.04 20:46) [8]
> > А что ты хотел сказать приведенным?
> Вы хотите об этом поговорить?


По-взрослому? :)
Валяй(те).

--
С уважением, LVT.


 
DiamondShark ©   (2004-12-10 21:12) [11]


> Leonid Troyanovsky   (10.12.04 20:59) [10]

Так ведь просто всё.

Обработчик события может какому угодно объекту принадлежать.
Например, в моём примере -- это метод главной формы.
Так что Self тут вовсе даже не "точнее".


 
Dema-X ©   (2004-12-11 06:56) [12]

Ладно хоре спорить мужики,спасибо

> DiamondShark
твой код работает как нужно хотя я не вьехал в его сиысл :(


 
DiamondShark ©   (2004-12-11 09:15) [13]


> твой код работает как нужно хотя я не вьехал в его сиысл
> :(

А во что там въезжать? В цикл и условный оператор?
Цикл -- поиск в массиве.
Условный оператор -- проверка успешности поиска.
Функции Low и High -- встроенные функции паскаля, возвращают минимальное и максимальное значение индекса массива.


 
Leonid Troyanovsky ©   (2004-12-11 12:13) [14]


> Dema-X ©   (11.12.04 06:56) [12]
> Ладно хоре спорить мужики,спасибо


Ну, а ты так и не сказал, зачем тебе массив.
Чем MDIChildren не устраивает?
Во всяком случае, обнулять ничего не надо.

--
С уважением, LVT.



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

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

Наверх




Память: 0.48 MB
Время: 0.038 c
3-1101637166
GanibalLector
2004-11-28 13:19
2004.12.26
ОСТАТКИ товара


14-1102339335
Flying Home
2004-12-06 16:22
2004.12.26
Что-то непонятное для меня в исходниках Indy


4-1099902701
Андрей Н.
2004-11-08 11:31
2004.12.26
Задержка в программе


14-1102368965
GanibalLector
2004-12-07 00:36
2004.12.26
UML


14-1102433005
Сергей Г
2004-12-07 18:23
2004.12.26
Куда мы катимся





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