|
Visual Basic 5.0/6.0 - Окна и формыВсе статьи / Интерфейс / Окна и формыНестандартная формаАвтор: Евгений Ипатов | добавлено: 03.03.2010, 17:55 | просмотров: 7255 (0+) | комментариев: 0 | рейтинг:
![]() Первое что бросается в глаза, когда первый раз используешь программу это конечно же её облик, внешний вид. Есть вероятность что если пользователю не понравится внешний вид окна, то он не будет пользоваться продуктом. Значит нам, не побоюсь этого слова, программистам нужно как можно лучше, удобнее, понятнее, красивее и приветливее сделать лицо программы. Нужно как можно эффектнее преподнести программу.
С самого первого появления Windows окна получили прямоугольный стандарт и все User Control’ы ( кнопки, textbox, PictureBox, и др.) тоже не ушли от этого. Уже более 10 лет господствуют эти стандарты, мне кажется нужно вступать в новое, нестандартное поколение окон. Ну что ж, так как в Visual Basic нет специальной функции для создания «кривых» форм, придётся использовать API функции. С их помощью мы сможем делать даже прозрачные и полупрозрачные окна. Ну что нужно начинать. Сначала опишем функции и константы: Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 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 SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Const LWA_COLORKEY = &H1 Const LWA_ALPHA = &H2 Const GWL_EXSTYLE = (-20) Const WS_EX_LAYERED = &H80000 А теперь самое интересное мы сделаем форму «кривой» с помощь прозрачного цвета, в его роли будет выступать белый(если нужно, можно сделать и другой). Private Sub Form_Load() Dim Ret As Long Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE) Ret = Ret Or WS_EX_LAYERED SetWindowLong Me.hwnd, GWL_EXSTYLE, Ret SetLayeredWindowAttributes Me.hwnd, vbWhite, 0, LWA_COLORKEY End Sub Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE) В этой строке мы определяем форму с которой будем работать. SetLayeredWindowAttributes Me.hwnd, vbWhite, 0, LWA_COLORKEY В этой строке мы удаляем, делаем прозрачным белый цвет. Теперь просто вставляем на форму заранее нарисованую картинку, где белые места там прозначное место на форме. Теперь сделаем форму полупрозрачной. Будем использовать теже самые API. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long 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 SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long Const LWA_COLORKEY = &H1 Const LWA_ALPHA = &H2 Const GWL_EXSTYLE = (-20) Const WS_EX_LAYERED = &H80000 Private Sub Form_Load() Dim Ret As Long Ret = GetWindowLong(Me.hwnd, GWL_EXSTYLE) Ret = Ret Or WS_EX_LAYERED SetWindowLong Me.hwnd, GWL_EXSTYLE, Ret SetLayeredWindowAttributes Me.hwnd, 0, 125, LWA_ALPHA End Sub SetLayeredWindowAttributes Me.hwnd, 0, 125, LWA_ALPHA В этой строчке мы делаем форму полупрозрачной. Параметр 125 отвечает за уровень прозрачности(от 0 до 255). Ещё можно сделать форму по контуру текста. Вот так. Описываем функции Private Declare Function BeginPath Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function EndPath Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function PathToRegion Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Const RGN_COPY = 5 Private Sub Form_Load() Const Text = "IpatovSoft" Dim hRgn As Long Font.Name = "Times New Roman" Font.Italic = True Font.Size = 50 Width = TextWidth(Text) Height = TextHeight(Text) BeginPath hdc Print Text EndPath hdc hRgn = PathToRegion(hdc) SetWindowRgn hWnd, hRgn, False End Sub Вот так. Наверняка есть ещё много способов сделать нестандартную форму. Это один из множества примеров создания более привлекательного интерфейса, я думаю Вы и сами придумаете много способов как сделать «лицо программы» более приветливым. ![]()
Добавлять комментарии могут только зарегистрированные пользователи сайта. Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации ![]() Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь. Нет комментариев... |
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
|
|