Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > DBComboBox |
Автор: Virus 21.6.2003, 14:39 |
Люди как работает DBComboBox или BDListBox почему он сразу не отражает данные которые прикрепленны к DataField? |
Автор: &-ray 21.6.2003, 20:29 |
DBComboBox и BDListBox сами не формируются, их надо заполнять самому. Если хочешь, чтобы списки формировались автоматически, то вместо этих компонентов используй DBLookupComboBox или DBLookupListBox |
Автор: Cashey 22.6.2003, 15:05 | ||||
Так-то оно так вот даже код который можно использовать для загрузки данных в свойство Items автоматически
Вот только хотелось бы узнать для чего созданно св-во DataField. А компоненты DBLookupComboBox и DBLookupListBox предназначены немного для другого. |
Автор: lider07 22.6.2003, 15:12 |
В практике программирования довольно часто встречается ситуация когда информация, предназначенная для отображения в имеющемся компоненте, не помещается по длине. С подобным обычно сталкиваются в работе с базами данных. В таких случая выручают всплывающие подсказки – Hint. Но, в некоторых случаях, даже такая возможность не спасает. К таким ситуациям можно отнести работу с выпадающим списком в DBComboBox. Представьте, что размер поля увеличился, а изменить ширину DBComboBox на форме, по тем или иным причина м, нет возможности. Конечно, можно увеличить ширину выпадающего списка. Но выглядит это не всегда красиво да и не делает чести разработчику. Предлагаемая идея позволит создать более изящный компонент. Взгляните на рисунок: В демонстрационном примере в выпадающем списке появляется всплывающая подсказка для строки не помещающейся по длине. При работе с Hint нужно помнить – использовать ToolTip из API, бесполезная затея. Delphi игнорирует любые попытки работы ним. Для этих целей в Delphi предусмотрен класс – THintWindow. В своем компоненте объявите FTipHint: -------------------------------------------------------------------------------- type TVSComboBox = class(TCustomComboBox) … private FHint: THintWindow; … protected procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX; и не забудьте выполнить инициализацию в конструкторе вашего компонента: -------------------------------------------------------------------------------- … begin inherited Create(AOwner); FHint := THintWindow.Create(Self); … Чтобы получить информацию об активной строке в выпадающем списке ComboBox перехватите сообщение WM_CTLCOLORLISTBOX. В процедуре сообщения анализируйте - если длина строки больше ширины выпадающего списка – передайте "длинную" строку в ваш Hint и активируй те его: -------------------------------------------------------------------------------- FHint.ActivateHint(TextRC, Items[ItemIndex]); где TextRC – прямоугольник для строки подсказки Items[ItemIndex] – "длинная" строка из выпадающего списка Если активная строка в выпадающем списке "короткая" – спрячьте Hint: -------------------------------------------------------------------------------- FHint.ReleaseHandle; Для получения подробной информации о классе THintWindow воспользуйтесь Help из Delphi. |
Автор: &-ray 22.6.2003, 16:43 | ||
Это свойство связывает данный компонент с полем связанного набора данных. При изменении item'а в компоненте, соответственно изменяется содержимое соответствующего поля в активной записи. |
Автор: Virus 24.6.2003, 15:31 | ||
Спасибо, но не мог бы ты по-подробнее рассказать об отличии этого компонента от обычного CobboBox'а |
Автор: eof 24.6.2003, 15:42 |
![]() при изменение значения DBComboBox его DataSource.DataSet переходит в режим редактирования. Зничение которое выбрано из списка присваевается DataField.NewValue, при смене записи DataSource.DataSet пытается сделать Post. Короче это как DBEdit со списком предлагаемых вариантов заполнения поля... извеняюсь, но подробнее чем &-ray врятли можно ответить |
Автор: forest 29.4.2004, 23:32 |
jib,cz |
Автор: eugenko 10.1.2006, 19:56 |
Люди хоть кто-нибудь.... хоть когда-нибудь.... доставал данные из DBComboBoxa ??? Как туда их запихнуть разжевано до мелочей... а достать?? а если еще и в переменную передать - так тогда я вообще буду премного благодарен!!! |
Автор: FRAGNATIC 10.1.2006, 20:07 |
eugenko а DBComboBox1.Text; ваще ни как? или чёт я не понял чё те надо-то конкретно? |
Автор: Guest 11.1.2006, 10:11 |
Вобщем задача следующая: есть Оракловый запрос, результат которого выводится в DBComboBox, так вот при позиционировании на какую-либо запись в комбобоксе хотелось бы чтобы строку на которой позиционируешься можно было присваивать в переменную. Вот. А я все обчитал и обыскался а как это реализовать - непойму ![]() |
Автор: eugenko 11.1.2006, 12:04 |
Разобрался!!! Надо юзаить DBLookupComboBox. Правильно настраиваем KeyField, ListField и ListSource - и будет счастье ![]() |