[Delphi & Android] Problema para percorrer TList em Firemonkey Mobile

16/12/2014

0

[TList em firemonkey mobile]

Pessoal, estou com um problema aqui já faz algum tempo.
Não consigo trabalhar com TList em firemonkey mobile, em específico até então testado "Android".
Se eu compilo para Win32 funciona perfeitamente.

O que quero fazer é bem simples.
Criar uma lista de ponteiros ligados a objetos de produtos.

O erro acontece quando tento executar o procedimento de carregar a lista para dentro do memo, algo simples, percorro a lista e vou carregando o memo.

// -------------------------------------------------------------------------------------------
// Objeto responsável para armazenar informações dos produtos
// -------------------------------------------------------------------------------------------
TModelProd = class
private
FPRECO: Double;
FDESCRICAO: String;
FCODPROD: Integer;
procedure SetCODPROD(const Value: Integer);
procedure SetDESCRICAO(const Value: String);
procedure SetPRECO(const Value: Double);
{ private declarations }
protected
{ protected declarations }
public
{ public declarations }
property CODPROD: Integer read FCODPROD write SetCODPROD;
property DESCRICAO: String read FDESCRICAO write SetDESCRICAO;
property PRECO: Double read FPRECO write SetPRECO;
published
{ published declarations }
end;
// -------------------------------------------------------------------------------------------

Tenho FListProd: TList;
Quero criar o ModelProd na memória e armazenar na lista.
Exemplo: FListProd.Add(ModelProd);

Abaixo segue o código utilizado.

// -------------------------------------------------------------------------------------------
unit uFrmPrincipal;

interface

uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.Layouts, FMX.Memo, uModelProd;

type
TFrmPrincipal = class(TForm)
btnCriarLista: TButton;
Memo1: TMemo;
Panel1: TPanel;
btnCriarProd: TButton;
btnCarregarMemo: TButton;
procedure btnCriarListaClick(Sender: TObject);
procedure btnCriarProdClick(Sender: TObject);
procedure btnCarregarMemoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FListProd: TList;
public
{ Public declarations }
end;

var
FrmPrincipal: TFrmPrincipal;

implementation

{$R *.fmx}

procedure TFrmPrincipal.btnCriarListaClick(Sender: TObject);
begin
if not Assigned(FListProd) then
FListProd := TList.Create;

btnCriarProd.Visible := True;
end;

procedure TFrmPrincipal.btnCriarProdClick(Sender: TObject);
Var
ModelProd: TModelProd;
iCodProd: Integer;
begin
// 1º ITEM
Inc(iCodProd);
ModelProd := TModelProd.Create;
ModelProd.CODPROD := iCodProd;
ModelProd.DESCRICAO := IntToStr(iCodProd) + '-TESTE';
ModelProd.PRECO := 20;
FListProd.Add(ModelProd);

// 2º ITEM
Inc(iCodProd);
ModelProd := TModelProd.Create;
ModelProd.CODPROD := iCodProd;
ModelProd.DESCRICAO := IntToStr(iCodProd) + '-TESTE';
ModelProd.PRECO := 20;
FListProd.Add(ModelProd);

// 3º ITEM
Inc(iCodProd);
ModelProd := TModelProd.Create;
ModelProd.CODPROD := iCodProd;
ModelProd.DESCRICAO := IntToStr(iCodProd) + '-TESTE';
ModelProd.PRECO := 20;
FListProd.Add(ModelProd);

// 4º ITEM
Inc(iCodProd);
ModelProd := TModelProd.Create;
ModelProd.CODPROD := iCodProd;
ModelProd.DESCRICAO := IntToStr(iCodProd) + '-TESTE';
ModelProd.PRECO := 20;
FListProd.Add(ModelProd);

// 5º ITEM
Inc(iCodProd);
ModelProd := TModelProd.Create;
ModelProd.CODPROD := iCodProd;
ModelProd.DESCRICAO := IntToStr(iCodProd) + '-TESTE';
ModelProd.PRECO := 20;
FListProd.Add(ModelProd);

btnCarregarMemo.Visible := True;
end;

procedure TFrmPrincipal.FormCreate(Sender: TObject);
begin
btnCriarLista.Visible := True;
btnCriarProd.Visible := False;
btnCarregarMemo.Visible := False;
end;

// O ERRO ACONTECE AQUI!!!
procedure TFrmPrincipal.btnCarregarMemoClick(Sender: TObject);
var
I: Integer;
begin
Memo1.Lines.Clear;
for I := 0 to FListProd.Count-1 do
Begin
Memo1.Lines.Add(TModelProd(FListProd.Items[i]).DESCRICAO);
End;
end;

end.
// -------------------------------------------------------------------------------------------

Link do codigo fonte: https://mega.co.nz/#!vldxhI7a!YL7_xGVjEfB8z2kvtRktij3sDj3uUrYBPXmtAvVsg0o
Ficaria muito grato se alguém pudesse me ajudar.
Obrigado
Leonam Lima

Leonam Lima

Responder

Posts

17/12/2014

Leonam Lima

Resolvi o problema utilizando System.Generics e não System.Classes.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar