Страница: 1 |
|
Вопрос: Работа с графикой
|
Добавлено: 26.05.08 00:19
|
|
Автор вопроса: Юрик
|
Господа, помогите чайничку. Нам задали написать простенький граф. редактор типа Paint в 2005 бейсике. Такой вопрос - на чем лучше рисовать? PictureBox, на форме или еще где-то? И самое главное, в том же паинте когда рисуешь линию все ремя отображается ее силует пока не отожмешь конпку. У меня тоже отображается, но сильно мелькает(( Код примерно такой (если убрать все лишнее)
Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBoxl.Paint
MyG2 = PictureBoxl.CreateGraphics()
'pMode указывает какой обьект сейчас отрисовывается, линия или т.д. fStart = 1 в момент между нажатием и отпусканием клавиши, пока отрисовывается силует-контур
If fStart = True Then
If pMode = 1 Then MyG2.DrawLine(Pens.Black, x1, y1, x3, y3)
If pMode = 2 Then MyG2.DrawRectangle(Pens.Black, Math.Min(x1, x3), Math.Min(y1, y3), Math.Abs(x3 - x1), Math.Abs(y3 - y1))
If pMode = 3 Then MyG2.DrawEllipse(Pens.Black, Math.Min(x1, x3), Math.Min(y1, y3), Math.Abs(x3 - x1), Math.Abs(y3 - y1))
End If
PictureBoxl.Image = image1
End Sub
Private Sub PictureBoxl_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBoxl.MouseDown
MyG = Graphics.FromImage(image1)
RSz = Me.ClientSize
RB = Bounds()
fStart = True
dBorder = (RB.Size.Width - RSz.Width) \ 2
x1 = Cursor.Position.X - RB.Left - dBorder - ToolStrip1.Width
y1 = Cursor.Position.Y - RB.Bottom + RSz.Height + dBorder - MenuStrip1.Height
x3 = x1 : y3 = y1
End Sub
Private Sub PictureBoxl_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBoxl.MouseUp
x2 = Cursor.Position.X - RB.Left - dBorder - ToolStrip1.Width
y2 = Cursor.Position.Y - RB.Bottom + RSz.Height + dBorder - MenuStrip1.Height
fStart = False
MyG = Graphics.FromImage(image1)
If pMode = 1 Then MyG.DrawLine(Pens.Black, x1, y1, x2, y2)
If pMode = 2 Then MyG.DrawRectangle(Pens.Black, Math.Min(x1, x2), Math.Min(y1, y2), Math.Abs(x2 - x1), Math.Abs(y2 - y1))
If pMode = 3 Then MyG.DrawEllipse(Pens.Black, Math.Min(x1, x2), Math.Min(y1, y2), Math.Abs(x2 - x1), Math.Abs(y2 - y1))
If pMode = 5 Then
If bRect = True Then x4 = x1 : y4 = y1
MyG.DrawLine(Pens.Black, x4, y4, x2, y2)
bRect = False
End If
x4 = x2 : y4 = y2
'PictureBoxl.BackgroundImage = image1
PictureBoxl.Refresh()
End Sub
Private Sub PictureBoxl_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBoxl.MouseMove
MyG = Graphics.FromImage(image1)
x3 = Cursor.Position.X - RB.Left - dBorder - ToolStrip1.Width
y3 = Cursor.Position.Y - RB.Bottom + RSz.Height + dBorder - MenuStrip1.Height
If (fStart = True And pMode = 4) Then MyG.FillRectangle(Brushes.Black, x3 - 2, y3 - 2, 2, 2)
If (fStart = True And pMode = 6) Then MyG.FillRectangle(Brushes.White, x3 - 2, y3 - 2, 4, 4)
PictureBoxl.Refresh()
End Sub
Ответить
|
Номер ответа: 2 Автор ответа: sasha
Вопросов: 1 Ответов: 4
|
Профиль | | #2
|
Добавлено: 29.05.08 18:49
|
у меня зачёт похож только редактор посложнее и на VB.NET 2008
Код формы на какой осуществляется рисование примерно такой:
Public Class frmPaint
 im d As String
 im IsDraw As Boolean = False
 im XO, YO, X, Y, XPre, YPre As Integer
Public MyG As Graphics
Public Pen1 As Pen = New Pen(Color.Black, 1)
Public Pen2 As Pen = New Pen(BackColor, 2)
 im CurrentPen As Pen
 im l As Integer
Public IsChange As Boolean 'наличие изменений в текущей форме
Private Sub frmPaint_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'PicBox.Image = New Bitmap(128, 128)
PicBox.Image = New Bitmap(PicBox.Width, PicBox.Height)
MyG = picBox.CreateGraphics()
FileOpen(1, "C:\\b.txt", OpenMode.Append)
FileClose(1)
Kill("C:\\b.txt"
FileOpen(1, "C:\\b.txt", OpenMode.Append)
PrintLine(1, " 0"
PrintLine(1, "SECTION"
PrintLine(1, " 2"
PrintLine(1, "ENTITIES"
End Sub
Private Sub PicBox_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicBox.MouseDown
If frmMain.z = 1 Then
XPre = e.X
YPre = e.Y
End If
If frmMain.z = 2 Then
XPre = e.X
YPre = e.Y
End If
If frmMain.z = 3 Then
XPre = e.X
YPre = e.Y
End If
IsDraw = True
'MyG = PicBox.CreateGraphics()
MyG = Graphics.FromImage(PicBox.Image)
If e.Button = Windows.Forms.MouseButtons.Left Then
CurrentPen = Pen1
End If
If e.Button = Windows.Forms.MouseButtons.Right Then
CurrentPen = Pen2
End If
End Sub
Private Sub PicBox_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicBox.MouseMove
If frmMain.z = 0 Then
If IsDraw Then
XPre = X
YPre = Y
X = e.X
Y = e.Y
MyG.DrawLine(CurrentPen, XPre, YPre, X, Y)
picBox.Invalidate()
Else
X = e.X
Y = e.Y
End If
End If
End Sub
Private Sub PicBox_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PicBox.MouseUp
'MyG.Dispose()
'MyG = Nothing
If frmMain.z = 1 Then
X = e.X
Y = e.Y
MyG.DrawLine(CurrentPen, XPre, YPre, X, Y)
PrintLine(1, " 0"
PrintLine(1, "LINE"
PrintLine(1, " 8"
PrintLine(1, "0"
PrintLine(1, " 10"
PrintLine(1, XPre)
PrintLine(1, " 20"
PrintLine(1, YPre)
PrintLine(1, " 11"
PrintLine(1, X)
PrintLine(1, " 21"
PrintLine(1, Y)
picBox.Invalidate()
End If
If frmMain.z = 2 Then
X = e.X
Y = e.Y
If XPre < X And YPre < Y Then
MyG.DrawRectangle(CurrentPen, XPre, YPre, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
If XPre < X And YPre > Y Then
MyG.DrawRectangle(CurrentPen, XPre, Y, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
If XPre > X And YPre > Y Then
MyG.DrawRectangle(CurrentPen, X, Y, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
MyG.DrawRectangle(CurrentPen, X, YPre, Math.Abs(X - XPre), Math.Abs(Y - YPre))
End If
End If
picBox.Invalidate()
End If
picBox.Invalidate()
End If
If frmMain.z = 3 Then
X = e.X
Y = e.Y
If XPre < X And YPre < Y Then
MyG.DrawEllipse(CurrentPen, XPre, YPre, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
If XPre < X And YPre > Y Then
MyG.DrawEllipse(CurrentPen, XPre, Y, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
If XPre > X And YPre > Y Then
MyG.DrawEllipse(CurrentPen, X, Y, Math.Abs(X - XPre), Math.Abs(Y - YPre))
Else
MyG.DrawEllipse(CurrentPen, X, YPre, Math.Abs(X - XPre), Math.Abs(Y - YPre))
End If
End If
picBox.Invalidate()
End If
picBox.Invalidate()
End If
IsDraw = False
End Sub
End Class
Ответить
|
Страница: 1 |
Поиск по форуму