0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|||||||||||||||||||||||||||||||
1 | |||||||||||||||||||||||||||||||
Зумирование камеры при вращении колеса мыши в GLScene на Delphi13.09.2019, 07:51. Показов 2310. Ответов 13
Доброе утро! Из-за ошибок с библиотеками базовой и расширенной геометрии, описанных в этой теме,
Обработка событий для кнопок в RAD Studio 10.3 я перешёл с C++ на Delphi. В методичке из лабораторки и в блоге Артёма Калашника (https://vk.com/notes40524438) было задание - зумировать камеру при вращении колеса мыши с кодом на C++:
Фрагмент кода:
Исходный код проекта:
0
|
13.09.2019, 07:51 | |
Ответы с готовыми решениями:
13
При вращении колеса мыши окно изменяет размер Делаю выбор мышкой как в Warcraft3. Но координаты меняются при вращении камеры Перемещение камеры при нажатой левой клавише мыши; проблемы с обзором мыши и видимостью указателя Масштабирование фигуры при прокрутке колеса мыши |
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
||||||
13.09.2019, 08:44 [ТС] | 3 | |||||
Библиотеку подключил, но при запуске проект на колесо мыши по-прежнему не реагирует. Заглянул в инспектор объектов для GLSceneViewer1, а там свойства MouseInControl нет. Убрал условие - на колёсико опять ноль реакции. Прописал насильно в обработчике OnCreate для формы - проект не запустился и компилятор выдал ошибки:
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|
14.09.2019, 08:22 [ТС] | 4 |
Я попробовал сделать через ScrollBox, но увидел, что вложить в него прямо из панели инструментов можно только новый объект, а уже существующие надо сделать дочерними. Я читал, что есть функция AddNewChild, которая прописывается в OnCreate при создании формы, но это сработает только при запуске программы, а при разработке ScrollBox всё равно ляжет поверх GLSceneViewer, даже если последний меньше. Какое свойство отвечает за удочерение объектов по отношению к ScrollBox, где его искать, и что мне нужно - Owner или Parent?
0
|
691 / 5408 / 265
Регистрация: 11.08.2016
Сообщений: 3,357
|
|
14.09.2019, 13:40 | 5 |
Объяви функцию как обработчик сообщения Windows, например:
procedure WMWheelEventHandler(var Msg : TWMMouse); message WM_MOUSEWHEEL;
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
||||||
14.09.2019, 14:41 [ТС] | 6 | |||||
Что это за событие в инспекторе объектов, и для какого компонента? Ведь первым идёт не Form или Cadencer. Прогуглив, я увидел, что проблему наследования люди решают строкой,
Добавлено через 7 минут Есть только ParentHint, который берёттолько True или False.
0
|
691 / 5408 / 265
Регистрация: 11.08.2016
Сообщений: 3,357
|
|
14.09.2019, 19:18 | 7 |
Это не событие в инспекторе объектов.
Заголовок надо прописать руками в объявлении класса формы, а тело - дальше, вручную же.
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|||||||||||
14.09.2019, 20:33 [ТС] | 8 | ||||||||||
Я к тому, что, если событие для формы не выбрано в инспекторе объектов, оно и не запустится, ведь графа для этого события всё ещё пуста.
Добавлено через 1 минуту Прописывай- не прописывай-, если графа у инспектора на вкладке Events пуста, компилятор его и не увидит. Добавлено через 2 минуты Вы имеете ввиду, что лучше создать новый проект и первым делом вставить в него ScrollBox, а потом - в этот ScrollBox прямо из панели вставить всё остальное, чем возиться с уже существующим? Добавлено через 54 минуты Компилятор опять умудрился выдать ошибку:
0
|
691 / 5408 / 265
Регистрация: 11.08.2016
Сообщений: 3,357
|
|
15.09.2019, 09:42 | 9 |
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
||||||
15.09.2019, 12:22 [ТС] | 10 | |||||
Сообщение на колесо мыши выводится, тут либо свойство MouseInControl для GLSceneViewer "кастрировано", либо функция Power нужна не из библиотеки Math. На всякий случай, я пошёл вторым путём - пересоздал проект и кинул всё в ScrollBox. Потом скажу, где будут ошибки.
Исходный код программы:
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|||||||||||||||||||||
15.09.2019, 12:45 [ТС] | 11 | ||||||||||||||||||||
Вот то, о чём я говорил раньше. При попытке насильно прописать MouseInControl в True в создателе формы OnCreate
Ошибки:
Также хочу заметить, что у GLSceneViewer в инспекторе нет свойства Stretch, которое есть у Image.
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
||||||||||||||||
16.09.2019, 08:03 [ТС] | 12 | |||||||||||||||
Попробовал сделать через ScrollBox, но не помогло - куб и сфера на несколько минут останавливаются, а потом снова вращаются, и масштаб остаётся прежним.
Прописал в OnCreate свойство Stretch для GLSceneViewer, но для этого компонента такого свойства нет.
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|
16.09.2019, 08:16 [ТС] | 13 |
Вот архив с проектом.
0
|
0 / 0 / 4
Регистрация: 21.08.2017
Сообщений: 205
|
|
16.09.2019, 17:07 [ТС] | 14 |
А разгадка так близко - камера должна быть привязана к объекту, а я тупил. Надо было брать не прямое название камеры, а то, что в свойстве Camera компонента GLSceneViewer1, если метод будет универсальным. И не нужны никакие скроллбоксы.
0
|
16.09.2019, 17:07 | |
16.09.2019, 17:07 | |
Помогаю со студенческими работами здесь
14
Масштабирование изображения при прокрутке колеса мыши Подсчет количества делений при прокрутке колеса мыши Тормоза в играх при вращении камеры/перемещении. Что это означает и что проапгрейдить? [GLScene]Движение и вращение камеры Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |