Форум: "Основная";
Текущий архив: 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.05 c