Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.042 c
2-1189342976
lllll00
2007-09-09 17:02
2007.10.07
в чем ошибка


15-1187848276
AZIZE
2007-08-23 09:51
2007.10.07
И снова о кино


8-1167315725
KOSS
2006-12-28 17:22
2007.10.07
JPEG to BMP


15-1189175731
Верующий
2007-09-07 18:35
2007.10.07
Что будет без ИНН?


2-1189529913
Black_Tomcat
2007-09-11 20:58
2007.10.07
Через ScrollBar.Hadle изменить позицию ScrollBar.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский