Как заставить Shape реагировать на Click? - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Проблема следующая: Есть рисунок, на нем 5 Shape'ов, при нажатии на определенный из этих пяти, что-то должно меняться. Shap'ы ясно дело невидимые Сейчас обдумываю сделать через "Form_MouseDown" и проверять где кликнули, на каком из этих 5ти. Только тоже пока не понятно как и что запрашивать... Может быть есть путь попроще, без Shape'ов? С уважением

Решение задачи: «Как заставить Shape реагировать на Click?»

textual
Листинг программы
Option Explicit
 
Private Points(1 To 5) As POINTAPI
Private RegionDictionary As Dictionary
 
Private Declare Function FrameRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function GetStockObject Lib "gdi32" (ByVal nIndex As Long) As Long
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function PtInRegion Lib "gdi32.dll" (ByVal hRgn As Long, ByVal X As Long, ByVal Y As Long) As Long
 
Private Const BLACK_BRUSH = 4
 
Private Type POINTAPI
        X As Long
        Y As Long
End Type
 
 
Private Sub Form_Load()
    Dim lp As Long
    Dim myrgn As Long
    
    Me.ScaleMode = vbPixels
    Me.Show
    DoEvents
    
    Set RegionDictionary = New Dictionary
 
    For lp = 0 To 225 Step 55
        Points(1).X = lp
        Points(1).Y = lp
        Points(2).X = lp
        Points(2).Y = lp + 50
        Points(3).X = lp + 25
        Points(3).Y = lp + 25
        Points(4).X = lp + 50
        Points(4).Y = lp + 50
        Points(5).X = lp + 50
        Points(5).Y = lp
    
        myrgn = CreatePolygonRgn(Points(1), 5, 1)
        FrameRgn Form1.hdc, myrgn, GetStockObject(BLACK_BRUSH), 1, 1
        RegionDictionary.Add "Region " & (lp / 55) + 1, myrgn
    Next
End Sub
 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim lp As Long
    
    ' loop through all regions to see if we get a hit
    For lp = 0 To RegionDictionary.Count - 1
        If PtInRegion(RegionDictionary.Items(lp), X, Y) Then
            MsgBox "We are in: " & RegionDictionary.Keys(lp)
        End If
    Next
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы