Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.077 c
15-1338371588
Dmitry87
2012-05-30 13:53
2013.03.22
Windows XP -> VirtualBox -> Windows 8


15-1342015306
Дмитрий С
2012-07-11 18:01
2013.03.22
Apache mod_rewrite


15-1340972066
Омлет
2012-06-29 16:14
2013.03.22
Почему в русском при отрицании [всё] = [ничего]?


2-1333344537
SvK.droNe
2012-04-02 09:28
2013.03.22
Рациональная интерполяция с помощью непрерывных дробей.


8-1202127408
sssyura
2008-02-04 15:16
2013.03.22
Форма без фона





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский