x11 Posted May 28, 2020 Posted May 28, 2020 Подскажите, в чем принципиальная разница между TUnimSelect и TUnimComboBox? Визуально, по свойствам я не могу понять. В каких случаях нужно использовать ту или иную компоненту? Например, сейчас стоит задача сделать возможность выбора данных из таблицы- справочника, где будет ID+NAME. Quote
x11 Posted May 28, 2020 Author Posted May 28, 2020 У UnimComboBox есть триггеры, т.е. можно добавить свои дополнительные кнопки. У UnimComboBox есть какое-то свойство AnyMatch, я так понял, для фильтрации содержимого по любому вхождению. Есть свойства RemoteXXX, только я пока не понял, для чего они, а документации по TUnimComboBox нет Quote
x11 Posted May 29, 2020 Author Posted May 29, 2020 17 hours ago, x11 said: Есть свойства RemoteXXX @Sherzod подскажите, для чего эти свойства и как работать с ними правильно? Спасибо. Quote
x11 Posted May 29, 2020 Author Posted May 29, 2020 Пытаюсь пока понять, как и что в примере Demos\Touch\DBLookupComboBox - Custom Remote Query (CDS) Quote
x11 Posted May 29, 2020 Author Posted May 29, 2020 Что должно быть в событиях GetKeyValue и RemoteQuery? Как они взаимодействую? Quote
x11 Posted May 29, 2020 Author Posted May 29, 2020 И в вашем примере, и в моем проекте, если тапнуть по строке ввода UniDBLookupComboBox, то ничего не происходит, приходится повторно тыкать пальцем в строку ввода, чтобы выпала виртуальная клавиатура. Quote
Sherzod Posted May 29, 2020 Posted May 29, 2020 10 minutes ago, x11 said: И в вашем примере, и в моем проекте, если тапнуть по строке ввода UniDBLookupComboBox, то ничего не происходит, приходится повторно тыкать пальцем в строку ввода, чтобы выпала виртуальная клавиатура. Т.е., после второго "нажатия"? Quote
x11 Posted May 29, 2020 Author Posted May 29, 2020 Да, после второго нажатия. Вообще, UniDBLookupComboBox странно себя ведет. То ищет, то не ищет. Вот мой код, что в нем не так? procedure TfmmParentAparts.comboStreetsGetKeyValue(const Value: string; var KeyValue: Variant); begin inherited; KeyValue := qStreetsID.Value; end; procedure TfmmParentAparts.comboStreetsRemoteQuery(const QueryString: string; Result: TStrings); Var n: integer; begin inherited; // SQL запрос SELECT ID, NAME FROM STREETS WHERE UPPER(NAME) CONTAINING(UPPER(:NAME)) ORDER BY 2 qStreets.Close; if QueryString.IsEmpty then exit; n := 0; qStreets.Params[0].AsString := QueryString; qStreets.Open; if qStreets.RecordCount = 0 then begin Result.Add(constEmptyRes); exit; end; qStreets.First; while not qStreets.Eof do begin Result.Add(qStreetsNAME.Value); qStreets.Next; inc(n); if N > 100 then Break; end; // qStreets.Close; end; Я ввожу название, которое 100% есть в базе. В конце-то концов ведь выпадает список из 4 строк, но не с первого раза. Приходится нажимать кнопку справа для принудительного выпадания списка. Возможно, это проблема из-за того, что UniDBLookupComboBox находится внизу формы. И когда, после второго нажатия, появляется виртуальная клавиатура, то сам UniDBLookupComboBox не видно и приходится набирать текст вслепую. И как сделать, чтобы при наборе текста в UniDBLookupComboBox, он был виден на экране? @Sherzod я вам отправил видео в личные сообщение, где видно поведение UniDBLookupComboBox на экране смартфона. Quote
x11 Posted May 31, 2020 Author Posted May 31, 2020 Я так и не понял, и документации нет. Как использовать событие GetKeyValue? Для чего оно? Что в нем должно быть? В какие моменты оно срабатывает? @Sherzod Quote
Sherzod Posted May 31, 2020 Posted May 31, 2020 1 hour ago, x11 said: Как использовать событие GetKeyValue? Для чего оно? Что в нем должно быть? В какие моменты оно срабатывает? Здравствуйте, Это событие используется тогда, когда Вам нужно вернуть значение ключа самостоятельно. Т.е., когда у Вас есть пользовательский (произвольный) список, который не приходит прямо из таблицы БД (когда используется событие OnRemoteQuery). Когда вы предоставляете данные, Вам необходимо предоставить соответствующие ключи. Quote
x11 Posted May 31, 2020 Author Posted May 31, 2020 Да, я использую OnRemoteQuery. Почему ShowMessage всегда показывает 0 (ноль)? Вот на картинке: я напечатал три символа и выбрал определенное значение из списка и каждый раз было сообщение со зачем 0 (ноль). Где и как нужно позиционировать курсор у датасета? В событии OnSelect? Я правильно понимаю, что onGetKeyValue срабатывает сразу после OnRemoteQuery? Или наоборот - до (перед) OnRemoteQuery? По идее, GetKeyValue должно срабатывать после выбора, т.е. когда пользователь уже что-то выбрал и закрыл список. procedure TfmmParentAparts.comboStreetsGetKeyValue(const Value: string; var KeyValue: Variant); begin inherited; KeyValue := qStreetsID.Value; MyShowMessage('KeyValue', KeyValue); end; procedure TfmmParentAparts.comboStreetsRemoteQuery(const QueryString: string; Result: TStrings); Var n: integer; begin inherited; qStreets.Close; if (QueryString.Length <= 2) and (QueryString <> '*') then exit; n := 0; if QueryString = '*' then qStreets.Params[0].AsString := '' else qStreets.Params[0].AsString := QueryString; qStreets.Open; if qStreets.RecordCount = 0 then begin Result.Add(constEmptyRes); exit; end; qStreets.First; while not qStreets.Eof do begin Result.Add(qStreetsNAME.Value); qStreets.Next; inc(n); if N > 10 then Break; end; qStreets.Close; end; Уточнить хочу. 5 minutes ago, Sherzod said: Это событие используется тогда, когда Вам нужно вернуть значение ключа самостоятельно. Вернуть откуда и куда? Т.е. чтобы присвоить значение параметру KeyValue? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.