Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизОграничение скроллинга в 32767 Найти похожие ветки
← →
Unknown_user (2011-03-16 13:48) [0]Подскажите как обойти ограничение диапазона прокрутки скроллбара в 32767? Привожу описание сообщения скроллера из Messages.pas, видим, что поле Pos типа Smallint.
TWMScroll = packed record
Msg: Cardinal;
ScrollCode: Smallint; { SB_xxxx }
Pos: Smallint;
ScrollBar: HWND;
Result: Longint;
end;
Похоже, тяжелое наследство 16-ти битного прошлого.
Я использую это поле при обработке сообщений
SB_THUMBPOSITION,
SB_THUMBTRACK
и при большом ScrollRange получаю переполнение. Как обойти?
← →
clickmaker © (2011-03-16 13:53) [1]GetScrollPos() или GetScrollInfo()
← →
Unknown_user (2011-03-16 14:49) [2]Большое спасибо, clickmaker. Сам я что-то не догадался. GetScrollInfo может среди прочих параметров возвращать nTrackPos. Это как раз и есть тот самый TWMScroll.Pos только уже 4-х байтный.
Привожу работающий код, может кому-то пригодится.
function TSomeControlWithScrollBars.GetTrackPos(HorizScroll: Boolean): Integer;
const
cScrolls: array[Boolean] of DWORD =
(SB_VERT, SB_HORZ);
var
ScrInfo: TScrollInfo;
begin
ScrInfo.cbSize := SizeOf(ScrInfo);
ScrInfo.fMask := SIF_TRACKPOS;
GetScrollInfo(Handle, cScrolls[HorizScroll], ScrInfo);
Result := ScrInfo.nTrackPos;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.076 c