Подобие системного меню окна - помогите

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Watts[]n!
Постоялец
Постоялец
 
Сообщения: 573
Зарегистрирован: 11.02.2007 (Вс) 0:19

Подобие системного меню окна - помогите

Сообщение Watts[]n! » 23.11.2007 (Пт) 19:00

Всем доброго времени суток!

Делаю некий аналог системного меню окна.
Имеется форма, на которой один над другим расположены Лейблы.
При наведении указателя один из лейблов (тот, над которым указатель) должен изменить цвет фона и шрифта.

Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Y >= 10 Then
        If Y <= 290 Then
            Call closeMenuActive
        End If
    End If
   
    If Y >= 300 Then
        If Y <= 580 Then
            Call moveMenuActive
        End If
    End If
   
    If Y >= 590 Then
        If Y <= 870 Then
            Call miniMenuActive
        End If
    End If
End Sub


Одна из функций изменения цветов:

Код: Выделить всё
Function closeMenuActive()
    lblClose.ForeColor = &HFFFFFF
    lblClose.BackColor = &H808080
    lblMove.ForeColor = &HC0C0C0
    lblMove.BackColor = &H404040
    lblMin.ForeColor = &HC0C0C0
    lblMin.BackColor = &H404040
End Function


Остальные по аналогии.
Столкнулся с такой проблемой: Цвет изменяется не всегда, чаще всего при быстром перемещении курсора.

Заранее благодарен!

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Сообщение Saturn.65 » 23.11.2007 (Пт) 21:30

Пример с одной строчкой без функций.
Код: Выделить всё
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = &H80000012
Label1.BackColor = &H8000000F
Form1.BackColor = &H8000000F
End Sub

Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = vbRed
Label1.BackColor = vbRed
Form1.BackColor = vbRed
End Sub

При наведении все будет красным, при отведении все будет как раньше.

|( () ( T |/| |(
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 211
Зарегистрирован: 01.10.2005 (Сб) 15:49

Сообщение |( () ( T |/| |( » 23.11.2007 (Пт) 23:12

Saturn.65, твой пример мало чем отличаеться от приведённого Watts[]n!

Лучше уж так:
Код: Выделить всё
Private Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseCapture Lib "user32" () As Long

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
If x < 0 Or x > ScaleWidth Or y < 0 Or y > ScaleHeight Then
  Call ReleaseCapture
  Me.Caption = "MouseLost"
Else
  Call SetCapture(Me.hwnd)
  Me.Caption = "MouseMove"
End If
End Sub
С=[::::::::::> ™ e398wallpapers.narod.ru

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 24.11.2007 (Сб) 9:08

Ни черта не понял.
Тебе просто "активный" лэйбл нужен?
Тогда на страничке http://twister.orgfree.com/other/ возъми файл HyperLink.rar - набросал минут за 10...
А я все практикую лечение травами...

Watts[]n!
Постоялец
Постоялец
 
Сообщения: 573
Зарегистрирован: 11.02.2007 (Вс) 0:19

Сообщение Watts[]n! » 25.11.2007 (Вс) 12:59

Все, разобрался... Причем без использования класса Twister'a :)
Большое спасибо всем, кто откликнулся!

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 26.11.2007 (Пн) 6:35

Watts[]n!
Там не класс, а контрол.
Советую свои лэйблы, все же, оформить как контрол - код будет эффективнее.
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 83

    TopList  
cron