Надоела мне
стандартная строка заголовка у форм. Синяя
она ;) и никак не вписывается в общую
цветовую гамму программы.
Сделал я форму без
заголовка (тип границы - отсутствует), а
вместо строки заголовка нарисовал элемент
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 тоже ведь таскаются не за любое
место, а именно за панель заголовка).
О том как грамотно
выводить подсказки пользователю в этот
псевдо-заголовок читайте в Использование
строки заголовка формы как места для вывода
подсказок
автор
кода неизвестен, но проверено мною
неоднократно и постоянно используется
;)