Jump to content

UnimSelect vs UnimComboBox


x11

Recommended Posts

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

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

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

 

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

Link to comment
Share on other sites

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

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

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

Screenshot_1.jpg

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

10 minutes ago, x11 said:

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

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

Для чего оно?

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

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

@Sherzod

Link to comment
Share on other sites

1 hour ago, x11 said:

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

Для чего оно?

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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...