Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TListView, объект с уникальным свойством нарисован, на компоненте. Как взять из контейнера? 
:(
    Опции темы
np9mi7
  Дата 7.7.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 1
Всего: 10



Добрый день.

У меня есть ассоцианивный контейнер с объектами некоторого типа. У этих объектов есть уникальное свойство (оно типа - std::string, обычное строковое представление).

Эти объекты показываются пользователю через TListView (причем сами они находяться в контейнере).

Задача: зная выбранный элемент в TListView получить объект из контейнера.

Я думал как это сделать, все сводиться к одному: необходимо хранить уникальное представление объекта рядом для каждой записи TListView. Только где? Может есть некоторое свойство специально для этого?

Заранее благодарен за ответы.


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
_hunter
Дата 7.7.2005, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



есть: TListItem::Data


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
np9mi7
  Дата 7.7.2005, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 1
Всего: 10



Спасибо! Но: он void* т.о. необходимо самому управлять ресурсом, чего не хочется, а нельзя никак туда AnsiString засунуть, да так чтоб его никто не увидел?
Можно также использовать Tag, он тоже подрузамевает указатель, не хочеться указателей...


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
_hunter
Дата 7.7.2005, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



ну вопервых Tag' a у него нет...
а во вторых ресурсами управлять всеравно тебе придется -- для экономии памяти никто не будет держать копию объекта
+ засунь туда указатель на строку, приведенный к void*а забирая назад приводи к указателю на строку
++ где-то эти данные у тебя храняться? какая-то адресация есть. вот и засовывай этот _адрес_


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
np9mi7
  Дата 7.7.2005, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 1
Всего: 10



Цитата
ну вопервых Tag' a у него нет...
, ошибка вышла (не там в справке посмотрел, странно почему нет?);
Цитата
а во вторых ресурсами управлять всеравно тебе придется
, я ими управляю, только не в TListView, а специальным объектом;

Я придумал как хранить строку, чтоб её никто не видел:
Код

  const char Names[6][2][10] =
   {{"Rubble","Barny"},
    {"Michael", "Johnson"},
    {"Bunny", "Bugs"},
    {"Silver", "HiHo"},
    {"Simpson", "Bart"},
    {"Squirrel", "Rocky"}};

  TListColumn  *NewColumn;
  TListItem  *ListItem;
  TListView   *ListView = new TListView(this);

  ListView->Parent = this;
  ListView->RowSelect = true;
  ListView->Align = alClient;
  ListView->ViewStyle = vsReport;
  NewColumn = ListView->Columns->Add();
  NewColumn->Caption = "Last";

  NewColumn = ListView->Columns->Add();
  NewColumn->Caption = "First";
  for (int i = 0; i < 6; i++)
  {
    ListItem = ListView->Items->Add();
    ListItem->Caption = Names[i][0];
    ListItem->SubItems->Add(Names[i][1]);

    ListItem->SubItems->Add("INVISIBLE");              // невидимая строка;

  }

Цитата
Примечание: большая часть кода из спаравки;


Теперь задача её оттуда взять. У ListItem есть свойство Text, но оно возвращает из Item - а строку с символами разделителей итд...

Короче: как взять последний из SubItems - ов, без саморучного разбора строки?


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
_hunter
Дата 7.7.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата
я ими управляю, только не в TListView, а специальным объектом;

никто и не заставляет управлять ими в TListView' e... я же говорю -- епредавай туда _адрес_ из своего специального объекта.

Цитата
как взять последний из SubItems - ов, без саморучного разбора строки?

это:
AnsiString str = listItem->SubItems[listItem->SubItems->Count - 1];
что ли?

Это сообщение отредактировал(а) _hunter - 7.7.2005, 19:39


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
np9mi7
  Дата 8.7.2005, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 1
Всего: 10



Только так:
Код

AnsiString str = (*ListItem->SubItems)[ListItem->SubItems->Count - 1]
, да это то что мне помогло.
_hunter, спасибо!

smile - мне стыдно за незнание визуальных компонентов, нужно почитать литературу;


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
Vyacheslav
Дата 8.7.2005, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Есть более правильный способ специально предназначенный для использования данных, лежащих во внешних контейнерах.Это виртуальный список. Смотри хелп по
__property bool OwnerData = {read=FOwnerData, write=SetOwnerData, default=0};
__property TLVOwnerDataEvent OnData = {read=FOnData, write=FOnData};
__property TLVOwnerDataFindEvent OnDataFind = {read=FOnDataFind, write=FOnDataFind};
__property TLVOwnerDataStateChangeEvent OnDataStateChange = {read=FOnDataStateChange, write=FOnDataStateChange};






--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
_hunter
Дата 8.7.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



всегда пожалуйста...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
np9mi7
Дата 10.7.2005, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 553
Регистрация: 17.8.2003
Где: Volgograd, Russia

Репутация: 1
Всего: 10



Vyacheslav, отдельное спасибо


--------------------
"Я точно знаю то, что ничего не знаю..." Сократ.
evolution project
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.