Страница: 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 | 
 
		
			Поиск по форуму