Jump to content

How to show the user a specific line of TUniListBox?


Tokay

Recommended Posts

2 minutes ago, Sherzod said:

Почему 50?

 

без понятия, это было в примере выше.

А вон в событии afterCreate указано 0 и тоже ошибка

Link to comment
Share on other sites

10 minutes ago, Sherzod said:

Используйте afterrender

да какая разница?

всё равно:

Uncaught TypeError: list.getSelectedNodes()[0].scrollIntoViewIfNeeded is not a function

при старте приложения, в консоли браузера

Screenshot_4.jpg

Link to comment
Share on other sites

нет, не работает, именно этот пример я скачал, скомпилировал, запустил, в браузере сразу же ошибка:

Uncaught TypeError: list.getSelectedNodes()[0].scrollIntoViewIfNeeded is not a function

Перемещал эте 2 строки:

var list = sender.boundList;
list.on('select', function(){list.getSelectedNodes()[0].scrollIntoViewIfNeeded()});

в события afterrender или в boxready - все равно при старте в браузере ошибка

у меня uniGUI 1555, D 10.4.2, Firefox

Link to comment
Share on other sites

Just now, Sherzod said:

На Хроме работает.

 

Только вот есть один нюанс.

Мне не нужна прокрутка списка при старте окна.

Как я написал выше, прокрутка нужна после добавления новой строки.

И вот этот код не работает даже в Хроме.

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
 with UniListBox1 do
  if ItemIndex <> -1 then
   JSInterface.JSCallDefer('boundList.getSelectedNodes()[50].scrollIntoViewIfNeeded', [True], 100);
end;

 

 

Link to comment
Share on other sites

8 minutes ago, x11 said:

Мне не нужна прокрутка списка при старте окна.

function afterCreate(sender)
{
    var list = sender.boundList;
    list.on('select', function() {
      if (list.getSelectedNodes()[0].scrollIntoViewIfNeeded) {
          list.getSelectedNodes()[0].scrollIntoViewIfNeeded()
      } else {
          list.getSelectedNodes()[0].scrollIntoView()
      }
    });
}

 

Link to comment
Share on other sites

Just now, Sherzod said:

Здесь, вместо [50], укажите ноль [0]

Теперь ошибок нет, но и прокрутка не работает.

Вот код:

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
  UniListBox1.ItemIndex := 10;
  UniListBox1.JSInterface.JSCallDefer('boundList.getSelectedNodes()[0].scrollIntoViewIfNeeded', [True], 100);
end;

 

Картинка 1 - до нажатия на кнопку.

Картинка 2 - после нажатия на кнопку.

Как видите, ползунок вверх подпрыгнул, но запись осталась та же.

 

Screenshot_1.jpg

Link to comment
Share on other sites

Just now, x11 said:

Картинка 1 - до нажатия на кнопку.

Картинка 2 - после нажатия на кнопку.

 

1 minute ago, x11 said:

Screenshot_1.jpg

Какая из них? Я не вижу второй картинки.

Link to comment
Share on other sites

4 minutes ago, Sherzod said:

Мне не нужна прокрутка списка при старте окна.

НЕ нужна

прокрутка нужна при добавлении новой записи

Link to comment
Share on other sites

Just now, Sherzod said:

Ok, я проанализирую.

 

Я убрал JS вообще из ClientEvent.

И на кнопку повесил этот:

procedure TMainForm.UniButton1Click(Sender: TObject);
Var
 s: string;
 idx: integer;
begin
  s := 'test9 new row 123';
  UniListBox1.Items.Add(s);
  idx := UniListBox1.Items.IndexOf(s);
  UniListBox1.ItemIndex := idx;
  UniListBox1.JSInterface.JSCallDefer('boundList.getSelectedNodes()[0].scrollIntoViewIfNeeded', [True], 100);
end;

при этом я включил свойство UniListBox1.Sorted.

 

Этот код работает в Хроме и в Опере, но НЕ работает в  Firefox. Другие браузеры не проверял.

 

 

 

Link to comment
Share on other sites

1 minute ago, Sherzod said:

Просто попробуйте scrollIntoView

 

теперь прокручивает к какой-то левой записи

выбирает запись с текстом "test5", вместо 'test9 new row 123'

Screenshot_6.jpg

Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...