如何将记录与TListBox项关联?

时间:2010-08-03 08:48:28

标签: delphi listbox

我有一种记录类型。我想在TListbox中添加该记录类型的变量,并在TListbox的click事件中检索它。可能吗?如果是,那怎么样?

我使用

添加了它
lstbox.AddItem(data,myrec);

显示不兼容类型的错误。 data是字符串,myrec是我创建的MyRecord的变量。

添加:

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

用于检索:

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

2 个答案:

答案 0 :(得分:12)

AddItem将TObject作为第二个参数,而记录不是对象。您可以将记录改为TObject(通常是最佳解决方案),也可以将记录转换为对象。

以下是使用记录的工作示例:

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;

答案 1 :(得分:3)

Type    
  PMyrec = ^MyRecord;
var
  MyRec : PMyRec;  
begin
  new(MyRec);
  //fill MyRec 
  lstbox.AddItem(data, TObject(myrec));

  //Dispose