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;