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

Вниз

Как узнать что ползунок ScrollBar дошел до конца прокрутки?   Найти похожие ветки 

 
NeyroSpace ©   (2007-05-02 12:46) [0]

Допустим я установил
ScrollInfo.nMax := 30000;
потом отлавливаю сообщение TWMVScroll с флагом SB_THUMBTRACK
И получается интересная вещь. Ползунок перемещается до конца, а Pos = 29774.
Растягиваю окно. Опять прокручиваю ползунок до конца 29563.
Но все это меньше максимального значения в 30000.

Как узнать, что ползунок прокручен на максимум?


 
clickmaker ©   (2007-05-02 12:54) [1]


> Как узнать что ползунок ScrollBar дошел до конца прокрутки?

для чего?


 
NeyroSpace ©   (2007-05-02 13:02) [2]

Мне необходимо прокручивать большой объем информации.
Т.е. диапозона прокрутки в 32767 мне не хватает.
Соответственно я ввожу коэф. например 2. Все замечательно, но вот в конце не стыковка, последние строки не докручиваются.
Соответственно я решил сделать ручную корректировку, но понял что определить в каком положении находиться ползунок в крайнем или нет весьма сложно((


 
NeyroSpace ©   (2007-05-02 13:08) [3]

Вообще у мелкософта сделано странно.
Я уже попробовал по пикселам посчитать шаг прокрутки, чтобы вычислить эту странную последню позицию ползунка.
Сосчитал, у меня шаг и у ползунка совпадает. Умножаю на длину - разные результаты(( У меня больше, у microsoft всегда меньше. Причем иногда меньше на 3(!) шага ползунка.
Видимо прийдется делать хитрый алгоритм постраничного отображения данных(((


 
clickmaker ©   (2007-05-02 13:11) [4]


> Т.е. диапозона прокрутки в 32767 мне не хватает

кто мешает сделать больше?


 
NeyroSpace ©   (2007-05-02 13:16) [5]

int ScrollInfo.nMax


 
clickmaker ©   (2007-05-02 13:19) [6]


> [5] NeyroSpace ©   (02.05.07 13:16)

а с каких это пор int в 32-битной ОС стал максимум 32767?


 
Игорь Шевченко ©   (2007-05-02 13:24) [7]


> а с каких это пор int в 32-битной ОС стал максимум 32767?


причем здесь int ? Оконные координаты больше не бывают


 
NeyroSpace ©   (2007-05-02 13:25) [8]

Сорре ошибся!

 TWMScroll = packed record
   Msg: Cardinal;
   ScrollCode: Smallint; { SB_xxxx }
   Pos: Smallint; <----------------------- Small конечно! Т.е. те самые 32676 ((
   ScrollBar: HWND;
   Result: Longint;
 end;


 
clickmaker ©   (2007-05-02 13:27) [9]


> [7] Игорь Шевченко ©   (02.05.07 13:24)

а причем здесь оконные координаты? это же скролл
Или я после праздников туго соображаю?


 
NeyroSpace ©   (2007-05-02 13:32) [10]

Игорь Шевченко ©   (02.05.07 13:24) [7]
Это понятно, но мне нужно прокручивать гораздо больше 32767 позиций.

Есть 2е идеи:
1. Простая как казалось, сделать коэфициент. Но тогда нужно скорректировать последнии строки, т.к. шаг получается большой. Для этого надо определить, что ползунок дошел до конца. Тут я и уперся в тупик.
2. Сделать виртуальное окно. При протягивании отображается только часть данных, помещающихся в интервал 32767. Это немного сложнее в реализации, да и выглядит слегка необычно. Хотя такой вариант в работе я уже видел у табличных компонентов.


 
Игорь Шевченко ©   (2007-05-02 14:33) [11]

clickmaker ©   (02.05.07 13:27) [9]


> а причем здесь оконные координаты? это же скролл


положение и макс. / мин. скролла измеряется в оконных координатах

NeyroSpace ©   (02.05.07 13:32) [10]


> Это понятно, но мне нужно прокручивать гораздо больше 32767
> позиций.


А ты умножение с делением в школе проходил ?


 
clickmaker ©   (2007-05-02 14:43) [12]


> [11] Игорь Шевченко ©   (02.05.07 14:33)

а как же

The GetScrollInfo function enables applications to use 32-bit scroll positions. Although the messages that indicate scroll-bar position, WM_HSCROLL and WM_VSCROLL, provide only 16 bits of position data, the functions SetScrollInfo and GetScrollInfo provide 32 bits of scroll-bar position data. Thus, an application can call GetScrollInfo while processing either the WM_HSCROLL or WM_VSCROLL messages to obtain 32-bit scroll-bar position data.

To get the 32-bit position of the scroll box (thumb) during a SB_THUMBTRACK request code in a WM_HSCROLL or WM_VSCROLL message, call GetScrollInfo with the SIF_TRACKPOS value in the fMask member of the SCROLLINFO structure.

(с) MSDN

?


 
NeyroSpace ©   (2007-05-02 14:52) [13]

>А ты умножение с делением в школе проходил ?
я же говорю, что сделал коеф. все работает, но когда отматываешь в конец последние строки не видны, т.к. я исхожу из того, что в крайнем положении ползунок должен принять значение МАХ!

Но на самом деле у microsoft ползунок в крайнем положении не принимает значения МАХ!
Сначала я думал погрешность полшага (ну до 1 шага), но в некоторых случаях крайнее положение оказывается на 3 шага меньше МАХ!
Т.е. по значению POS из сообщения TWMVScroll никак не определить дошел ползунок до конца или нет!

Чтобы внести корректировку и правильно отобразить конец прокручиваемых данных мне необходимо понять, что ползунок достиг последней точки и дальше его тянуть уже нельзя. В этот момент я бы сам прокрутил бы содержимое до конца.


 
Игорь Шевченко ©   (2007-05-02 15:08) [14]

clickmaker ©   (02.05.07 14:43) [12]

Да, я тоже маху дал.
Бывает :)

Вот тут: http://www.rsdn.ru/archive/vc/issues/pvc031.htm

в разделе "вопрос-ответ" написано, как использовать 32-х битные значения.


 
NeyroSpace ©   (2007-05-02 15:28) [15]

Игорь Шевченко ©   (02.05.07 15:08) [14]
оно! Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
2-1191990597
Al500
2007-10-10 08:29
2007.11.04
Подскажите пожалуйста, возможно ли неявно вызвать процедуру


15-1190800801
ТТ
2007-09-26 14:00
2007.11.04
компиляция-оптимизация


6-1172822574
Wahnsinng
2007-03-02 11:02
2007.11.04
Каким образом вытащить информацию из frame


15-1191253714
ist
2007-10-01 19:48
2007.11.04
Windows Filter-Hook driver..


3-1183014419
azamatufa
2007-06-28 11:06
2007.11.04
ADO SQL SUM(Field) - ошибка в IDE Access violation ... 1B041FC6