Вниз
Скачать: 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.48 MB
Время: 0.014 c
15-1189177104
AZIZE
2007-09-07 18:58
2007.10.07
Просто жуть


1-1185116122
Al_delta
2007-07-22 18:55
2007.10.07
TreeView: неправильно создаются дочерние узлы. Помогите!


2-1189110521
LowFooo
2007-09-07 00:28
2007.10.07
TList вопрос.


1-1185554019
Ice-T
2007-07-27 20:33
2007.10.07
Беда OPenDialog а


3-1180604459
Тфьу
2007-05-31 13:40
2007.10.07
Не происходит RefreshRecord в Oracle




   Наверх