Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Вниз

Скрыть определённые строки в ComboBox   Найти похожие ветки 

 
Jungle   (2008-10-03 08:15) [0]

Есть ли способ (помимо разработки собственного контрола) скрыть определённые строки в выпадающем списке ComboBox"а?
Это нужно для того, чтобы сохранились индексы элементов.

Т.е. если у меня есть список
111 // индекс 0
222 // индекс 1
333 // индекс 2

и я скрою 2-ю строку, то в выпадающем списке отобразится
111 // индекс 0
333 // индекс 2

При этом у элемента 333 индекс будет 2, а не 1


 
Сергей М. ©   (2008-10-03 08:39) [1]

Нет такого способа.
А собссно зачем это может понадобиться ?


 
Jungle   (2008-10-03 09:41) [2]


> А собссно зачем это может понадобиться ?

Допустим, есть несколько переменных типа TStrings с привязанными объектами, которые не изменяется в ходе работы. Индексы элементов в комбо-боксе должны соответствовать индексам в этих TStrings"ах, но при этом часть из элементов в комбо-боксе должна быть скрыта.
Соответственно, самым простым решением было бы просто сделать эти "ненужные" элементы скрытыми.


 
Сергей М. ©   (2008-10-03 09:50) [3]


> Индексы элементов в комбо-боксе должны соответствовать индексам
> в этих TStrings"ах


А разве что-то мешает хранить индексы элементов стринглистов в списке ComboBox.Items.Objects[] ?


 
Сергей М. ©   (2008-10-03 10:05) [4]

В конце-концов можно при событии OnDropDown удалять из списка ComboBox.Items те элементы, которые не должны фигурировать в выпадающем списке, а при событии OnCloseUp вставлять их на место. Св-во ComboBox.ItemIndex, если оно не равно -1 при вставках будет автоматически корректироваться самим компонентом.

ПРимер:

procedure TForm1.ComboBox1DropDown(Sender: TObject);
begin
 ComboBox1.Items.Delete(1);
end;

procedure TForm1.ComboBox1CloseUp(Sender: TObject);
begin
 ComboBox1.Items.Insert(1, "222");
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 showmessage(inttostr(ComboBox1.ItemIndex));
end;


 
Jungle   (2008-10-03 10:57) [5]

В 1-м варианте придётся держать (или динамически изменять) список объектов для индексов, во 2-м нужно формировать список исключаемых элементов.

2-й способ похуже, т.к. будут выполняться по 2 действия при каждом выборе, а в 1-м способе - единожды при формировании списка элементов.

Но меня интересовала возможность именно скрыть элементы. Как в меню. Например, послав некое сообщение контролу (что-нибудь вроде CB_SETITEMVISIBLE). Раскопки мсдн"а ничего не дали. Ну что ж - нельзя так нельзя.

В любом случае благодарю за конструктивные ответы :)


 
Сергей М. ©   (2008-10-03 11:11) [6]


> что-нибудь вроде CB_SETITEMVISIBLE


Тогда может быть стоит присмотреться к CB_SETITEMHEIGHT ?


 
{RASkov} ©   (2008-10-03 12:01) [7]

> Тогда может быть стоит присмотреться к CB_SETITEMHEIGHT ?

Некрасиво получается... :) Только что попробывал ComboBox1MeasureItem....
Например с клавиатуры можно выбрать итем, у которого высота=0...


 
KSergey ©   (2008-10-03 12:38) [8]

В общем счастья нет.
Только если не связывать буквально TStrings где хранится и TBomboBox.
Есть анальный способ хранить данные в каком-нибудь Memory DataSet, использовать какой-нибудь TDBComboBox и фильтровать по необходимости записи для выбора.


 
Сергей М. ©   (2008-10-03 12:38) [9]


> {RASkov} ©   (03.10.08 12:01) [7]


Ну тады остается только [3] и/или [4]


 
Сергей М. ©   (2008-10-03 12:41) [10]


> Есть анальный способ


Не такой уж он и анальный)
Если решать задачу с нуля, то такая организация вроде бы даже очевиднее и прямее/изящнее/удобнее



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.006 c
2-1253197239
d@vinchi
2009-09-17 18:20
2009.11.08
Обновление данных в DbGrid в реальном времени?


2-1253670540
Время
2009-09-23 05:49
2009.11.08
подсчет времени


15-1252331396
картман
2009-09-07 17:49
2009.11.08
Словоформы


15-1252592316
DimDim
2009-09-10 18:18
2009.11.08
Касперский блокирует процесс


2-1253175802
Роман
2009-09-17 12:23
2009.11.08
как связать таблице по ключевому полю средсвами делфи





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