Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ListView +AddItem


swapfilea ©   (2007-09-11 16:24:00) 

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

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

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

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

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


новичёк   (2007-09-11 20:53:00) [1]


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


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


Плохиш   (2007-09-11 18:47:00) [2]


> Что не так?

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


paveltersh   (2007-09-11 18:18:00) [3]

Сделал я так:

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


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


DVM   (2007-09-11 16:38:00) [4]


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

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


{RASkov}   (2007-09-11 16:38:00) [5]

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

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


DVM   (2007-09-11 16:36:00) [6]


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

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

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


swapfilea   (2007-09-11 16:36:00) [7]


> OnDeletion

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


swapfilea   (2007-09-11 16:35:00) [8]

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


DVM   (2007-09-11 16:35:00) [9]


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

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


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


{RASkov}   (2007-09-11 16:33:00) [10]

> потомуч-то

:)
потому что


swapfilea   (2007-09-11 16:33:00) [11]

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


{RASkov}   (2007-09-11 16:32:00) [12]

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

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


DVM   (2007-09-11 16:31:00) [13]

У каждого 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо