Jump to content

Recommended Posts

Posted

Подскажите, в чем принципиальная разница между TUnimSelect и TUnimComboBox?

Визуально, по свойствам я не могу понять.

В каких случаях нужно использовать ту или иную компоненту?

 

Например, сейчас стоит задача сделать возможность выбора данных из таблицы- справочника, где будет ID+NAME.

Posted

У UnimComboBox есть триггеры, т.е. можно добавить свои дополнительные кнопки.

У UnimComboBox есть какое-то свойство AnyMatch, я так понял, для фильтрации содержимого по любому вхождению.

Есть свойства RemoteXXX, только я пока не понял, для чего они, а документации по TUnimComboBox нет :sad:

Screenshot_1.jpg

Posted
17 hours ago, x11 said:

Есть свойства RemoteXXX

@Sherzod подскажите, для чего эти свойства и как работать с ними правильно?

Спасибо.

Posted

Пытаюсь пока понять, как и что в примере Demos\Touch\DBLookupComboBox - Custom Remote Query (CDS)

Posted

Что должно быть в событиях GetKeyValue и RemoteQuery?

Как они взаимодействую?

Posted

И в вашем примере, и в моем проекте, если тапнуть по строке ввода UniDBLookupComboBox, то ничего не происходит, приходится повторно тыкать пальцем в строку ввода, чтобы выпала виртуальная клавиатура.

 

Posted
10 minutes ago, x11 said:

И в вашем примере, и в моем проекте, если тапнуть по строке ввода UniDBLookupComboBox, то ничего не происходит, приходится повторно тыкать пальцем в строку ввода, чтобы выпала виртуальная клавиатура.

Т.е., после второго "нажатия"?

Posted

Да, после второго нажатия.

Вообще, 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 на экране смартфона.

Posted

Я так и не понял, и документации нет.

Как использовать событие GetKeyValue?

Для чего оно?

Что в нем должно быть?

В какие моменты оно срабатывает?

@Sherzod

Posted
1 hour ago, x11 said:

Как использовать событие GetKeyValue?

Для чего оно?

Что в нем должно быть?

В какие моменты оно срабатывает?

Здравствуйте,

Это событие используется тогда, когда Вам нужно вернуть значение ключа самостоятельно. Т.е., когда у Вас есть пользовательский (произвольный) список, который не приходит прямо из таблицы БД (когда используется событие OnRemoteQuery).

Когда вы предоставляете данные, Вам необходимо предоставить соответствующие ключи.

Posted

Да, я использую 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?

Screenshot_89.jpg

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...