0 / 0 / 1
Регистрация: 10.03.2011
Сообщений: 7
|
|
1 | |
Обработка прокрутки мышью10.03.2011, 23:18. Показов 18185. Ответов 8
Метки нет (Все метки)
У меня не работает обработка события от прокрутки колёсика мыши (OnMouseWheelDown и OnMouseWheelUp) в компоненте TImage. Я хочу изменять размер изображения карты нажатием Ctrl + колёсико мыши. Причем, у компонента TForm все это работает, а у TScrollBox не работает. В чем дело?
0
|
10.03.2011, 23:18 | |
Ответы с готовыми решениями:
8
Обработка прокрутки колеса мыши Универсальная обработка клика мышью Работа с мышью. Обработка кликов Обработка повторного клика мышью в TextBox |
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,602
|
|
10.03.2011, 23:25 | 2 |
2
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
|
10.03.2011, 23:38 | 3 |
Кажется Image не принимает фокус, и ScrollBox с Image так же не принимает фокус. Вот поставь на ScrollBox кнопку и попробуй, должно получиться(кнопка в фокусе). Попробуй ScrollBox1.SetFocus.
1
|
0 / 0 / 1
Регистрация: 10.03.2011
Сообщений: 7
|
|
12.03.2011, 00:20 [ТС] | 4 |
код простой ))) мне важно суть выяснить.
procedure TForm1.ScrollBox1MouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean); var i:integer; begin i:=MousePos.x; end; Вообще странно, вроде фокус здесь не при чем, ведь обработчик для OnMoseDown работает "без фокусов" ))). Хотя нет, кликая, мы заодно принимаем фокус. А в PaintBox фокусв нет, а обработчик OnMouseDown работает. Ура! Вставил кнопку в ScrollBox и обработчик заработал. Вообще-то я сварганил следующую штуку, чтобы масштабировать растровую карту. В ScrollBox поместил Tpanel и задал свойство align=alClient, на панель положил TPaintBox и тоже align=alClient. Первоначальный размер Tpanel задаю по размеру изображения, которое всасываю через TBitMap, а масштабирую пропорциональным изменением размера TPanel, размер изображения, при этом послушно подстраивается под панель. Изображение рисую процедурой with pbWorld do canvas.StretchDraw(rect(0,0,width,height),FBMP); Вот и хотелось бы колёсико задействовать. Буду экспериментировать ...
0
|
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,602
|
|
12.03.2011, 01:00 | 5 |
Я же говорил, что дело в коде.
Как вам ни покажется странным, но этот маленький кусочек кода "с подвохом". Во-первых, он и так ничего не делает, а самое главное, вы и в отладчике ничего не проверите. Дело в том, что вы что-то присваиваете локальной переменной "i", но потом её не используете. В Delphi встроен оптимизатор кода, который по-умолчанию включен. Он уберёт этот кусок кода совсем. Если у вас весь код написан в таком стиле, то удивляться не стОит...
0
|
0 / 0 / 1
Регистрация: 10.03.2011
Сообщений: 7
|
|
12.03.2011, 01:05 [ТС] | 6 |
чтобы не было подвоха, я зашел и убрал Оптимизатор. Дело - не в коде. Код нормальный, мне важно в принципе зайти в обработчик. Тот же самый код работает для формы, для скроллера (если туда засунуть кнопку)
0
|
3218 / 2361 / 540
Регистрация: 11.09.2009
Сообщений: 8,602
|
|
12.03.2011, 01:43 | 7 |
E567, с поиском ошибок в тайном коде - это вам не на этот форум. Это на "Форум потомственных гадалок на кофейной гуще", "Ясновидение"...
0
|
160 / 159 / 13
Регистрация: 14.01.2010
Сообщений: 1,497
|
|
12.03.2011, 09:39 | 8 |
Проверь находится ли курсор над ScrollBox(если он не в фокусе) и при прокручивании мыши обрабатывай либо событием формы либо передавай фокус ScrollBox, хотя мне думается лучше событие формы.
1
|
0 / 0 / 1
Регистрация: 10.03.2011
Сообщений: 7
|
|||||||||||||||||||||
12.03.2011, 13:12 [ТС] | 9 | ||||||||||||||||||||
Я не умею это делать.
Моя конечная цель - поймать событие когда прокрутка над объектом TPaintBox. А Объекты TScrollBox и пр. я взял в качестве эксперимента. Над формой всё работает, даже "пустой" код, который так не нравится i8085, над ScrollBox - работает при помещении кнопки (ее ведь можно сделать невидимой, если нужен будет именно TScrollBox). Добавлено через 16 минут Кстати о коде, который не хочет ловить событие мышиной прокрутки. Породил потомок от TPaintBox с опубликованными событиями
Всё, спасибо, получилось. Оказывается, несмотря на то, что событие проходит над TPaintBox, обработчик мышиной пркрутки у формы тоже откликается.
0
|
12.03.2011, 13:12 | |
12.03.2011, 13:12 | |
Помогаю со студенческими работами здесь
9
Обработка прокрутки не полностью заполненного RecyclerView Обработка событий горизонтальной прокрутки в listView Размер userform и обработка события нажатия мышью на контроллеры Обработка сообщений от поля Edit, размещенного на GroupBox с полосами прокрутки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |