Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика, Рисование элипса по движку мышки 
:(
    Опции темы
ImA
  Дата 27.6.2008, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 8.12.2005

Репутация: нет
Всего: нет



Моё почтение!
пытаюсь написать графическое приложение, чтобы элипс рисовался на сложном фоне без мирцания и изменения цвета, как фона так и самого элипса, например как в графиеском редакторе Paint... застряла на этапе отрисовки оной фигуры по нажатию мыши. 
Код

Public Class Form1
    Dim x0, y0, x1, y1 As Integer
    Dim gg As Graphics
    Dim start As Boolean
    Dim cc As New Pen(Color.Aqua, 3)

    Sub xorline()
        gg.DrawEllipse(cc, x0, y0, x1, y1)
    End Sub

     Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        x1 = e.X
        y1 = e.Y
        x0 = e.X
        y0 = e.Y
        start = True
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If start Then
            xorline()
            x1 = e.X
            y1 = e.Y
            xorline()
        End If
    End Sub

    Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
        ' Dim bmap As Bitmap
        'bmap = New Bitmap(Me.Width, Me.Height, Me.CreateGraphics)
        gg = CreateGraphics()
        'gg = Graphics.FromImage(bmap)
        Dim MyG As Graphics = CreateGraphics()
        Dim MyBrush As New SolidBrush(Color.Purple)
        MyG.FillRectangle(MyBrush, 70, 70, 350, 250)
        Dim MyPen As New Pen(Color.Black, 5)
        MyG.DrawRectangle(MyPen, 50, 50, 400, 300)
        Dim mypen2 As New Pen(Color.Yellow, 5)
        MyG.DrawEllipse(mypen2, 90, 90, 310, 200)
        MyBrush.Color = Color.DarkOrange
        MyG.FillEllipse(MyBrush, 120, 120, 250, 140)
        MyPen.Dispose()
        MyBrush.Dispose()
        MyG.Dispose()
        mypen2.Dispose()
        x0 = -1
        y0 = -1
        start = False
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        gg.Dispose()
        start = False
    End Sub
End Class

в дельфе алгоритм работает без проблем...
как видите, пыталась задействовать битмап, потому что без него мой элипс, пусть и криво (сколько движков мыши - столько и фигур появляется), но рисуется в опеределенном квадрате что ли, который находится в правом нижнем углу...
и такой функции, как moveto нет... 
подскажите, может где-то что-то упустила?
PM MAIL ICQ Jabber   Вверх
diadiavova
Дата 15.8.2008, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 8
Всего: 142



Попробуй так
Код

Public Class EllipseForm
    Inherits Form
    Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
        MyBase.OnPaint(e)
        For Each r As Rectangle In EllipseRectangles
            e.Graphics.DrawEllipse(cc, r)
        Next
        e.Graphics.DrawEllipse(cc, curRect)
    End Sub
    Dim x0, y0, x1, y1 As Integer
    Dim EllipseRectangles As New System.Collections.Generic.List(Of Rectangle)
    Dim curRect As Rectangle
    Dim cc As New Pen(Color.Aqua, 3)

    Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        x0 = e.X
        y0 = e.Y
        EllipseRectangles.Add(curRect)
        curRect = New Rectangle(x0, y0, 0, 0)
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If e.Button = Windows.Forms.MouseButtons.Left Then
            curRect.Width = e.X - x0
            curRect.Height = e.Y - y0
            Invalidate()
        End If
    End Sub
End Class



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0604 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.