Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Desarrollo en Delphi para Android (https://www.clubdelphi.com/foros/forumdisplay.php?f=57)
-   -   Casting de component (https://www.clubdelphi.com/foros/showthread.php?t=85801)

dfarias 07-05-2014 11:23:17

Casting de component
 
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).

Código Delphi [-]
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]


La franja horaria es GMT +2. Ahora son las 22:17:17.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi