все метки в форме меняют свойства при фокусе мыши

Я хочу смоделировать игровое меню с помощью меток. Что я хочу сделать, так это то, что когда на него наводится указатель мыши, шрифт становится больше и меняет цвет шрифта. Есть ли уже существующий код для этого, используя только массивы в Visual Basic 6.0? Потому что, если я сделаю это вручную, это займет много времени. Помогите пожалуйста мне.


person Jay Maramag    schedule 27.09.2012    source источник


Ответы (2)


Вам нужно будет поймать мышь, чтобы войти и выйти из событий. Это старо, но вы можете попробовать использовать API TrackMouseEvent для перехвата событий мыши. Вот ссылка, http://www.vbaccelerator.com/home/VB/Code/Libraries/Subclassing/Generating_MouseLeave_Events_for_a_Window/article.asp с классом, реализующим API, и приводит пример его использования. Однако статья устарела и обсуждает ее использование только до Win 95, поэтому вам нужно выполнить быстрый тест, чтобы узнать, поддерживается ли она.

person jac    schedule 27.09.2012

для создания массива меток: поместите метку в форму и присвойте ей индекс 0, который в основном создаст массив из 1 метки, который затем можно расширить в своем коде.

'1 form with :
'    1 label : name=Label1    Index=0
Option Explicit

Private Sub Form_Load()
  Dim intIndex As Integer
  For intIndex = 1 To 4
    Load Label1(intIndex)
    Label1(intIndex).Visible = True
    Label1(intIndex).Caption = CStr(intIndex)
  Next intIndex
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  OnLabel False
End Sub

Private Sub Form_Resize()
  Dim intIndex As Integer
  Dim sngWidth As Single, sngHeight As Single
  Dim sngLblWidth As Single
  sngWidth = ScaleWidth
  sngHeight = ScaleHeight
  sngLblWidth = sngWidth / Label1.Count
  For intIndex = 0 To Label1.Count - 1
    Label1(intIndex).Move intIndex * sngLblWidth, 0, sngLblWidth
  Next intIndex
End Sub

Private Sub Label1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
  OnLabel True
End Sub

Private Sub OnLabel(blnOn As Boolean)
  Dim intIndex As Integer
  Dim intSize As Integer
  Dim lngColor As Long
  If blnOn Then
    intSize = 20
    lngColor = vbRed
  Else
    intSize = 10
    lngColor = vbBlack
  End If
  For intIndex = 0 To Label1.Count - 1
    With Label1(intIndex)
      .FontSize = intSize
      .ForeColor = lngColor
    End With 'Label1(intIndex)
  Next intIndex
End Sub
person Hrqls    schedule 08.11.2012