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

Вниз

scroll   Найти похожие ветки 

 
race1   (2005-01-07 18:02) [0]

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


 
race1   (2005-01-12 12:20) [1]

никто не знает? как рисовать целиком скрол, который, например, автоматом появлется у листбокса если все его эл-ты не влезают?


 
Cosinus ©   (2005-01-12 12:24) [2]

Может проще ScrollBar прикрутить?


 
race1   (2005-01-12 13:43) [3]

это как? можно и прикрутить, но главный вопрос - как отрисовать скрол, уже теперь любой, стандартный, не стандартный, но как?? :) мне сейчас видится одно решение - симулировать скрол, наследоваться от customcontrol"а и вперёд :|


 
wicked ©   (2005-01-12 14:57) [4]

обрабатывать сообщения... довольно таки геморройно, но вполне реально рисовать там всё, что хочется...
если надо, могу поискать, какие именно сообщения...


 
race1   (2005-01-12 17:56) [5]

>4
пожалуйста поищите. а то иначе придётся делать свой скрол, делать там две кнопки - вверх-вниз, тумб, обрабатывать перемещение тумба и т.д...


 
wicked ©   (2005-01-12 20:23) [6]

идея такова - перехватываем у контрола свойство WindowProc (пишем свою) и отрабатываем сообщения, не забывая при этом отдавать их контролу... работы много, но она достаточно увлекательна - поверьте мне... ;) все сообщения хорошо описаны в мсдн... исходников, извините не дам, ибо
1. они на си++ (для билдера с тем же vcl-ем)
2. это здоровый кусок скинового движка (в стадии стабильной беты)
3. писано на фирму...

примерный список сообщений
WM_DESTROY - обработка отсоединения от контрола...
WM_NCCALCSIZE - вычисление и задание неклиентской части контрола (там, где скроллы и живут)...
WM_NCPAINT - прорисовка скроллов...
WM_PAINT - проверка, нужно ли скроллы рисовать... если да, рисуем...
WM_SIZE - не помню, вроде бы принудительная отрисовка контрола...
WM_STYLECHANGED и
WM_STYLECHANGING - не помню, какие то движения со стилями (чего-то мы подавляем стиль WS_EX_CLIENTEDGE)
WM_NCHITTEST - возвращаем, где находится мышь...
WM_NCLBUTTONDOWN и
WM_NCLBUTTONDBLCLK - отслеживем, находится ли мышь на скролле, если да, захватываем её...
WM_NCLBUTTONUP и
WM_LBUTTONUP - отпускание мыши...
WM_NCMOUSEMOVE - следим за мышью либо скроллим скролл (если нажата кнопка)...
WM_MOUSEMOVE - скроллим скролл...


 
Gero ©   (2005-01-12 20:24) [7]

А TScrollingWinControl чем не угодил?


 
race1   (2005-01-13 10:24) [8]

>6
это всё здорово. но будет ли скрол ответчать на нажатия на кнопки вверх-вниз и на тумб сам? или это придётся делать самому (исходя из "WM_MOUSEMOVE - скроллим скролл". тогда какой смысл делать стд скрол и перехватывать события, если это получается симуляция скрола? а нельзя ли вызывать defwndproc для, например, нажатия\отпускания кнопки мыши, что бы виндовс сам отвечал за поведение скрола?

ps. скиновый двигатель тоже ;) теперь знаю у кого спросить про остальные скиновые контролы ;))

>7
это не то. нужно именно самому отрисовать скролбар. только рисование, больше ничего не нужно


 
wicked ©   (2005-01-13 13:55) [9]

> race1   (13.01.05 10:24) [8]
на клавиатуру контрол будет отвечать так, как ему нужно... мы эмулируем только мышиный интерфейс... сначала я тоже думал, что стоит только в обработчике WM_NCHITTEST говорить системе, где мышь (бегунок, стрелки, page-области), а дальше она сама разберется... ан нет, пришлось эмулировать всё, связанное с мышью.... зато при таком подходе мы можем сами задавать размеры и расположение скроллов там, где нам необходимо...

> а нельзя ли вызывать defwndproc для, например, нажатия\отпускания
> кнопки мыши, что бы виндовс сам отвечал за поведение скрола?

насколько помню, события мыши отдаются контролу не всегда, а только тогда, когдя мы их сами не обрабатываем...
и отдавать надо не в DefWindowProc, а предварительно сохраненному обработчику WindowProc... это нужно для того, чтоб могли отработать все vcl-ные механизмы...



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

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

Наверх




Память: 0.49 MB
Время: 0.035 c
3-1103528250
Iova
2004-12-20 10:37
2005.01.23
Какое поле в таблице является первичным ключом


4-1102111892
Bobby Digital
2004-12-04 01:11
2005.01.23
Serial


6-1099338319
JR
2004-11-01 22:45
2005.01.23
RAS -> BytesReceived


14-1104862888
Andrewp
2005-01-04 21:21
2005.01.23
Тупой препад!


3-1103302176
DSKalugin
2004-12-17 19:49
2005.01.23
UDF для Firebird со строчными параметрами