TListBox的item项的Data关联及调用

来源:互联网 发布:mac队武器纪念馆 编辑:程序博客网 时间:2024/05/15 02:14

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;


0 0
原创粉丝点击