TListBox的item项的Data关联及调用

I have one record type. I want to add the variable of that record type in TListbox and retrieve it on click event of TListbox. Is it possible? If yes then how?

I added it using

lstbox.AddItem(data,myrec);

It shows error of incompatible types. data is string and myrec is variable of MyRecord which I have created.

For adding:

New(fptr1);
ZeroMemory(fptr1,sizeof(fptr1^));
fptr1^ := fptr^;
lstboxLeft.AddItem(path,TObject(fptr1));

For retrieve:

fptr := PData(lstboxLeft.Items[lstboxLeft.ItemIndex]);

ANSWER:

AddItem takes a TObject as the second parameter and a record is not an object. You could either make your record a TObject instead (usually the best solution) or cast the record to an object.

Here is a working example using records:

type
  PMyRec = ^TMyRec;
  TMyRec = record
    I : integer;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  P : PMyRec;
begin
  New(P);
  P.I := 42;
  ListBox1.AddItem('One',TObject(P));
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  I : integer;
begin
  //Free memory
  for I := 0 to ListBox1.Items.Count - 1 do
    Dispose(PMyRec(ListBox1.Items.Objects[I]));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  P : PMyRec;
begin
  P := PMyRec(ListBox1.Items.Objects[ ListBox1.ItemIndex ]);
  ShowMessage( IntToStr(P.I) );
end;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值