Главная страница
    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.047 c
1-1185554019
Ice-T
2007-07-27 20:33
2007.10.07
Беда OPenDialog а


15-1189092894
Floppy
2007-09-06 19:34
2007.10.07
Создание ярлыка


3-1180603628
salexn
2007-05-31 13:27
2007.10.07
SQL Parser


1-1183370769
Krants
2007-07-02 14:06
2007.10.07
ToolsApi в своих приложениях


2-1189425493
Romm
2007-09-10 15:58
2007.10.07
Имя файла





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский