Nichka |
Отправлено: 20.01.2005, 18:28 |
|
Не зарегистрирован
|
Столкнулся с такой проблемой у TDBLookupComboBox:
В списке DropDown есть строки длиннее значения свойства DropDownWidth (по умолчанию 0) и эти строки естественно не читаются.
Как лучше сделать так чтобы они были видны?
Придумал несколько вариантов:
1. Самый тупой. Поставить наиболее вероятное значение DropDownWidth.
Недостаток: возможно все-таки появятся строки длиннее заданного значения, а возможно наоборот, будет некрасивое пустое пространство.
2. Во время открытия списка (OnDropDown) проглядеть все значения нужного поля в таблице, выбрать максимальную длинну и присвоить ее DropDownWidth.
Замечу, что свойства Items нет у TDBLookupComboBox, поэтому надо глядеть значения именно из таблицы.
А не будет ли это сильно тормозить?
3. Можно усовершенствовать второй вариант и изначально значение DropDownWidth определить после открытия таблицы и в дальнейшем следить за изменениями в таблице.
Если много DBLookupComboBox связанных с разными таблицами, то сильно возможно захламит код.
Эти варианты лего реализуются, но имеют свои недостатки.
Может есть какие другие гениальные решения?
Еще хотелось бы узнать:
Возможно ли сделать так, чтобы пользователь сам мог менять размер выпадающего листа (примерно так же как это делается со столбцами в TDBGrid)?
И возможно сделать так, чтобы при наведении курсора на какую-либо запись в выпадающем листе, если эта запись видна не полностью, то возникал бы Hint с этой полной строкой? |
|
olegenty |
Отправлено: 21.01.2005, 08:02 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
установить бы тебе EhLib, проблемы бы все и забылись ))
|
|
xim |
Отправлено: 21.01.2005, 09:47 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 143
|
Еще вариант:
Создать новый компонент, наследуемый от TDBLookupComboBox
с методом Add:
CODE |
int __fastcall TMyDBLookupComboBox::Add(AnsiString str)
{
int len=str.Length();
if(len>DropDownWidth&&
<дополнительные условия>
/**********************************************
нужны для того, чтобы выпадающий список не вылазил
за видимую область
**********************************************/
)DropDownWidth=len;
TDBLookupComboBox::Add(str);
}
| |
|
|