PDA

Ver la Versión Completa : Casting de component


dfarias
07-05-2014, 11:23:17
Buenos días. Alquien puede ayudarme con este problema ya que no comprendo porque da error el siguiente codido al hacer un casting en el evento click de un boton. Como se ve creo los objetos que luego los uso en diferentes botones. Esto en win32 funciona perfecto pero en android da error class segmentation faul (11).

type
TProd = class(TObject)
private
{ Private declarations }
fnro :integer;
fdenomina :string;
fSector :integer;
public
{ Public declarations }
property nro :integer read fnro write fnro ;
property denomina :string read fdenomina write fdenomina ;
property sector :integer read fsector write fsector ;

constructor Create;
end;

//...

oProd:TProd;
Prod:Tlist.create;


//Crea los objetos
//....

oProd:= TProd.Create;
oProd.Nro:= query.FieldByName('nro').Asinteger;
oProd.denomina:= query.FieldByName('denomina').AsString;
oProd.sector:= dquery.FieldByName('sector').Asinteger;
Prod.add(oProd);

//Asisnar datos de botones con algunos obejtos
//....



procedure TfrmMain.btnProd(Sender: TObject);
var
t:integer;
begin

// Aqui da error class segmentation faul(11). ?????
Prod_actual:= TProd(prod[Tcomponent(sender).Tag -1]).denomina;

Ñuño Martínez
07-05-2014, 14:22:26
Pues la respuesta es simple y compleja a la vez.

Bien el elemento prod[Tcomponent(sender).Tag -1] no existe, o bien este elemento no es de tipo TProd.

Personalmente te recomiendo que crees una clase contenedora de elementos que use un TList, en lugar de usar directamente TList. Te quitará muchos problemas.

dfarias
07-05-2014, 15:04:08
Pues como comento en el mensaje esto funciona perfectamente si lo compilo en win32 con lo cual no es problema que no exista o no sea del mismo tipo de elemento.

Ñuño Martínez
07-05-2014, 19:57:27
Tienes toda la razón, la verdad es que ahora me siento bastante tonto. Lo siento. :o

[Estoy criando una gripe de caballo. Creo que esta mañana ya empezaba a pulular, pero hasta ahora no me he dado cuenta]