Jump to content

How to show the user a specific line of TUniListBox?


Tokay

Recommended Posts

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

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

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