(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Продолжаем украшать созданный MsgBox

 

В этой статье я описал или, можно сказать, перевел создание собственных диалоговых окон сообщений.

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

В модуль формы frmMsgBox необходимо добавить еще немного кода.

Добавляем в раздел объявления переменных модуля несколько деклараций API и констант:

' для перетаскивания формы мышкой за псевдозаголовок
Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" (ByVal Hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "user32" ()

Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2
 

' для управления состоянием окна

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal Hwnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
    (ByVal Hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowPos Lib "user32" _
    (ByVal Hwnd As Long, _
    ByVal hWndInsertAfter As Long, _
    ByVal X As Long, ByVal Y As Long, _
    ByVal cx As Long, _
    ByVal cy As Long, _
    ByVal wFlags As Long) As Long
Private Declare Function SPIGetWorkArea Lib "user32" Alias "SystemParametersInfoA" _
    (ByVal uAction As Long, _
    ByVal uParam As Long, _
    lpvParam As Rect, _
    ByVal fuWinIni As Long) As Long

Private Const GWL_STYLE = (-16)
Private Const WS_OVERLAPPED = &H0&
Private Const WS_CAPTION = &HC00000
Private Const WS_SYSMENU = &H80000
Private Const WS_THICKFRAME = &H40000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or _
              WS_CAPTION Or _
              WS_SYSMENU Or _
              WS_THICKFRAME Or _
              WS_MINIMIZEBOX Or _
              WS_MAXIMIZEBOX)
Private Const WS_POPUP = &H80000000
Private Const SWP_FRAMECHANGED = &H20
Private Const SWP_NOZORDER = &H4
Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
Private Const SPI_GETWORKAREA = 48

Private Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 

Добавим саму процедуру удаления заголовка у формы подробности см. Скрытие строки заголовка приложения.

' удаление заголовка у формы, но все равно открытия формы как модальной
Private Function NoCaption()
Dim Hwnd As Long
Dim Style As Long
Dim rc As Rect

Hwnd = Me.Hwnd
Style = GetWindowLong(Hwnd, GWL_STYLE)
Style = Style And (Not WS_OVERLAPPEDWINDOW)
Style = Style Or WS_POPUP
SetWindowLong Hwnd, GWL_STYLE, Style
SPIGetWorkArea SPI_GETWORKAREA, 0, rc, 0
SetWindowPos Hwnd, 0, _
(rc.Right - 462) / 2, (rc.Bottom - 174) / 2, _
462, 174, _
SWP_NOZORDER Or SWP_DRAWFRAME
End Function
 

Диалоговое окошко MBox у меня имеет размеры 462 пикселя по ширине и 174 по высоте и появляется в середине экрана. Понятно, что Вы можете изменить эти размеры по своему усмотрению.

Также нарисуем надпись lblInfoTips по верхней границе формы также как описано в Создание "фальшивой" строки заголовка у формы . Установим ее шрифт жирным и белым. По умолчанию зададим надписи название приложения, в случае, если не будет передан параметр Title, будет отображаться эта строка. Для события "Перемещение указателя" надписи добавим следующий код:

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, как описано выше.

Добавим еще несколько небольших дополнений в код:

If Not (StrComp(Me.OpenArgs & vbNullString, "MBox", vbBinaryCompare) = 0) Then
    Cancel = True
    Exit Sub
End If
' вызов процедуры обрезания заголовка
Call NoCaption

Добавим код изменения цвета заголовка:

Select Case MBoxIconStyle
Case vbCritical
    Me.picCritical.Visible = True
    Me.recBorder.BorderColor = RGB(230, 70, 30)
    Me.lblFakeButton1.BackColor = RGB(230, 70, 30)
    Me.lblFakeButton2.BackColor = RGB(230, 70, 30)
    Me.lblInfoTips.BackColor = RGB(230, 70, 30)
Case vbExclamation
    Me.picExclamation.Visible = True
    Me.recBorder.BorderColor = RGB(230, 190, 20)
    Me.lblFakeButton1.BackColor = RGB(230, 190, 20)
    Me.lblFakeButton2.BackColor = RGB(230, 190, 20)
    Me.lblInfoTips.BackColor = RGB(230, 190, 20)
Case vbInformation
    Me.picInformation.Visible = True
    Me.recBorder.BorderColor = RGB(150, 200, 50)
    Me.lblFakeButton1.BackColor = RGB(150, 200, 50)
    Me.lblFakeButton2.BackColor = RGB(150, 200, 50)
    Me.lblInfoTips.BackColor = RGB(150, 200, 50)
End Select
 

и изменим строку присвоения заголовка:

If Len(MBoxTitle) > 0 Then Me.lblInfoTips.Caption = " " & MBoxTitle
 

Теперь можно любоваться бескомпромиссно доработанным MBox'ом.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 10.10.2007 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft 365 Business Basic (corporate)
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Бизнес. Подписка на 1 рабочее место на 1 год
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Утиль - лучший бесплатный софт для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100