|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
|
RAD XE3+ Скроллинг в TScrollBox мышкой31.05.2018, 14:58. Показов 5102. Ответов 27
Метки нет (Все метки)
Здравствуйте.
Есть TScrollBox, а в нем большая карта. На ней в виде массива TImage расположены точки. Так вот. Как сделать скроллинг по карте мышкой. Именно что зажимая левую кнопку мышку двигать карту. Точнее нужно сделать эффект движение карты на самом деле двигать ползунки. Я просто не силен в математки. Подскажите пожалуйста формула расчета. Можно даже не кодом.
0
|
|
| 31.05.2018, 14:58 | |
|
Ответы с готовыми решениями:
27
В TScrollBox при появлении скролла смещаются компоненты Как реализовать скроллинг больших изображений мышкой |
|
|
|
| 31.05.2018, 16:32 | |
|
какая уж тут формула )
в OnMouseDown запомнить текущие значения ScrollBar'ов и мыши поднять флаг назовите его например Dragging в OnMouseMove если Dragging то сравнивать текущую координату мыши с исходной DX=X-X0, DY=Y-Y0 и скроллбарам присваивать значение Xscroll=X0scroll+DX Yscroll=Y0scroll+DY в OnMouseUp опустить флаг Dragging
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||
| 31.05.2018, 16:55 [ТС] | ||
|
DX и DY это вроде координаты курсора И еще. Только щас понял что срабатывание OnMouseMove нужно будет по карте ибо по scrollbox'у оно будет срабатывать Добавлено через 6 минут И еще. Только щас понял что срабатывание OnMouseMove нужно будет по карте ибо по scrollbox'у оно не будет срабатывать так как он перерыт картой
0
|
||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||||||
| 31.05.2018, 21:16 [ТС] | ||||||
|
Чета я не правильно делаю
0
|
||||||
|
|
||||||
| 31.05.2018, 21:31 | ||||||
Сообщение было отмечено Alexandr_7 как решение
Решение
а выглядит ничего так, правильно )
я конечно мог со знаком ошибиться, так легко проверить Добавлено через 9 минут вот вся моя программа Кликните здесь для просмотра всего текста
1
|
||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
|
| 01.06.2018, 15:22 [ТС] | |
|
Спасибо помогло но есть еще 1 вопрос.
Как переместить скролл на видимость выбранной метки. Выбор происходит через CheckListBoxPackage Точки на карте являются массивом TImage Кто в курсе как это сделать.
0
|
|
|
|
|
| 01.06.2018, 15:37 | |
|
точки являются массивом точек
ну остыньте на секунду перестаньте кидать компоненты, нарисуйте на бумаге вот абсолютно та же задача Как сделать маркер на большом изображений Image? Дано - оконные координаты объекта (где мы хотим его видеть в окне сейчас), мировые координаты объекта Найти Offset формула для 4-го класса: Оконные = Мировые - Смещение_окна Добавлено через 50 секунд ну и предвосхищая Image поверх Image тухлая идея Просто рисуйте на PaintBox
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||
| 01.06.2018, 17:22 [ТС] | ||
|
Вот с формулой не понял. Есть карта на ScrollBox нужно узнать позици скролинга так чтобы было видно точку когда ее выбираеш в CheckListBoxPackage Также я не зря выбрал именно CheckListBox так как должна быть возможность скрывать точки что также имеет TImage в принципе можно заморочится с спрайтами только не знаю есть ли большой смысл. TImage какбы вместо спрайта. Просто так легче хотя по сути я использую отрисовку на Image точка тав виде картинке но поверх точки еще рисуется номер но это так. Подроности.
0
|
||
|
|
|
| 01.06.2018, 20:04 | |
|
вы когда ставите условие, вы переводите его на язык геометрии
что такое ВИДНО ТОЧКУ это значит ее мировая координата больше смещения окна показа относительно начала карты но меньше этого значения плюс ширина окна если вы знаете что точка должна быть в середине окна, то ее оконные координаты = ширина окна / 2 ; высота окна / 2 ее мировые координаты вы знаете отсюда просто вычесть одно из другого и получим нужные значения Offset, т.е. смещения окна относительно карты они же есть позиции скроллбаров
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||||||
| 01.06.2018, 21:07 [ТС] | ||||||
|
Очевидно я не правильно понял.
0
|
||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||||||
| 04.06.2018, 10:17 [ТС] | ||||||
|
Честно говоря не могу понять что означают Offset
Часть от размера карты. но нет. Для расчетов нельзя использовать позицию скрола так как кликнуть на checkbox можно и 2 раза на одном и томже месте Добавлено через 2 минуты Ну вот так попробывал но не работает
0
|
||||||
|
|
|||
| 04.06.2018, 10:36 | |||
|
1. карта (розовая) большая, в окно не влазит
2. значит окно (белое) смещено относительно начала карты и по X и по Y 3. смещение по-нерусски - Offset 4. значения xxScrollBar.Position это и есть Offset.X и Offset.Y а вот это вообще не понял о чем. в разделе Дано: при выборе в CheckList мы получаем координаты объекта относительно карты координаты объекта относительно окна я уже говорил, зависят, где этот объект в окне вы хотите увидеть в центре, в углу, сбоку. Откуда я знаю, что вы имели в виду
центр окна = (ширина/2;высота/2) верхний левый угол = (0;0) имея два числа из трех в формуле, третье вычислить крайне легко вот это значение и подставить в Scroll.Positiokn
0
|
|||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||
| 04.06.2018, 17:23 [ТС] | ||
|
ScrollBox1.HorzScrollBar.Position := ImgArrayPackage[CheckListBoxPackage.ItemIndex].Left - ScrollBox1.HorzScrollBar.Position; ScrollBox1.VertScrollBar.Position := ImgArrayPackage[CheckListBoxPackage.ItemIndex].Top - ScrollBox1.VertScrollBar.Position; Но он не корректно работает. Например если по 1 номеру кликнуть 2 раз
0
|
||
|
|
|||||||
| 04.06.2018, 17:47 | |||||||
|
зрение так себе, я вижу.
помогу ScrollBox1.HorzScrollBar.Position := ImgArrayPackage[CheckListBoxPackage.ItemIndex].Left - ScrollBox1.HorzScrollBar.Position подставим вместо ScrollBox1.HorzScrollBar.Position offset.X получим
а если более обидно, вообще формулу, в которой переменная зависит сама от себя??? ваша координата ImgArrayPackage[CheckListBoxPackage.ItemIndex].Left это координата относительно карты то место, где в окне БУДЕТ показан ваш Image - координата относительно ОКНА осталось только определить, насколько окно смещено относительно карты где в вашей формуле КООРДИНАТЫ МЕСТА ГДЕ БУДЕТ ОТОБРАЖАТЬСЯ Image относительно НАЧАЛА ОКНА?
0
|
|||||||
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
|
| 04.06.2018, 18:59 [ТС] | |
|
Ну так тогда что у вас XW и YW
Ведь нужно указывать позицию не точки а скролла чтобы эту тачку стало видно. Точки уже имеют позицию и менятся они не будут
0
|
|
|
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,898
|
||||||
| 05.06.2018, 04:41 [ТС] | ||||||
|
Ну ладно Xm по идеи должен быть ImgMap а Xw это точка.
но менять нужно не позицию точки. Точка должна быть на одном месте Добавлено через 7 минут Судя по всем так
0
|
||||||
|
|
|
| 05.06.2018, 15:20 | |
|
пусть у вас Image лежит на scrollbox и его координата Left = 1000 (ImgArrayPackage[nnn].Left)
тогда если вы сделаете ScrollBox.HorzScrollBar.Position = 1000 то этот Image будет в вашем окне у самого левого края что не так??
0
|
|
| 05.06.2018, 15:20 | |
|
Помогаю со студенческими работами здесь
20
Перехват события прокрутки в TScrollBox Управление TScrollBox через TScrollBar Удаление под элементов компонента TScrollBox
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|