Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox c 2 колонками 
:(
    Опции темы
Неопытный
Дата 18.12.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

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



Подскажите пожалуйста:
Необходим компонент типа ComboBox, но такой, чтобы в нем было 2 колонки.
1 колонка информационная, другая скрытая и содежит некоторый ключ.
Может и ComboBox можно заточить ...
PM MAIL   Вверх
Matematik
Дата 18.12.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1027
Регистрация: 11.3.2006

Репутация: 17
Всего: 50



Я обычно пользуюсь 2-мя вариантами
1. ComboBox1.AddItem и доступ к объекту через ComboBox.Items.Objects[]
2. Создаю какой-нибудь список (динамический массив) индексы которого соответствуют итемам ComboBox
PM MAIL WWW ICQ   Вверх
Sansa
Дата 18.12.2006, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Используй функцию ComboBox Items.AddObject().
 
Код

type
  TMyDescriptor = record
    Caption: string;
    ID: {ну скажем} Cardinal;
  end;


...
...

procedure SomeAction();
var
  cb: TComboBox;
  myDesc: TMyDescriptor;
  selectedID: cardinal;
begin
   myDesc.Caption := 'item1';
   myDesc.ID:= 234123;
   cb:= TCombobox.Create(nil);
   cb.items.AddObject(myDesc.Caption, myDesc);
  // получение ID по номеру выбранного элемента
   selectedID:= TMyDescriptor(cb.Items.Objects[cb.SelectedItem]).ID;
end;



...
...


Это сообщение отредактировал(а) Sansa - 18.12.2006, 16:29
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
Неопытный
Дата 18.12.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 84
Регистрация: 21.11.2006

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



Спасибо, попробую!
PM MAIL   Вверх
Rennigth
Дата 18.12.2006, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Sansa, а кто будет память выделять под record? да и  компилятор не воспримет такую запись
Цитата(Sansa @  18.12.2006,  16:28 Найти цитируемый пост)
cb.items.AddObject(myDesc.Caption, myDesc);

без приведения типов  smile 



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Sansa
Дата 18.12.2006, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 18.10.2006
Где: Королев

Репутация: 3
Всего: 6



Rennigth, виноват, исправлюсь. 
Код

type
  TMyDescriptor = record
    Caption: string;
    ID: {ну скажем} Cardinal;
  end;

  PMyDescriptor = ^TMyDescriptor;

procedure SomeAction();
var
  cb: TComboBox;
  myDesc: PMyDescriptor;
  selectedID: cardinal;
begin
   New(myDesc);
   myDesc^.Caption := 'item1';
   myDesc^.ID:= 234123;
   cb:= TCombobox.Create(nil);
   cb.items.AddObject(myDesc.Caption, Pointer(myDesc));
  // получение ID по номеру выбранного элемента
   selectedID:= PMyDescriptor(cb.Items.Objects[cb.ItemIndex])^.ID;
end;



Это сообщение отредактировал(а) Sansa - 18.12.2006, 16:54
--------------------
- Здравствуйте, я Ваш патологоанатом
PM MAIL ICQ   Вверх
x77
Дата 18.12.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 19
Всего: 22



есть ещё один вариант. в комбобокс добавлять строки в виде 

Код
ComboBox1.Items.Add ('Name=Value');


и перехватывать отрисовку:

Код
procedure TForm2.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  ComboBox1.Canvas.TextRect(Rect, Rect.LEft, Rect.Top, ComboBox1.Items.Names [Index]);
end;


т.е. пользователю будет показываться только первая часть строки, до знака "=". а вытащить значение можно по

Код
ComboBox1.Items.ValueFromIndex [ComboBox1.ItemIndex];
.

если строка гарантированна не содержит знаков равно - самый простой вариант.



--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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