Страница: 1 |
|
Вопрос: как использовать IntersectRect
|
Добавлено: 18.02.08 19:58
|
|
Автор вопроса: Nikolai | ICQ: 455504541
|
можно поподробней msdn а уже прочитал толку нет во всяком случае для меня
ещё вопрос из MSDN:
В этом примере на форме рисуется линия.
Пример
Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics as System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawLine(myPen, 0, 0, 200, 200)
myPen.Dispose()
formGraphics.Dispose()
Компиляция кода
Этот метод нельзя вызвать в обработчике событий Form_Load. Если был изменен размер формы или форма была скрыта другой формой, рисунок перерисовываться не будет. Чтобы сделать автоматическую перерисовку, нужно переопределить метод OnPaint.
Отказоустойчивость
Для любого объекта, потребляющего системные ресурсы (например, объекты Pen и Graphics), всегда нужно вызывать Dispose.
вставил в Private Sub Form1_Activated...
но линии нет
может нужен Imports
Ответить
|
Номер ответа: 1 Автор ответа: Георгич
Вопросов: 16 Ответов: 52
|
Профиль | | #1
|
Добавлено: 18.02.08 21:58
|
Как я понял, ты хочешь, чтобы линия появлялась сразу с загрузкой формы
и не исчезала никогда , если это так , то тут всё просто
Делай так
Public Class Form1
Inherits System.Windows.Forms.Form
" Код, автоматически созданный конструктором форм Windows "
 im Граф As Graphics = Me.CreateGraphics
 im Карандаш2 As New Pen(Color.GreenYellow, 5)
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Карандаш2.StartCap = Drawing2D.LineCap.RoundAnchor ‘ /для красоты у меня линия с маркером в начале, можеш так , Карандаш2.StartCap = Drawing2D.LineCap.Flat
Граф.DrawLine(Карандаш2, 10, 20, 100, 300)
End Sub
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed
Граф.Dispose()
Карандаш2.Dispose()
End Sub
End Class
Ответить
|
Номер ответа: 3 Автор ответа: Георгич
Вопросов: 16 Ответов: 52
|
Профиль | | #3
|
Добавлено: 19.02.08 23:21
|
Опять не так всё сложно, есть такой метод, как Refresh, который перерисовывает объект, в нашем случае, форму Me.Refresh()
Стрелочки удерживай дольше пальчиком, а то, x = x + 1 означает прибавку одного пикселя
Также, если надо, поработай над координатами, длинны отрезка, ну типа
Dim z As Integer = 100 + (x * 10)
 im u As Integer = 300 + (y * 10)
Граф.DrawLine(Карандаш2, x, y, z, u)
И что это, у тебя, в событии за обработчик « Me.KeyDown » ведь надо « MyBase.KeyDown» Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
-----------------------------------------------------------------------------------
Dim x As Integer = 10
Dim y As Integer = 20
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
Карандаш2.StartCap = Drawing2D.LineCap.Flat
Карандаш2.StartCap = Drawing2D.LineCap.Custom
Граф.DrawLine(Карандаш2, x, y, 100, 300)
End Sub
Private Sub Form1_KeyDown1(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Right Then
x = x + 1
Me.Refresh()
End If
If e.KeyCode = Keys.Left Then
x = x - 1
Me.Refresh()
End If
If e.KeyCode = Keys.Down Then
y = y + 1
Me.Refresh()
End If
If e.KeyCode = Keys.Up Then
y = y - 1
Me.Refresh()
End If
End Sub
Ответить
|
Номер ответа: 7 Автор ответа: Георгич
Вопросов: 16 Ответов: 52
|
Профиль | | #7
|
Добавлено: 25.02.08 00:12
|
Вот тебе прога наверно, разберешься, в коде я тебе вёс подписал
Смысл такой, когда Лайба(метка lblBall ) ,проходит над PictureBox1, то Лайба меняет цвет и появляется надпись "Это жёлтый квадрат" продолжает, двигается дальше, а когда натыкается на кнопку tmrBounce , то падает вниз и прыгает как мяч появляется надпись "Ой кнопка !!!"
Public Class Form1
Inherits System.Windows.Forms.Form
" Код, автоматически созданный конструктором форм Windows "
Dim Ys As Boolean = False
 im Да As Boolean = False
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
tmrBounce.Enabled = False 'Отключаем таймер
tmrBounce.Interval = 50 'Устанавливаем скорость таймера
Timer1.Enabled = False 'Отключаем таймер
Timer1.Interval = 10 'Устанавливаем скорость таймера
'Назначаем шрифт
Label2.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
'Назначаем шрифт
Label3.Font = New System.Drawing.Font("Microsoft Sans Serif", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(204, Byte))
End Sub
Private Sub butStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butStart.Click
tmrBounce.Enabled = True 'Включаем таймер
End Sub
 im gDirX As Integer = 1
 im gDirY As Integer = 1
Private Sub tmrBounce_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrBounce.Tick
lblBall.BringToFront() 'Помещаем Лайбу на передний план
lblBall.Left = lblBall.Left - 5 * gDirX
lblBall.Top = lblBall.Top - 5 * gDirY
' Отскок от левого края формы
If lblBall.Left <= 0 Then
gDirX = -1
End If
' Отскок от правого края формы. Учитываем ширину мячика
If lblBall.Left >= ClientSize.Width - lblBall.Width Then
gDirX = 1
End If
' Отскок от верхнего края формы
If lblBall.Top <= 0 Then
gDirY = -1
End If
' Отскок от нижнего края формы. Учитываем ширину мячика
If lblBall.Top >= ClientSize.Height - lblBall.Height Then
gDirY = 1
End If
Label1.Text = "Координаты верхнего левого угла Лайбы : " & lblBall.Location.ToString
Label1.Refresh() 'Перерисовка Лайбы
End Sub
' Текущая позиция объекта
 im cy As Integer
' Нижняя граница формы
 im floorY As Integer = ClientSize.Height
' Скорость падения
 im ymov As Integer
' Сила притяжения
 im gravity As Integer = 1
' Коэффициент затухания
 im decay As Single = 0.9
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'Задаём движение Лайбы
ymov += gravity
cy = lblBall.Top + ymov ' Падаем вниз
lblBall.Top = cy
If lblBall.Height + lblBall.Top >= floorY Then
' Если достигли нижней границы формы,
' то отскакиваем вверх, меняя направление движения
' с затуханием скорости
ymov *= CInt(-1 * 0.9)
lblBall.Top = floorY - lblBall.Height
End If
End Sub
Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
 im g As Graphics = Me.CreateGraphics() 'Создаём объект рисования
 im p As New Pen(Color.Green, 3) 'Назначаем карандаш
'Создаём прямоугольник равный размерам кнопки и на том же месте
 im newRectangle As New Rectangle(butStart.Left, butStart.Top, butStart.Width, butStart.Height)
g.DrawRectangle(p, newRectangle) 'Рисуем на форме
'Самое важное в этой программе. Если указанная точка принадлежит указанной области, то True. Я взял заточку lblBall.Location , а область newRectangle
If newRectangle.Contains(lblBall.Location) Then
Ys = True
End If
If Ys Then
tmrBounce.Enabled = False 'отключаем таймер
Timer1.Enabled = True 'Включаем таймер
Label3.Text = "Ой кнопка !!!"
End If
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
End Sub
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
 im g As Graphics = Me.CreateGraphics() 'Создаём объект рисования
 im p As New Pen(Color.Gold, 10) 'Назначаем карандаш
'Создаём прямоугольник равный размерам PictureBox1 и на том же месте
 im Rectangle As New Rectangle(PictureBox1.Left, PictureBox1.Top, PictureBox1.Width, PictureBox1.Height)
g.DrawRectangle(p, Rectangle)
If Rectangle.Contains(lblBall.Location) Then
Да = True
End If
If Да Then
Label2.Text = "Это жёлтый квадрат"
lblBall.BackColor = Color.Green
Да = False
ElseIf Да = False Then
Label2.Text = ""
lblBall.BackColor = Color.Red
End If
End Sub
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
End Sub
Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
End Sub
Private Sub lblBall_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblBall.Click
End Sub
End Class
Ответить
|
Страница: 1 |
Поиск по форуму