![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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;