Delphi - Ayuda con TList y Exceptions

 
Vista:

Ayuda con TList y Exceptions

Publicado por Geronimo (3 intervenciones) el 11/04/2006 20:43:40
Tengo una clase TMaterial y una clase TAdministrador que contiene un
atributo materiales: TList.
En TAdministrador tengo una funcion asi:

function TAdministrador.addMaterial(material: TMaterial): boolean;
begin
try
materiales.Add(material); -----> Exception EAccesViolation
result:=true;
except
result:=false;
end;
end;

En el Form tengo una variable material: TMateriales y administrador:
TAdministrador.
Llamo a la funcion de Adminisrador de esta manera:

Administrador.addMaterial(material);

Por otro lado, por que desatiende el bloque except? No continua con
programa sino que tira un cartel indicando la exception.
Hace falta declarar algo mas para que haga caso a las exceptions?
Si es asi, en que parte debo declararlo?
Hice algunas cosas orientadas a objetos con Java pero Delphi es un lenguaje que estoy
aprendiendo y por ahi se me pasan por alto varias cosas.
Saludos, y gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con TList y Exceptions

Publicado por emilio (175 intervenciones) el 12/04/2006 16:33:21
Hola nuevamente:
Bueno veo que sigues teniendo porbles con Delphi, bueno te hecho otra mano. Mira no se bien que deseas hacer o cual es la funcion de la clase TAdministrador pero de todas formas es codigo es erroneo, si te fijas en el procedimiento Add de la clase TList veras que el parametro es un Puntero, lo que se guarda en ella es una referencia a un objeto no el objeto en si.

Una forma de mejorar tu codigo puede ser asi:

Type
TAdministrador = Class

private
{Aqui van tus variables y metodos privados}

public

FList: TList;
Constructor CreateAdministrador;
Destructor DestroyAdministrador;
end;

Si cuando creas el Objeto TAdministrador creas la variable FList entoces podras hacer esta llamada en cualquier parte de tu programa:

var
MyAdmin : TAdministrador;
begin
MyAdmin := TAdministrador.CreateAdministrador;
MyAdmin.FList.Add( MysMateriales );
end;

La llamada a MyAdmin := TAdministrador.CreateAdministrador; solo debes realizar una ves, para eso puede coger el evento OnCreate y la llamada a MyAdmin.FList.Add( MysMateriales ); si la realizas cuantas veces necesites.

Ahora te muestro como quedaria el constructor:

TAdministrador.CreateAdministrador;
begin
FList := TList.Create;
{Aqui va todo el codigo de inicializacion de la Clase}
.....
..
.
end;

Otra cosa importante que debe olvidarsete es el destructor:

TAdministrador.DestroyAdministrador;
begin
{Este codigo se deseas lo puedes proteger con una Try...Finally pero no es necesario}
Try
{Algun codigo de finalizacion aqui}
Finally
FList.Free;
end;
end;

Bueno lo antes mostrado es una posible forma de hacer lo que creo que intentas hacer, no soy mas profundo ni expongo otras soluciones porque no se cuales son tus ideas y la utilidad de la clase TAdministrador ya basicamente la Clase TList tiene metodos que facilitan este trabajo. No te respondi ayer porque tube que salir de urgencia, pero puedes escribirme el correo sin poreblas que intentare contestarte lo antes posible vale.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con TList y Exceptions

Publicado por Sebastian Corradi (25 intervenciones) el 12/04/2006 22:02:08
Ademas de lo que dice emilio:

Cuidado cuando recuperas un objeto de tu TList ya que como almacenaste un puntero, tambien vas a recurear un puntero
vas a tener que castearlo a un elemento del tipo TMaterial.

Tmaterial(Algun_Objeto)

y no todas las exepciones son atedibles por defecto,
algunas son de tipo RUNTIME y esas no son atendibles por el Except convencional ( por lo menos asi es en Java )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con TList y Exceptions

Publicado por Mr. Sade (6 intervenciones) el 13/04/2006 21:12:20
necesitas crear un objeto de TList para poder usarla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar