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

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

ListView.Items.Item[n].Data присвоить ansistring


Страницы:   1 2

o_serg ©   (2006-10-09 22:35:00) 

Есть ListView мне нужно каждому его итему поставить в соответствие строку(но чтобы не отображалась в самом списке на экране). Я делаю так:
procedure...
...
name:=OpenDialog.FileName;
...
tempItem:=ListView.Items.Add;
tempItem.Data:=name;
end;

В таком случае правильно прочитать ListView.Items.Item[n].Data получается только у последнего добавленного итема, а у остальных содержимое строки затирается.
Что я делаю не так скажите пожалуйста?


Ketmar   (2006-10-10 21:50:00) [1]

а вот люблю я record'ы. %-)


zamtmn   (2006-10-10 21:47:00) [2]

убей не пойму нафиг record? это тожесамое что
r:pstring
New(r); r^ := xxx; data := Pointer(r); ... Dispose(PString(data));
ИМХО pointer(name):=nil будет практичней, при кривом использовании мемлмки теже, а память лишний раз выделять ненадо


Ketmar   (2006-10-10 21:17:00) [3]

дык уже всё сказано. New(r); r.s := xxx; data := Pointer(r); ... Dispose(PMyRecord(data)); всё. %-)


zamtmn   (2006-10-10 21:03:00) [4]

>>угу. просто в записи можно использовать строки без магии. %-)
пожалста тут поподробнее


Ketmar   (2006-10-10 20:25:00) [5]

таки где-то написано. в частности, о том, что лучше выделять память для записей через New(), а освобождать -- через Dispose(). и даже пояснено, почему. %-)


atruhin   (2006-10-10 20:09:00) [6]

Хм не знал, в хелпе не написано, спасибо посмотрю.


Ketmar   (2006-10-10 19:45:00) [7]

читаем код, созданый компилятором -- что видим? ага. call @Finalize.


Ketmar   (2006-10-10 19:45:00) [8]

>[25] zamtmn(c) 10-Oct-2006, 19:42
>какая разница что бабахать, главное чтоб это было создано
>динамически
угу. просто в записи можно использовать строки без магии. %-)


zamtmn   (2006-10-10 19:44:00) [9]

>>А с чего Dispose, стала финализировать строки записи?
а она всегда это делала (на моей памяти). и не только строки дин.массивы тоже


zamtmn   (2006-10-10 19:42:00) [10]

>>иной способ сохранить запись в Data кроме указателей?
помоему тут проблема не в Data а в локальнолй переменной name которая выходит за пределы видимости, вот я и подумал что ты ее предлагаешь в рекорд запихать, не говоришь что его нужно создать динамически
>>этого делать не стал бы. я бы вообще забабахал запись..
какая разница что бабахать, главное чтоб это было создано динамически


Ketmar   (2006-10-10 19:42:00) [11]

>[23] atruhin(c) 10-Oct-2006, 19:38
>А с чего Dispose, стала финализировать строки записи?
а с чего бы не стала?


atruhin   (2006-10-10 19:38:00) [12]

> тогда можно использовать New() и Dispose(),

А с чего Dispose, стала финализировать строки записи?


Ketmar   (2006-10-10 18:35:00) [13]

вот интересно мне: о чём ты подумал, когда я сказал про запись? ты знаешь какой-нибудь иной способ сохранить запись в Data кроме указателей?


zamtmn   (2006-10-10 18:13:00) [14]

ты погоди метлы свои впаривать
>>я бы вообще забабахал запись
нислова про указатель:). тогда уж pstring, зачем лишние типы
>>странный ты. догадаться, что я говорю об...
нискольео тебя не страннее, просто с телепат хреновый)


Ketmar   (2006-10-10 18:04:00) [15]

>[19] zamtmn(c) 10-Oct-2006, 18:01
>видимости рекорда. и если name из [0] заменить на myrecord.
>name ниче не изменится
странный ты. догадаться, что я говорю об указателена запись -- ни-ни? если это не очевидно, то -- ну, ты в курсе. метла. %-)


zamtmn   (2006-10-10 18:01:00) [16]

>>ни разу
я имею ввиду что стринговые поля рекордов также инициализируются в начале и убиваются в конце зоны видимости рекорда. и если name из [0] заменить на myrecord.name ниче не изменится
>>При грамотном использовании помогает такой код:
чему помогает?


Наиль   (2006-10-10 16:38:00) [17]

При грамотном использовании помогает такой код:
tempItem:=ListView.Items.Add;
// Сохранение
tempItem.SubItems.Add(name);
// Восстановление
s:=ListView.Items[i].SubItems[0];


Реальный код может значительно отличаться от предложеного при использовании нескольких столбцов в ListView.


Ketmar   (2006-10-10 15:09:00) [18]

>с полем record`а будет тожесамое
ни разу. тогда можно использовать New() и Dispose(), а она корректно работают со строками. то же и для классов -- конструкторы/деструкторы обрабатывают всё как надо.


zamtmn   (2006-10-10 08:38:00) [19]

>>я бы вообще забабахал запись..
с полем record`а будет тожесамое
>>а потом месяцами ловить загадочные глюки и мемлики
ну загадочного ниче не будет, а ловить можно долго, да:)


Сергей М.   (2006-10-10 08:34:00) [20]


> o_serg   (09.10.06 22:47) [2]
>
> с GetMem ясно - вделить когда создаю новый итем, а освобождать
> его как, если я использую ListView.Clear


Освобождать в обработчике TTreeView.OnDeletion:

FreeMem(Node.Data);

p.s.
Еще удобней в этом случае будет пользоваться StrNew/StrDispose вместо GetMem/FreeMem


Страницы:   1 2

Наверх

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