Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.10.07;
Скачать: 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 вся ветка

Текущий архив: 2007.10.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
2-1189582237
Wood
2007-09-12 11:30
2007.10.07
TColorDialog.


4-1176088521
Alex_AA
2007-04-09 07:15
2007.10.07
Как определить размер монитора?


2-1189263131
Надуев Алексей
2007-09-08 18:52
2007.10.07
Поиск файлов


2-1189150890
AlexGryb
2007-09-07 11:41
2007.10.07
Панэль задач


15-1189170770
matt
2007-09-07 17:12
2007.10.07
резюме