|
5 / 5 / 2
Регистрация: 29.08.2012
Сообщений: 46
|
|
Мышь в виде перекрестия на весь PaintBox (Image)27.01.2016, 16:12. Показов 5806. Ответов 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,013
|
|||||||||||
| 27.01.2016, 19:43 | |||||||||||
Сообщение было отмечено Kvarcenar как решение
Решение
Пример ниже (на основе темы Overlay поверх полноэкранных приложений) позволяет рисовать "крестик" по размерам Image (когда курсор находится над ним).
cpp:
1
|
|||||||||||
|
place status here
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
|
|
| 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,013
|
||
| 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 тоже весь жёсткий диск форматирует Вывести весь текст словами в виде количественного числительного
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|