Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Вниз

Как узнать что ползунок 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.11.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.209 c
2-1192270081
Новичек
2007-10-13 14:08
2007.11.04
Состояние DataSet.


2-1192379027
Инжинер
2007-10-14 20:23
2007.11.04
Работа с USB


6-1172573310
VitaliyRilan
2007-02-27 13:48
2007.11.04
Cоеденение в интернете компьютеров находящихся за NAT


15-1191741805
Инглиш
2007-10-07 11:23
2007.11.04
Экскурсия


2-1192047482
неугомонный
2007-10-11 00:18
2007.11.04
Маленькая помощь в скромной задачке :)





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