Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
Доброе время суток форумчане,
Вопрос:
Можно ли программно в выпадающем списке DBLookupComboBox, выделять синим (т.е. синей строкой) элемент который я вставляю в DBEdit?

procedure TFMain.dbEditChange(Sender: TObject);
begin
 
  if IBDataSet1.State in [dsInsert, dsEdit] then
  begin
    DBLookupComboBox.DropDown;
    IBDataSet2.Locate('NAME_ORGANIZATION_FULL', dbEdit.Text, [loCaseInsensitive, loPartialKey]);
 End


(где
IBDataSet1 - к нему подключен "DBLookupComboBox"
IBDataSet2 - источник данных для "DBLookupComboBox")

А то у меня при вводе в dbEdit данных, открывается список DBLookupComboBox, как раз на нужном элементе, а синей полоски (как при выделении мышкой) на элементе нет

Заранее спасибо за ответ
29 ноя 18, 03:11    [21747995]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
да, при выделении элемента списка, сам список должен оставаться открытым
29 ноя 18, 03:31    [21747998]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
vitku
Member

Откуда:
Сообщений: 61
Kos-2010,
перевести фокус на список
DBLookupComboBox.SetFocus;
29 ноя 18, 09:38    [21748072]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
vitku
Kos-2010,
перевести фокус на список
DBLookupComboBox.SetFocus;


Та уже пробовал

procedure TFMain.dbedNameFullOrganChange(Sender: TObject);
begin
  if DM.ibdsProposal.State in [dsInsert, dsEdit] then
  begin
    dblcbNameOrganizationProposal.DropDown;
    DM.ibdsClientCL.Locate('NAME_ORGANIZATION_FULL', dbedNameFullOrgan.Text, [loCaseInsensitive, loPartialKey]);
    dblcbNameOrganizationProposal.SetFocus;
  end;


Фокус переводится, но строка в DBLookupComboBox (у меня это "dblcbNameOrganizationProposal") синим цветом всеравно не выделяется (так например с TEdit работает).

Вот в "ComboBox", там все проще, например: выделение первого элемента "Combobox1.ItemIndex := 0"
29 ноя 18, 12:11    [21748365]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
да и мне нужно сделать так, чтоб курсор во время выделения элемета в списке, оставалтся в окошке DBEdit, в котором я и набираю искомое слово
29 ноя 18, 12:39    [21748415]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
vitku
Member

Откуда:
Сообщений: 61
Kos-2010,
так что-ли?

К сообщению приложен файл. Размер - 93Kb
30 ноя 18, 22:34    [21750809]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
vitku,

Да именно так. только как это сделать?
3 дек 18, 00:34    [21751693]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
vitku
Member

Откуда:
Сообщений: 61
Kos-2010
vitku,

Да именно так. только как это сделать?


Делал примерно 10 лет назад. Работает до сих пор. Помню больно хлопотно было. Да и контролы DevExpress спасли. Locate по датасету не пользовал. На ввод каждого символа посылался запрос на сервер. Оттуда возвращались нужные записи и список заполнялся. Ну нужная запись выдлелялась нужным цветом с помощью внутренних фишек cxGrid. Главное на сервере нужно создать правильно индексы для скорости выборки. Объем данных в таблицах, которые возвращают записи, не большой по нынешним меркам - примерно пол-миллиона. На клиента дергались по 9 записей. Хотя сейчас бы так не делал. На каждый чих дергать сервер - не есть хорошо.
3 дек 18, 22:22    [21752450]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Kos-2010
Member

Откуда:
Сообщений: 158
vitku
На каждый чих дергать сервер - не есть хорошо.


Да, дергать сервер каждый раз действительно не хорошо.

Ладно, пока обойдусь, без выделения, просто подводя элемент списка под нужный, изменяя DBEdit
procedure TFMain.DBEdit1Change(Sender: TObject);
begin
  if IBDataSet1.State in [dsInsert, dsEdit] then
  begin
    IBDataSet2.Locate('NAME_ORGANIZATION_FULL', DBEdit1.Text, [loCaseInsensitive, loPartialKey]);
    DBLookUpComboBox.DropDown;
  end;
end;


Потом попробую еще компонент "DBLookupComboboxEh1" из библиотеки "EhLib". Может там что-то есть подобное.
4 дек 18, 01:07    [21752493]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Док
Member

Откуда: Казань
Сообщений: 5874
Kos-2010,

MemoryDataset или кешированный датасет не предлагать?
4 дек 18, 08:36    [21752570]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Softologic
Member

Откуда: Санкт-Петербург
Сообщений: 118
Kos-2010
Потом попробую еще компонент "DBLookupComboboxEh1" из библиотеки "EhLib". Может там что-то есть подобное.

Есть то оно там есть и в теории должно работать замечательно. Однако есть один досадный глюк - несмотря на установленную опцию CaseInsensitiveTextSearch, при поиске "иванов" (предполагаем, Дмитрий), если в датасете в наличии имеется прописной "ИВАНОВ" (к примеру, Александр), то набирая строчными, вы все равно собъетесь (автоматически) на капслок и выборка будет по нему. Таким образом, никак "иванова" (Дмитрия) вы не выберете :(.
4 дек 18, 12:34    [21752777]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Softologic
Member

Откуда: Санкт-Петербург
Сообщений: 118
Причем, так это работает даже в последней версии 9.3.
4 дек 18, 12:34    [21752778]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
Softologic
Member

Откуда: Санкт-Петербург
Сообщений: 118
Softologic,

хотя... вот все таки решение проблемы - в самом датасете должна стоять опция FilterOptions - foCaseInsensitive:=True:
http://forum.ehlib.com/ru/viewtopic.php?f=4&t=2300&hilit=CaseInsensitiveTextSearch
4 дек 18, 12:55    [21752807]     Ответить | Цитировать Сообщить модератору
 Re: DBLookupComboBox программное выделение элемента в выпадающем списке  [new]
vitku
Member

Откуда:
Сообщений: 61
Softologic
Kos-2010
Потом попробую еще компонент "DBLookupComboboxEh1" из библиотеки "EhLib". Может там что-то есть подобное.

Есть то оно там есть и в теории должно работать замечательно. Однако есть один досадный глюк - несмотря на установленную опцию CaseInsensitiveTextSearch, при поиске "иванов" (предполагаем, Дмитрий), если в датасете в наличии имеется прописной "ИВАНОВ" (к примеру, Александр), то набирая строчными, вы все равно собъетесь (автоматически) на капслок и выборка будет по нему. Таким образом, никак "иванова" (Дмитрия) вы не выберете :(.

Чтобы такого не произошло (ведь бывают полные однофамильцы), в списке кроме ФИО должны быть еще доп. аттрибуты человека - например дата рождения, тип документа , удостов. личности, серия и номер. Видя все эти данные можно с большой долей вероятности однозначно идентифицировать человека.
Об этом уже не раз велся разговор (спор). Каждый решает для себя то что считает нужным. Я в свое время определился с набором необходимых аттрибутов, сочетание которых однозначно идентифицирует человека. Вот уже 10 лет нет никаких проблем.
4 дек 18, 15:37    [21753125]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить