Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
1

Проблема с графикой

16.01.2019, 14:06. Просмотров 1073. Ответов 24
Метки нет (Все метки)

Здравствуйте все. Это вопрос от школьника. В том смысле что я только начал осваивать Visual Basic 2017. И сразу же столкнулся с проблемой. Нужно начертить диагональ на прямоугольной форме без бордюра. Черчу как полагается с помощью DrawLine(). Диагональ чертится, но до конца формы не доводится. В чём проблема?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2019, 14:06
Ответы с готовыми решениями:

Работа с графикой
Как создать кисть, как распылитель в стандартном Paint'е? Прошу о помощи....

Работа с графикой
Доброго времени суток, друзья. Вопрос следующий, есть следующий код Public Class Form1 ...

Работа с графикой. Бильярдный шар
Ребята,всем доброго вечера. Засел с программой в которой нужно графически показать закон сохранения...

Почему не работает код с графикой?
Private Sub Pic1_Click(sender As System.Object, e As System.EventArgs) Handles Pic1.Click ...

Управление графикой в VB.NET 2005
Товарищи, помогите мне пожалуйста!!! Суть: Есть приложение - оболочка для построения графов...

24
ovva
2630 / 2155 / 529
Регистрация: 02.02.2013
Сообщений: 2,030
Записей в блоге: 2
16.01.2019, 17:19 2
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
на прямоугольной форме без бордюра
вероятно, имеется ввиду
vb.net
1
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
Диагональ чертится, но до конца формы не доводится
Вот здесь как-то не очень понятно. Если я рисую
vb.net
1
2
3
4
5
6
Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    Dim p1 As New Point(Me.Width, 0)
    Dim p2 As New Point(0, Me.Height)
    Dim g As Graphics = e.Graphics
    g.DrawLine(Pens.Red, p1, p2)
End Sub
то никаких, описанных вами проблем, нет.
1
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
16.01.2019, 19:00  [ТС] 3
OVVA, Вы правильно написали по поводу бордюра (он же рамка формы). Но я устанавливаю None в дизайнере формы в её свойствах. По идее тоже самое. Затем черчу линию вот так:
vb.net
1
g.DrawLine(Pen, 0, 0, Form.Width - 1, Form.Height -1)
Всё вроде правильно, но линия не дочерчивается до правого нижнего угла формы. И я не знаю что делать.
0
Yury Komar
Модератор
Эксперт .NET
2438 / 2250 / 352
Регистрация: 27.01.2014
Сообщений: 3,992
Завершенные тесты: 1
16.01.2019, 19:04 4
Ломерт Ломерти, покажите скрин вашей формы с недочерченной линией.
И попробуйте заменить Form на Me

И доп. вопрос - у вас возможно усьановлено масштабирование экрана отличное от 100%?
0
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
16.01.2019, 19:37  [ТС] 5
Yuri Komar, высылаю вам скрин с моей формой. И не совсем понял какое масштабирование экрана вы имеете ввиду.
0
Миниатюры
Проблема с графикой  
Yury Komar
Модератор
Эксперт .NET
2438 / 2250 / 352
Регистрация: 27.01.2014
Сообщений: 3,992
Завершенные тесты: 1
16.01.2019, 19:47 6
Лучший ответ Сообщение было отмечено Ломерт Ломерти как решение

Решение

Ломерт Ломерти, ну вот я воспроизвел у себя ваш код, с небольшой правкой, и никаких проблем.

Попробуйте в точности повторить мой код и скажите результат.

vb.net
1
2
3
4
5
6
Public Class Form1
    Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim g As Graphics = e.Graphics
        g.DrawLine(Pens.Black, 0, 0, Me.Width - 1, Me.Height - 1)
    End Sub
End Class
1
Миниатюры
Проблема с графикой  
Yury Komar
Модератор
Эксперт .NET
2438 / 2250 / 352
Регистрация: 27.01.2014
Сообщений: 3,992
Завершенные тесты: 1
16.01.2019, 19:50 7
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
какое масштабирование экрана вы имеете ввиду
я об этом. масштабирование в системе.
0
Миниатюры
Проблема с графикой  
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
16.01.2019, 20:19  [ТС] 8
Yury Komar, вы чертите в классе формы и в процедуре Paint. Я пытался чертить непосредственно в стартовом модуле с процедурой Main() и видимо в этом была моя ошибка. В любом случае спасибо, это лучший ответ. А масштабирование я проверил и системное и в настройках видеокарты. Всё нормально.
0
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
18.01.2019, 00:04  [ТС] 9
Здравствуйте все. Я по поводу вопроса, озвученного в моей предыдущей теме "Проблема с графикой". В той теме я отметил как решение показавшийся мне верным ответ. Но проверить его на практике мне удалось только сегодня. И, как выяснилось, данный ответ не работает. Привожу свой проблемный код, который по идее должен чертить диагональ прямоугольной формы без рамки:
vb.net
1
2
3
4
5
6
    Private Sub Start_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim g As System.Drawing.Graphics = Me.CreateGraphics
        Dim FPn As New System.Drawing.Pen(Drawing.Color.FromArgb(255, 0, 0, 0), 1)
        g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
        g.DrawLine(FPn, 0, 0, Me.Width - 1, Me.Height - 1)
    End Sub
Всё вроде верно. Всё вроде правильно. Но почему-то выводится чистая форма без линии. Что опять не так?
0
_Radik_
47 / 42 / 8
Регистрация: 18.01.2014
Сообщений: 256
18.01.2019, 06:06 10
Dim g ..... - уберите.
Дальше по тексту вместо g поставьте e.graphics
1
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
18.01.2019, 06:25  [ТС] 11
_Radik_, ну уберу я Dim g и куда потом e.Graphics лепить? Кстати уже пробовал вместо Me.CreateGraphics e.Graphics. Результат тот же.
0
_Radik_
47 / 42 / 8
Регистрация: 18.01.2014
Сообщений: 256
18.01.2019, 07:05 12
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
ну уберу я Dim g и куда потом e.Graphics лепить?
это не критично, но это первое что бросилось в глаза, это ж надо додуматься в событии РИСОВАНИИ ФОРМЫ, где уже есть свой "рисовальщик" создавать еще один объект рисования (это я про вашу переменную g).

Но даже с тем маслом масленным, что у вас в коде линия должна рисоваться. Может у вас в коде еще что-то есть что мешает отрисовываться линии
0
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
18.01.2019, 13:15  [ТС] 13
_RADIK_, пожалуйста не пытайтесь мне вынести мозг. Без Dim g код вообще не рабочий и не пропускается компилятором. Никаких других "рисовальщиков" у формы нет.
0
_Radik_
47 / 42 / 8
Регистрация: 18.01.2014
Сообщений: 256
18.01.2019, 13:23 14
Да ни кому твой мозг не нужен, держи его при себе как и свои эмоции. Хотя... рискну предположить, что одно компенсируется другим
0
Orlangur1991
1514 / 1254 / 312
Регистрация: 28.11.2014
Сообщений: 1,935
18.01.2019, 13:29 15
Ломерт Ломерти,
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
Привожу свой проблемный код
Проблема в другом месте
Проблема с графикой
1
MrCrown
914 / 875 / 210
Регистрация: 03.10.2012
Сообщений: 905
18.01.2019, 14:15 16
Ломерт Ломерти, у вас есть два варианта
1. Или выкладывайте сюда весь проект (ошибка не в этом коде), или, еще лучше
2. Начните с чистого листа - создайте новый проект и вставьте этот код
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
ну уберу я Dim g и куда потом e.Graphics лепить?
Здесь и мозг не надо включать, вам уже сказали
Цитата Сообщение от _Radik_ Посмотреть сообщение
вместо g поставьте e.graphics
Если так не понятно, то
vb.net
1
2
3
4
5
Private Sub Start_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim FPn As New System.Drawing.Pen(Drawing.Color.FromArgb(255, 0, 0, 0), 1)
        e.Graphics.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
        e.Graphics.DrawLine(FPn, 0, 0, Me.Width - 1, Me.Height - 1)
    End Sub
1
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
18.01.2019, 18:46  [ТС] 17
MrCrown, в моём проекте нет ничего секретного. Два простеньких модуля и форма. Проект только начинается. Вот стартовый модуль:
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Module Base
    ' Основной модуль. Основа всего.
    Public Zas As New Start ' Объект первой формы. Заставка программы.
 
    Sub Main() ' Стартовая процедура. Основа всего.
        MVars.SHeight = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height ' Получаю высоту экрана.
        MVars.SWidth = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width ' Получаю ширину экрана.
        Zas.Height = CInt(MVars.SHeight * 0.6) ' Устанавливаю высоту заставки.
        Zas.Width = CInt(MVars.SWidth * 0.6) ' Устанавливаю ширину заставки.
        Zas.BackColor = System.Drawing.Color.White ' Устанавливаю белый цвет формы.
        Zas.Show() ' Вывожу заставку программы.
        System.Threading.Thread.Sleep(10000)  ' Делаю пятисекундную задержку.
    End Sub
End Module
Вот второй модуль:
vb.net
1
2
3
4
5
Module MVars
    ' Модуль хранения математических переменных.
    Public SHeight As Integer ' Переменная хранения высоты экрана.
    Public SWidth As Integer ' Переменная хранения ширины экрана.
End Module
Вот класс формы (я пока в нём ничего не менял):
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
Public Class Start
 
    Private Sub Start_Load(sender As Object, e As EventArgs) Handles MyBase.Load
 
    End Sub
    Private Sub Start_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim g As System.Drawing.Graphics = Me.CreateGraphics
        Dim FPn As New System.Drawing.Pen(Drawing.Color.FromArgb(255, 0, 0, 0), 1)
        g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
        g.DrawLine(FPn, 0, 0, Me.Width - 1, Me.Height - 1)
    End Sub
End Class
И вот где-то здесь ошибка. А за подсказку по поводу e.Graphics большое спасибо.
0
_Radik_
47 / 42 / 8
Регистрация: 18.01.2014
Сообщений: 256
18.01.2019, 18:57 18
Объект Zas висит в воздухе, он не является ни чем child'ом. Если этот Zas должен быть на основной форме (например Mainform), то нужно, чтобы mainform стал parrent'ом Zas.

Me.controls.add(Zas)

Добавлено через 3 минуты
Всю эту канитель с объектами и их родственными связями удобно рассматривать по аналогии с фотошопными слоями
0
ovva
2630 / 2155 / 529
Регистрация: 02.02.2013
Сообщений: 2,030
Записей в блоге: 2
18.01.2019, 19:37 19
Проект вы так и не выложили, к сожалению. Вы выложили код. И если этот код вставить в новый проект (форма без рамок), то все будет нарисовано, как и задумано из одного угла формы в другой.
Цитата Сообщение от Ломерт Ломерти Посмотреть сообщение
Основной модуль. Основа всего.
Ну, это вы напрасно. Если проект определен как WinForm (что разумно предположить), то ваша процедура Main вообще не должна выполняться.
Если вы собрались сделать программу с заставкой, то стоило поинтересоваться, как это делали другие. Хотя бы через поиск на этом форуме.
Разобраться в вашем творчестве можно только получив проект целиком. Папку с проектом нужно заархивировать и приложить к вашему сообщению.
0
Ломерт Ломерти
0 / 0 / 0
Регистрация: 16.01.2019
Сообщений: 10
18.01.2019, 20:54  [ТС] 20
ovva, я вас понял. прилагаю проект к сообщению.
0
Вложения
Тип файла: zip Мой проект.zip (440.3 Кб, 6 просмотров)
18.01.2019, 20:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2019, 20:54

Лаги при работе с графикой со свойством BackgroundImage
Значит вот такой лажа на Vb.NET 1.Имеется frm_main и этой форме присвоено свойство...

"Потехи" мои с графикой
Упаси Бог. Это мое "творение" не для сравнение с Paint-om, но при трудолюбии и желания - можно...

Проблема с графикой?!
Привет, All! пытаюсь вывести спрайт с маской на форму, получается какаято беда пример взял...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru