Вниз
Скачать: CL | DM;

ListView +AddItem   Найти похожие ветки 

← →
swapfilea   (2007-09-11 16:24) [0]

Как добавить к ListView, кроме текста другую инофрмацию например так передать числовое значение:

ListView1.AddItem(MyConstName, TObject(10));

А что делать если я хочу добавить вместо 10, запись
TRec = record
 i: Integer;
 z: string;
...
end;

ListView1.AddItem(MyConstName, TObject(MyTRecVar));

Так не работает, что можно сделать?


← →
DVM ©   (2007-09-11 16:31) [1]

У каждого Item-a есть поле Data в него можно положить указатель на заранее созданный объект.

В твоем случае, как то так:

PRec = ^TRec;
TRec = record
i: Integer;
z: string;
...
end;

var
 p: PRec;
...
 p := New(PRec);
 with ListView.Items.Add do
   begin
     ...
     Data := Cam;
   end;


← →
{RASkov} ©   (2007-09-11 16:32) [2]

> [0] swapfilea   (11.09.07 16:24)
> А что делать если я хочу добавить вместо 10, запись
> TRec = record
> i: Integer;
> z: string;
> ...
> end;
>
> ListView1.AddItem(MyConstName, TObject(MyTRecVar));

Так не выйдет, потомуч-то более 4-х байт туа нельзя....
Есть два варианта:
Либо указатели
либо TRec оформить классом.


← →
{RASkov} ©   (2007-09-11 16:33) [3]

> потомуч-то

:)
потому что


← →
swapfilea   (2007-09-11 16:33) [4]

А как потом память освобождать? Просто у меня в цикле формируется список для ListView.


← →
swapfilea   (2007-09-11 16:35) [5]

А что лучше указатели или класс? Что меньше памяти скушает?


← →
DVM ©   (2007-09-11 16:35) [6]


> А как потом память освобождать?

у ListView есть событие OnDeletion:


procedure TfrmMain.ListViewDeletion(Sender: TObject; Item: TListItem);
begin
  Dispose(PRec(Item.Data));
end;


← →
DVM ©   (2007-09-11 16:36) [7]


> А что лучше указатели или класс? Что меньше памяти скушает?

А что лучше Windows или Pentium ?

Тебе, думаю, указателей на записи хватит.


← →
swapfilea   (2007-09-11 16:36) [8]


> OnDeletion

Брр.. а когда оно вызывается, когда я сделаю Clear?


← →
DVM ©   (2007-09-11 16:38) [9]


> когда я сделаю Clear?

Или когда удаляешь Item.


← →
{RASkov} ©   (2007-09-11 16:38) [10]

> [5] swapfilea   (11.09.07 16:35)
> А что лучше указатели или класс? Что меньше памяти скушает?

Одинаково... так как переменная класса по сути - указатель.


← →
paveltersh   (2007-09-11 18:18) [11]

Сделал я так:

procedure TfrmMain.ListViewDeletion(Sender: TObject; Item: TListItem);
begin
 if Item.Data <> nil then
   Dispose(PRec(Item.Data));
end;


Но при Clear вышибает ошибка Invalid Pointer Operation. Что не так?


← →
Плохиш ©   (2007-09-11 18:47) [12]


> Что не так?

Data не у всех Item-ом инициализируешь.


← →
новичёк   (2007-09-11 20:53) [13]


> > [5] swapfilea   (11.09.07 16:35)
> > А что лучше указатели или класс? Что меньше памяти скушает?
>
>
> Одинаково... так как переменная класса по сути - указатель.
>
>


и правда... 4 байта в обоих случаях :-D



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
8-1167250641
crasher
2006-12-27 23:17
2007.10.07
Слежение за объектом через веб-камеру


2-1187963777
__DATA__
2007-08-24 17:56
2007.10.07
Отлов динамической ошибки по адресу 0х...


3-1180855837
npu3pak_kz
2007-06-03 11:30
2007.10.07
Копирование/перемещение строк в таблице MS Access


15-1188999922
Галинка
2007-09-05 17:45
2007.10.07
Прикол в Эклипсе


11-1169888280
Моторокер
2007-01-27 11:58
2007.10.07
Форма и DLL. Архиваторный плагин




   Наверх