Форум: "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