Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Ограничение скроллинга в 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;
Скачать: CL | DM;

Наверх




Память: 0.44 MB
Время: 0.059 c
2-1335777792
Vladolin7
2012-04-30 13:23
2013.03.22
Как ввести данные в поле Memo?


15-1340601785
Oleg1
2012-06-25 09:23
2013.03.22
Начинающим


15-1343498887
stas
2012-07-28 22:08
2013.03.22
отправить факс через VentaFax (из моей программы)


15-1345149004
Юрий
2012-08-17 00:30
2013.03.22
С днем рождения ! 17 августа 2012 пятница


2-1338195526
Вовка
2012-05-28 12:58
2013.03.22
Сохранение файла gif





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский