Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.046 c