Bueno, muchas gracias por la explicación tan detallada.
A ver si estoy en lo correcto, en conclusión nil, Assigned y Freeandnil se usan para corroborar si el objeto sobre el que se va a actuar está creado en memoria y en caso contrario actuar sobre la excepción que se generaría.
Entonces mi pregunta es, en lugar del nil ¿Se puede usar un bloque de este tipo?
Código:
Try
sentencias...
Except
sentencias...
Finally o Raise
sentencias...
end
Es decir (usando el ejemplo de Lepe) podría hacer algo como esto?:
Código Delphi
[-]
private
nodo:TTreeNode;
end;
implementation
procedure TForm1.button1Click;
begin
Try
nodo.text:= 'si ';
Except
nodo := TTreenode.Create(self);
nodo.text:= 'si ';
end;
end;
procedure Tform1.FormClose;
begin
freeandnil(nodo);
end;
La idea no es evitar manejar el nil, sino entender bien como hacerlo y saber si este tipo de casos se puede tratar como una excepción cualquiera.
Aunque me parece que no, porque haría lo indicado para cualquier tipo de excepción y no solo cuando el objeto no exista....
Si el control que estoy manejando pertenece a la forma principal de mi programa (me refiero a un control normal, que no se cree a posteriori en runtime) entonces no tendría sentido usar el nil, pues todos los controles de la forma se crean y asignan en memoria con Application.CreateForm(...
antes de que delphi ejecute Application.run,
...o ¿es que no he entendido que un control puede estar mostrado en una forma pero no asignado a memoria?
Gracias.