Створення “фальшивої” рядка заголовка у форми, MS Office, Програмні керівництва, статті

Зробив я форму без заголовка (тип кордону – відсутній), а замість рядка заголовка намалював елемент 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 теж тягаються не за будь-яке місце, а саме за панель заголовка).

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*