Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Статьи - Евгений Ипатов -

Visual Basic 5.0/6.0 - Окна и формы

Все статьи / Интерфейс / Окна и формы

Нестандартная форма

Автор: Евгений Ипатов | добавлено: 03.03.2010, 17:55 | просмотров: 6552 (1+) | комментариев: 0 | рейтинг: *x10
Первое что бросается в глаза, когда первый раз используешь программу это конечно же её облик, внешний вид. Есть вероятность что если пользователю не понравится внешний вид окна, то он не будет пользоваться продуктом. Значит нам, не побоюсь этого слова, программистам нужно как можно лучше, удобнее, понятнее, красивее и приветливее сделать лицо программы. Нужно как можно эффектнее преподнести программу.
С самого первого появления 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

Вот так.
Наверняка есть ещё много способов сделать нестандартную форму.

Это один из множества примеров создания более привлекательного интерфейса, я думаю Вы и сами придумаете много способов как сделать «лицо программы» более приветливым.
+ Добавить в избранное
    ? Помощь
Об авторе

Евгений Ипатов

Нет информации об авторе...

См. также:
Профиль автора
Евгений Ипатов
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики