Visual Basic, .NET, ASP, VBScript
 

   
 

За период изучения данной СУБД мною накоплено большое количество программного кода, советов, трюков и хитростей в создании баз данных средствами MS Access.

 
     
   
 

Создание "фальшивой" строки заголовка у формы

Надоела мне стандартная строка заголовка у форм. Синяя она ;) и никак не вписывается в общую цветовую гамму программы. 

 

Сделал я форму без заголовка (тип границы - отсутствует), а вместо строки заголовка нарисовал элемент Label, изображающий строку заголовка, но уже моего цвета. Кстати, этот же элемент служит по совместительству и информационной панелью - туда я всякие подсказки юзерам вывожу ;). А так как я могу легко менять в этом элементе шрифты и цвет, то получается намного эстетичнее, особенно, если цветовая тематика программы не сочетается со стандартной синей строкой заголовка.

Понятно, что у пользователя возникает непроизвольное желание таскать форму по экрану за этот псевдо-заголовок, как и все стандартные формы Windows. Вот для возможности этого и предусмотрен следующий код:

 


' Объявляем пару функций API и пару констант
Public Declare Function SendMessage Lib "user32" _
        Alias "SendMessageA" (ByVal hwnd As Long, _
                              ByVal wMsg As Long, _
                              ByVal wParam As Long, _
                              lParam As Any) As Long


Public Declare Sub ReleaseCapture Lib "user32" ()

Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2

 

' а это уже процедура перемещения указателя над элементом lblInfoTips

Private Sub lblInfoTips_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)


Dim lngReturnValue As Long

    If Button = 1 Then
        Call ReleaseCapture
        lngReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, _
        HTCAPTION, 0&)
    End If

End Sub

 

Объявления функций API и констант лучше вынести в отдельный модуль - форм-то много может быть, нечего дублировать те же самые объявления в каждом модуле формы. Если все же решите оставить объявления в модуле формы, то все замените Public на Private.

По верхнему краю формы по всей ширине растянут элемент Label более темного цвета, чем цвет формы, симулирующий строку заголовка формы. Ему дано имя lblInfoTips, и в его событие [Перемещение указателя] вбит код.

Теперь пользователь может привычно ухватиться за панельку и перетащить форму, куда ему надо ;)

Кстати, если вызывать это код для события Form_MouseMove, то можно таскать форму за любую поверхность (конечно, если на форме, где Вы хотите схватиться, не нарисован какой-нибудь элемент управления). Но я предпочитаю давать пользователю возможность привычно перетаскивать форму только за псевдо-заголовок, потому, что это стандарт (обычные формы Windows тоже ведь таскаются не за любое место, а именно за панель заголовка).

 

О том как грамотно выводить подсказки пользователю в этот псевдо-заголовок читайте в Использование строки заголовка формы как места для вывода подсказок 

 

автор кода неизвестен, но проверено мною неоднократно и постоянно используется ;)

 
     

   
   
     
  VBNet рекомендует