метод. Это может произойти с существующим приложением, и наличие такого обходного пути может быть очень полезным само по себе.
лизуюпросмотр журнала с использованиемTListBox
в виртуальном режиме.
Он отлично работает (для всего кода, который я написал), отображает содержимое, как и ожидалось (я даже легко добавил горизонтальную полосу прокрутки), но я предполагаю, что достиг некоторого предела вертикальной полосы прокрутки.
То есть, когда я прокручиваю вертикальную полосу сверху вниз, она не будет прокручивать содержимое до конца списка, а только до некоторого предела.
Знаете ли вы возможность избавиться от этого ограничения? Я пробовал сSetScrollInfo
, но это не сработало, поскольку лимит звучит не на полосе прокрутки, а вTListBox
сам.
Я знаю решение создания выделенногоTCustomControl
: в этом случаеSetScrollInfo
будет работать как положено. Но кто-нибудь знает о решении / уловке, чтобы все еще использоватьTListBox
?
Редактировать: чтобы прояснить - я не прошу (стороннее) компонентное решение, но знаю, есть ли какое-то низкоуровневое сообщение GDI для отправки в стандартTListBox
переопределить этот предел. Если его нет, я пойду на выделенныйTCustomControl
решение.
Вот код, использующий TSCROLLINFO:
procedure ScrollVertHuge(Handle: HWND; count: integer);
var Scroll: TSCROLLINFO;
begin
Scroll.cbSize:= sizeof(Scroll);
Scroll.fMask := SIF_DISABLENOSCROLL or SIF_RANGE;
Scroll.nMin := 0;
Scroll.nMax := count;
SetScrollInfo(Handle,SB_VERT,Scroll,false);
end;
Чтобы уточнить проблему: Конечно, добавление и рисование работают (мой инструмент работает как положено), но не работает перетаскивание вертикальной полосы прокрутки. Я переименовал название вопроса и избавился от устаревших статей MSDN, которые сбивают с толку.