Как связать запись с элементом TListBox? - PullRequest
4 голосов
/ 03 августа 2010

У меня один тип записи.Я хочу добавить переменную этого типа записи в TListbox и получить ее по событию click TListbox.Является ли это возможным?Если да, то как?

Я добавил его, используя

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 ]

12 голосов
/ 03 августа 2010

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;
3 голосов
/ 03 августа 2010
Type    
  PMyrec = ^MyRecord;
var
  MyRec : PMyRec;  
begin
  new(MyRec);
  //fill MyRec 
  lstbox.AddItem(data, TObject(myrec));

  //Dispose
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...