C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Поле-список, Раскрывается список при вводе
Pan-SQL
Отправлено: 11.05.2005, 18:13


Не зарегистрирован







Здравствуйте уважаемые участники форума. У меня возник такой вопрос: можно ли в C++Buillder реализовать поле с раскрывающимся списком, т.е. при вводе какого либо значения в поле раскрывается список ранее введенных значений, если произошло совпадение первых букв или цифр (как в Яндексе или Рамблере). заранее благодарю!
Rius
Отправлено: 11.05.2005, 18:50


Мастер участка

Группа: Участник
Сообщений: 321



Это не в яндексе и рамблере, а в интернет-обозревателе, называется MRU List (Most Recently Used)
Если "поле с раскрывающимся списком" — от базы данных, то такое есть в EhLib. Если просто — тогда вместо Edit использовать ComboBox, список которого заполнять ранее введенными значениями. Ввел новое и запомнил в файле или в реестре, перед вводом следующий раз — считывать список обратно. А выпадение можно задать свойствами или программно.
Pan-SQL
Отправлено: 11.05.2005, 19:01


Не зарегистрирован







Дело в том, что список должен выглядеть как поле, т.е. без стрелкии справа.
Rius
Отправлено: 12.05.2005, 14:33


Мастер участка

Группа: Участник
Сообщений: 321



Для базы данных или нет?
http://delphiworld.by.ru/base/create_combo...bo_control.html
Sl@Sh
Отправлено: 12.05.2005, 16:12


Мастер участка

Группа: Участник
Сообщений: 383



Для этого вполне пригоден TComboBox.
Выполнять проверку нужно в событии OnChange. В этой самой проверке можно конечно сверять подстроки (методом SubString), но это гораздо медленнее,чем например сверять посимвольно.

Чисто теоретически можно так — создать массив символов. Элементов в массиве столько, сколько значений в ComboBox. При вводе нового символа, вы должны считывать в ваш масив все символы из списка по номеру вводимого символа. В этом случае процесс пойдёт быстрее.

P.S.: Извините за чисто теоретический ответ. Если что не понятно я попробую объяснить. Удачи !
Влад
Отправлено: 13.05.2005, 11:24


Не зарегистрирован







А нет ли готового компонента от сторонних производителей, решающего этот вопрос?
Rius
Отправлено: 13.05.2005, 13:12


Мастер участка

Группа: Участник
Сообщений: 321



Алёёё....
Компоненты EhLib, конкретно например TDBEditEh. Может работать и без подключения к базе данных, как обычный TEdit, только с выпадающим список MRUList
Sl@Sh
Отправлено: 13.05.2005, 16:19


Мастер участка

Группа: Участник
Сообщений: 383



Я тут так подумал, а вам обязательно чтобы список выпадал или нужно чтобы автоматом слово подбиралось ? ComboBox ведь такое может. От стрелки тоже можно избавиться (см. свойство Style)
Pan-SQL
Отправлено: 16.05.2005, 12:08


Не зарегистрирован







Именно так, чтобы список выпадал.
** Rius
Отправлено: 16.05.2005, 13:24


Не зарегистрирован







Pan-SQL Такое что ли?
user posted image
Sl@Sh
Отправлено: 16.05.2005, 16:08


Мастер участка

Группа: Участник
Сообщений: 383



Не по теме : Где такую кнопочку взяли ? Какой компонент ? Скажите если можно smile.gif
** Rius
Отправлено: 16.05.2005, 19:46


Не зарегистрирован







Именно это — обычная кнопка, в винде включен стиль Longhorn Aero — Aero Plex, из Longhorn Transformation Pack 8.
Посмотри ещё здесь
Pan-SQL
Отправлено: 18.05.2005, 07:04


Не зарегистрирован







Да! именно то, что мне нужно. Подскажите, как это реализовать
GIZMO
Отправлено: 18.05.2005, 09:31


Машинист паровоза

Группа: Участник
Сообщений: 174



QUOTE (Pan-SQL @ 18/05/2005, 07:04)
Да! именно то, что мне нужно. Подскажите, как это реализовать

1. Кинуть на форму TEdit
2. Создать программно TListBox
3. У ListBox установить:
а) стили окна WS_BORDER | WS_EX_PALETTEWINDOW;//SetWindowLong
б) стиль класса окна CS_SAVEBITS; //SetWindowWord
в) WindowParent = GetDesktopWindow();
г) Visible = false;
4. Обработать OnMouseMove и OnMouseUp у ListBox, чтобы подсветить и выбирать елементы при перемещении и нажатии мыши.
5. Обработать OnChange у Edit — здесь ищем в ListBox строки если есть, то отображаем его и подсвечиваем строку.
6 . При отображенном ListBox нужно перенаправить нажатие стрелок вверх, вниз в ListBox//SendMessage
7. Спрятать список если:
а) в Edit пришло WM_KILLFOCUS
б) в Edit пришло VK_RETURN
в) в Форму пришло WM_NCLBUTTONDOWN
Guest
Отправлено: 18.05.2005, 11:35


Не зарегистрирован







QUOTE (Pan-SQL @ 18/05/2005, 07:04)
Да! именно то, что мне нужно. Подскажите, как это реализовать

user posted image Это кем же надо быть!....
QUOTE
Это не в яндексе и рамблере, а в интернет-обозревателе, называется MRU List (Most Recently Used)
Если "поле с раскрывающимся списком" — от базы данных, то такое есть в EhLib. Если просто — тогда вместо Edit использовать ComboBox, список которого заполнять ранее введенными значениями. Ввел новое и запомнил в файле или в реестре, перед вводом следующий раз — считывать список обратно. А выпадение можно задать свойствами или программно.

QUOTE
Алёёё....
Компоненты EhLib, конкретно например TDBEditEh. Может работать и без подключения к базе данных, как обычный TEdit, только с выпадающим список MRUList


если до сих пор не понятно, это компонент TDBEditEh из пакета EhLib

GIZMO у этого списка размер изменяется как в обозревателях.
Pan-SQL
Отправлено: 18.05.2005, 11:47


Не зарегистрирован







Компонент я нашел, только как его скачать и установить?
** Rius
Отправлено: 18.05.2005, 12:35


Не зарегистрирован







А нашел бы, если б я не дал ссылку на сайт?
Зайди в русский раздела сайта EhLib и смотри раздел загрузки, там все по-русски написано (сегодня только смотрел). Когда скачаешь, в архиве лежит инструкция по установке.
Засим умываю руки, которые при виде такой несамостоятельности просто опускаются.
Pan-SQL
Отправлено: 18.05.2005, 13:13


Не зарегистрирован







Библиотеку я установил. Работает. Только какой копмонент лучше использовать. Компонент должен работать от базы данных
Sl@Sh
Отправлено: 18.05.2005, 13:48


Мастер участка

Группа: Участник
Сообщений: 383



Из раздела загрузок : EhLib 3.6 Evaluation Version (works only within IDE) archive for D4-D9, BCB4-BCB6.

У вас кряк есть ?
Guest
Отправлено: 18.05.2005, 14:15


Не зарегистрирован







Да какой кряк, он же бесплатный user posted image
Зайдите наконец на официальный сайт, в русский раздел
Sl@Sh
Отправлено: 18.05.2005, 17:33


Мастер участка

Группа: Участник
Сообщений: 383



Спокойно Guest (он же Rius smile.gif ). Мне этот компонент не нужен, я поэтому сайт не рассматривал, а заглянул только в англ. downloads. Там естественно не написано про 2-й месяц.
Лена
Отправлено: 19.05.2005, 08:50


Не зарегистрирован







>EhLib 3.6 Evaluation Version (works only within IDE) archive for D4-D9, BCB4-BCB6

У меня этот архив скачивается с ошибками.

Скачала архив ниже — EhLib 3.6 Evaluation Setup for C++ Builder 6. Все установилось, без требования паролей.

Скажите нет функциональной разницы для С++ Builder 6?
olegenty
Отправлено: 19.05.2005, 08:52


Ветеран

Группа: Модератор
Сообщений: 2412



http://ehlib.com/RUS/ehlibrus.exe — для тех, кто хочет пользоваться полнофункциональной бесплатной для русских версией. (ну как дети).
Лена
Отправлено: 19.05.2005, 09:15


Не зарегистрирован







Я поэтому и вопрос задала что по указанной ссылке у меня скачивается всего 710 кв и выдает сообщение об ошибке при разархивации. Не знаю в чем дело, может наш сервер на работе, может что еще.
Поэтому я и скачала версию ниже EhLib 3.6 Evaluation Setup for C++ Builder 6. Она скачалась без проблем. Так будет функциональная разница между EhLib 3.6 Evaluation Setup for C++ Builder 6 и EhLib 3.6 Evaluation Version (works only within IDE) archive for D4-D9, BCB4-BCB6
которую мне не удается скачать?
olegenty
Отправлено: 19.05.2005, 09:22


Ветеран

Группа: Модератор
Сообщений: 2412



как и написано, работать будет только при запущенном C++Builder/Delphi
Лена
Отправлено: 19.05.2005, 11:28


Не зарегистрирован







Спасибо!
Pan-SQL
Отправлено: 19.05.2005, 12:39


Не зарегистрирован







Так какой компонент мне лучше всего использовать? Я пробовал DBEditEh, при вводе список не выпадает.

P.S.

Этот сайт посвящен C++Builder. Зачем умопинать Delphi?
Rius
Отправлено: 19.05.2005, 14:33


Мастер участка

Группа: Участник
Сообщений: 321



QUOTE
Я пробовал DBEditEh, при вводе список не выпадает.
поздравляю! хоть поставил...
смотри свойство MRUList, список называется Items, разрешение выпадания — Active. Значения, которые будут выпадать при вводе добавляются программно в Items (Работает аналогично Memo->Lines, т.е. является объектом TStringList).

Delphi и C++ Builder очень близкие системы, а из всей инфы по ним обеим 90% приходится на Delphi. Перевод из одного в другое обычно вполне простой.
Лена
Отправлено: 20.05.2005, 10:06


Не зарегистрирован







Товарищи, если кому не тяжело скинте мне на email файл по адресу http://ehlib.com/RUS/ehlibrus.exe ну не хочет он скачиваться в полном объеме у меня.
Email vmyletterbox@yandex.ru
Заранее спасибо.
Gedeon
Отправлено: 20.05.2005, 10:22


Ветеран

Группа: Модератор
Сообщений: 1742



Отмылил

Вернуться в Вопросы программирования в C++Builder