|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|
Мышь в виде перекрестия на весь PaintBox (Image)27.01.2016, 16:12. Показов 5772. Ответов 58
Метки нет (Все метки)
Здравствуйте! Использую PaintBox, но можно поговорить и об Image, т.к. почти одно и тоже)
Задача в следующем: На своём PaintBox (далее PB) сверху (примерно 80% его высоты) у меня отведено под некий график, а в нижней части PB (20%) я вывожу другой график, который идейно связан с верхним. Т.е. каждая точка на нижнем графике "рассказывает" пользователю о состоянии соответствующей точки верхнего графика. Но зрительно проводить вертикаль между далеко отстоящими друг от друга графиками не всем пользователям позволит косоглазие ))) Поэтому возникла идея превратить мышь в вертикаль на всю картинку, которая будет точно показывать, какая точка нижнего графика соответствует какой точке верхнего. Ну, а горизонталь за компанию: значение оси Y показывать будет... хотя особой необходимости в ней нет... так что если от этого зависит решение, то горизонталью я готов пожертвовать ))) Можно использовать OnMouseMove и рисовать линии на PB. Но если перерисовывать всю картинку при каждом движении мышки на 1 пиксель - то PB нереально дёргается (как мониторы компьютеров, которые показывают по телевизору, только быстро), программа иногда вылетает, да и вообще, выглядит это не эстетично и ужасно... Возникла идея создавать новый огромный курсор мыши в виде креста (ведь он не связан графически с PB и своим перемещением зарисовывать изображение на нём не будет). А поскольку расстояния от перекрестия до границ PB всегда будут разными, то создавать этот курсор надо каждый раз новый в OnMouseMove, а не просто загрузить курсор из файла размером в три монитора ))). Может, кто-то знает, как это сделать? Или у кого-то будет оригинальное гениальное решение? Смысл в том, чтоб рисовать крест не на PB и не удалять его, восстанавливая изображение под ним, после того, как мышь ушла в другое место. Заранее, спасибо.
0
|
|
| 27.01.2016, 16:12 | |
|
Ответы с готовыми решениями:
58
Графические компоненты Image, Shape, Chart, PaintBox Image во весь экран |
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 27.01.2016, 17:06 | |
Сообщение было отмечено Kvarcenar как решение
Решение
Когда-то писал программу с применением графиков ( TChart ), и понадобилась возможность использовать крестообразный курсор с лучами на все поле графика. Я использовал два шейпа ( TShape ) - прямоугольники с шириной и высотой соотв. 1 пксл. Видимость их определялась положением мыши (в зоне графиков или вне), а координаты рассчитывались, исходя из данных о позиции курсора и положения поля графиков (в обработчике Chart1MouseMove). Работоспособность вполне приемлемая и мороки немного.
0
|
|
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|
| 27.01.2016, 17:21 [ТС] | |
|
Поездил квадратным Шэйпом по ПэинтБоксу.... ))))
Имидж и ПБ - это такая гадость, что если их другим окном перекрыть, то при сворачивании перекрывающего окна на месте перекрытия рисунка уже нет...
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 27.01.2016, 17:34 | |
|
ПэйнтБокс, как я думаю, - на любителя. Стоит форму с ним сместить частично за пределы экрана, как нарисованное на нем стирается. Если можно без него обойтись, - лучше применять TImage или TPanel.
0
|
|
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|
| 27.01.2016, 17:45 [ТС] | |
|
TImage - с исчезанием ничем не отличается от PB. Использую PB, потому что он при перерисовке в потоке меньше глючит и дёргается, чем имидж (у меня картинка обновляется в реальном времени)... Тут уже у меня тонна текста программы написана под PB, так что менять его на что-то другое не хотелось бы.. если только явного преимущества не даст.. А что TPanel? Она разве для рисования? И нарисованное исчезать не будет? Чё-то сомневаюсь.. Я панели использую, чтоб радиобаттоны на них кидать, чтоб на одной плоскости несколько групп радиобаттонов независимых было... тогда их несколько штук выбирать можно, а не только какой-то один.. )) Кстати, проблема с исчезанием картинки - это ж, вроде, проблема всего Canvas-а, а не только имиджа или пэинтбокса.. В общем, остаётся надежда только на курсор мышки... надо его как-то огромным сделать... мышка на картинку не влияет..
0
|
|
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 27.01.2016, 18:06 | |
|
1
|
|
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
||
| 27.01.2016, 18:21 [ТС] | ||
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 27.01.2016, 19:15 | |
|
0
|
|
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
|
|||||||||||
| 27.01.2016, 19:43 | |||||||||||
Сообщение было отмечено Kvarcenar как решение
Решение
Пример ниже (на основе темы Overlay поверх полноэкранных приложений) позволяет рисовать "крестик" по размерам Image (когда курсор находится над ним).
cpp:
1
|
|||||||||||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
|
|
| 27.01.2016, 19:49 | |
|
Можно обойтись без таймера, поэтому убрал его из кода выше.
0
|
|
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|||
| 27.01.2016, 21:46 [ТС] | |||
|
0
|
|||
|
|
||
| 27.01.2016, 23:36 | ||
|
Но если эту То можно узнать что сказанное про TImage вранье... А что касается TPainBox то что бы такого не было нужно рисовать в событии OnPaint() а не где попало. При необходимости перерисовки вызывать Invalidate() или InvalidateRect(). Добавлено через 6 минут И обычно DoubleBuffered = true; достаточно.
1
|
||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,014
|
||
| 28.01.2016, 00:15 | ||
|
Что касается мерцания (хотя сам сильно не вникал):
0
|
||
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|||
| 28.01.2016, 00:48 [ТС] | |||
|
0
|
|||
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
||
| 28.01.2016, 01:26 [ТС] | ||
В любом случае, спасибо, Вы очень помогли. Картинка не исчезает, перекрестие её не затирает. Шэйпы подёргиваются, поэтому, возможно, переделаю вторым предложенным способом. Проблема, можно сказать, решена. Хотя и не так, как планировалось.. Всем спасибо за участие!
0
|
||
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
||
| 28.01.2016, 16:04 [ТС] | ||
|
0
|
||
|
Практикантроп
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
|
|
| 28.01.2016, 16:31 | |
|
1
|
|
|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
||
| 28.01.2016, 16:52 [ТС] | ||
|
0
|
||
| 28.01.2016, 16:52 | |
|
Помогаю со студенческими работами здесь
20
Как сместить Canvas в PaintBox не смещая PaintBox?
Acronis True Image тоже весь жёсткий диск форматирует Вывести весь текст словами в виде количественного числительного
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|