Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 04.05.2013
Сообщений: 57

Создание длинного курсора PictureBox

10.04.2023, 15:11. Показов 2379. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Вопросик может и тривиальный, но не нашел ответа: как можно создать "курсор" более длинный в PictureBox? Или может это сделать как-то ускоренно нанесением вертикальных и горизонтальных линий?

В программе есть PictureBox в котором есть некий график с количество отрезков (точек) происовываемых порядка 10 тыс. Хочется сделать так, чтобы относительно курсора были линии по горизонтали и вертикали (на примере красные линии), дабы видеть информацию и сравнивать с числами, нанесенными левее/правее по осям координат.



Пробовал прорисовывать эти линии при обновлении рисунка по MouseMove, но тогда график тормозит (долго прорисовывается)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2023, 15:11
Ответы с готовыми решениями:

Программное создание PictureBox с проверкой, нет ли на его месте другого PictureBox
Здравствуйте! Нужно чтобы при нажатии кнопки создавался PictureBox с определёнными свойствами Location: x, y и SizeMode: Autosize и в него...

Получить координаты курсора внутри PictureBox
Добрый день! Помогите разобраться с проблемкой. Есть форма, на ней PictureBox. С помощью метода MouseMove отображаются координаты...

Как узнать координаты курсора не на всём экране а на PictureBox?
Как узнать координаты курсора не на всём экране а на PictureBox? Не постите все вопросы в одну тему!

26
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
23.04.2023, 12:03
Студворк — интернет-сервис помощи студентам
К сожалению, в последнем варианте, при выводе созданного псевдокурсора выполняется неявное обращение к процедуре обновления графика, и это конечно влияет на скорость отображения всей картинки. Т.е. планируемый эффект не достигнут.
Некоторые замечания:
- скорость отображения фиксировать на релизной сборке;
- для отрисовки графика использовать напрямую Win32 API функции
0
COM‐пропагандист
 Аватар для Замабувараев
936 / 785 / 149
Регистрация: 18.12.2014
Сообщений: 2,256
Записей в блоге: 4
25.04.2023, 16:42
Цитата Сообщение от ovva Посмотреть сообщение
при выводе созданного псевдокурсора выполняется неявное обращение к процедуре обновления графика
А зачем его обновлять если график не изменился? Закешировать готовую картинку с графиком и выводить через BitBlt (или DrawImage).
Поверх графика нарисовать две пересекающиеся прямые — это будет «курсор».
И рендерить можно не всю картинку, а только те места, где «курсор» переместился, это всего два узеньких прямоугольника.
0
84 / 80 / 6
Регистрация: 11.04.2021
Сообщений: 321
Записей в блоге: 7
25.04.2023, 20:12
В этом примере я так и сделал. В Одном PictureBox с названием (Diagramm_i) размешена картинка с графиком, а поверх него PictureBox (FadenKreuz_i) на котором выводиться перекрестие с точными размерами PictureBox (Diagramm_i). Причём PictureBox (Diagramm_i) перезагружать нужда отпадает. Всё работает, просто этот пример никто не счёл подходящим.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Imports System.Drawing.Drawing2D
Public Class Form1
    Private _Pen As New Pen(Color.Red, 2) With {.DashStyle = DashStyle.Solid}
    Private _CurPos As Point
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        With FadenKreuz_i
            .Location = New Point(0, 0)
            .Size = New Size(Diagramm_i.Size.Width - 2, Diagramm_i.Size.Height - 2)
            .Parent = Diagramm_i
            .BackColor = Color.Transparent
        End With
    End Sub
    Private Sub FadenKreuz_i_MouseMove(sender As Object, e As MouseEventArgs) Handles FadenKreuz_i.MouseMove
        Try
            If Diagramm_i.Image Is Nothing Then Exit Sub ' на тот случай если график ещё не загружен
            FadenKreuz_i.Refresh() '
            _CurPos = e.Location
            FadenKreuz_i.CreateGraphics.DrawLine(_Pen, 0, _CurPos.Y, FadenKreuz_i.Width, _CurPos.Y)
            FadenKreuz_i.CreateGraphics.DrawLine(_Pen, _CurPos.X, 0, _CurPos.X, FadenKreuz_i.Height)
        Catch ex As Exception
            If Err.Number = 5 Then Exit Sub
        End Try
    End Sub
End Class
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
25.04.2023, 22:28
Цитата Сообщение от edmonsur Посмотреть сообщение
В этом примере я так и сделал.
Это не пример, так кусок кода не о чем не говорящий. Нужно рассматривать полноценный пример с формированием графика и т.д.
Цитата Сообщение от edmonsur Посмотреть сообщение
Причём PictureBox (Diagramm_i) перезагружать нужда отпадает.
Независимо от ваших заявлений перерисовка графика выполняется.
0
84 / 80 / 6
Регистрация: 11.04.2021
Сообщений: 321
Записей в блоге: 7
26.04.2023, 08:36
Узбагойся ВovvaН, ты самый лучший кодер. И как я дурак смог в этом усомниться

У автора сего поста, графика в виде картинки *так написано. А теперь ткни меня в кусок не говорящего кода и покажи то место в котором стоит Diagramm_i.Refresh() ну или Diagramm_i.invalidate()
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
26.04.2023, 14:01
Цитата Сообщение от edmonsur Посмотреть сообщение
У автора сего поста, графика в виде картинки *так написано.
Где написано. Понятно, что график строится по некоторым данным, а если данных много, то должен обеспечиваться еще и просмотр разных частей графика (скроллинг). Программа с загружаемой откуда-то картинкой графика, по сути, бесполезна.
Цитата Сообщение от edmonsur Посмотреть сообщение
А теперь ткни меня в кусок не говорящего кода и покажи то место в котором стоит Diagramm_i.Refresh() ну или Diagramm_i.invalidate()
А это совсем не обязательно. Нарисовать простую картинку никаких существенных затрат нет и визуально это никак не регистрируется (попробуйте загрузить картинку мегабайт на 100-200). Пример
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Public Class Form8
    Private Sub Form8_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        PictureBox1.Image = Image.FromFile("t1.jpg")
        PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage
        PictureBox2.Size = New Size(PictureBox1.Size)
        PictureBox2.Location = New Point(PictureBox1.Location)
        PictureBox2.BackColor = Color.Transparent
        PictureBox2.Parent = PictureBox1
    End Sub
    Private Sub PictureBox2_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox2.MouseMove
        PictureBox2.Refresh()
        Dim gr As Graphics = PictureBox2.CreateGraphics
        Dim pn As New Pen(Color.Black, 0)
        gr.DrawLine(pn, 0, e.Y, PictureBox2.Width, e.Y)
        gr.DrawLine(pn, e.X, 0, e.X, PictureBox2.Height)
    End Sub
    Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
    End Sub 'поставьте здесь точку останова
End Class
PS. Все только пустые слова. Обсуждать нечего.
0
84 / 80 / 6
Регистрация: 11.04.2021
Сообщений: 321
Записей в блоге: 7
26.04.2023, 14:28
Обсуждать нечего.
строка 5, ошибка. Через .Parent . контрол располагаться внутри другого контрола и чисто логически не может иметь одинаковый размер.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2023, 14:28

Смена картинки в PictureBox при покидании его курсора мыши
Появилась проблема при смене картинки. При наведении мыши, картинка меняется (это сделал так): Private Sub PictureBox4_MouseMove(ByVal...

Определить координаты курсора на PictureBox
Есть PictureBox в ввиде мишени,мне надо высчитать куда я попал курсором,например если в центр,то вывести надпись "10 очков",если...

panel + pictureBox перемешение с помошью курсора
Как правильно cделать перемещение большой картинки на panel с помощью курсора, картинка не должна вылазить за края. Я про бывал...

Проигрывание звука при наведении курсора на PictureBox
Как можно сделать так, что бы при наведении, допустим это будет pictureBox, проигрывался звук mp3 или wav, из папки, в которой он находится?

Изменение картинки в PictureBox при наведении курсора
При наведении на picturebox фон изменяется на другую картинку. Как это сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru