Главная страница
    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.48 MB
Время: 0.042 c
2-1191926186
Ega23
2007-10-09 14:36
2007.11.04
TClientDataSet


15-1190821439
Константин Батькович
2007-09-26 19:43
2007.11.04
Проблема с добавлением данных через INSERT (InterBase)!


15-1191378171
Slider007
2007-10-03 06:22
2007.11.04
С днем рождения ! 3 октября 2007 среда


2-1192135871
Mozgodol
2007-10-12 00:51
2007.11.04
Подмена файла


15-1191197823
Andy BitOff
2007-10-01 04:17
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский