Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Исходные коды - Ваня -

Visual Basic 5.0/6.0 - Разработка элементов управления

Все примеры / Интерфейс / Элементы управления Windows / Разработка элементов управления

3D-кнопка

Автор: Ваня | добавлено: 06.03.2010, 10:14 | просмотров: 2529 (1+) | комментариев: 0 | рейтинг: *x0
Простой пример, как можно создать свою 3D-кнопку из PictureBox.

Код

' ВНИМАНИЕ: Разместите на форме PictureBox

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Const BDR_RAISEDOUTER = &H1
Const BDR_SUNKENOUTER = &H2
Const BDR_RAISEDINNER = &H4
Const BDR_SUNKENINNER = &H8
Const BDR_OUTER = &H3
Const BDR_INNER = &HC
Const BDR_RAISED = &H5
Const BDR_SUNKEN = &HA
Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)
Const BF_LEFT = &H1
Const BF_TOP = &H2
Const BF_RIGHT = &H4
Const BF_BOTTOM = &H8
Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
Const BF_DIAGONAL = &H10
Const BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
Const BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL Or BF_TOP Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
Const BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)
Const BF_MIDDLE = &H800 ' Fill in the middle
Const BF_SOFT = &H1000 ' For softer buttons
Const BF_ADJUST = &H2000 ' Calculate the space left over
Const BF_FLAT = &H4000 ' For flat rather than 3D borders
Const BF_MONO = &H8000 ' For monochrome borders
Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Boolean

Private Sub Form_Load()
 ' Always set the ScaleMode to pixels when using API drawing functions.
 ScaleMode = vbPixels
 With Picture1
  ' The next line is not required if you put your drawing code in the Paint event.
  .AutoRedraw = True
  ' Set the Backcolor, set the Borderstyle to none, and size the picture box to a more realistic button size.
  .BackColor = vb3DFace
  .BorderStyle = 0
  .Move 60, 10, 90, 30
  ' Make sure the picture box uses the pixel ScaleMode, and set the tag of the control to a caption for later use with DrawControl.
  .ScaleMode = vbPixels
  .Tag = "3D Button"
 End With
 ' Draw the initial button.
 DrawControl Picture1, Picture1.Tag, EDGE_RAISED
End Sub

' When the picture box gets a click event, an etched box is drawn on the upper left corner of the form.
Private Sub Picture1_Click()
 MsgBox "You Pressed the Button"
End Sub

' When the user presses the mouse down on the picture box a sunken edge is drawn to simulate a depresessed button.
Private Sub Picture1_MouseDown(Button%, Shift%, X!, Y!)
 DrawControl Picture1, Picture1.Tag, EDGE_SUNKEN
End Sub

' When the user releases the mouse over the picture box a standard button is drawn.
Private Sub Picture1_MouseUp(Button%, Shift%, X!, Y!)
 DrawControl Picture1, Picture1.Tag, EDGE_RAISED
End Sub

' The DrawControl helper function is designed to make it easier to draw a button on a picture box.
Private Sub DrawControl(picControl As PictureBox, strCaption As String, Optional vntEdge)
 Dim r As RECT ' Holds the location of the DrawEdge rectangle.
 Dim intOffset% ' Used to shift the caption when the button is pressed.
 ' If the user doesn't provide a Edge flag, then use a default value.
 vntEdge = IIf(IsMissing(vntEdge), EDGE_RAISED, vntEdge)
 ' Clear the picture control and determine where to draw the new rectangle and caption.
 With picControl
  .Cls
  r.Left = .ScaleLeft
  r.Top = .ScaleTop
  r.Right = .ScaleWidth
  r.Bottom = .ScaleHeight
  If vntEdge = EDGE_SUNKEN Then intOffset = 2
  .CurrentX = (.ScaleWidth - .TextWidth(strCaption) + intOffset) / 2
  .CurrentY = (.ScaleHeight - .TextHeight(strCaption) + intOffset) / 2
 End With
 ' Draw the caption, then draw the rectangle.
 Picture1.Print strCaption
 DrawEdge picControl.hdc, r, CLng(vntEdge), BF_RECT
 ' If AutoRedraw is True, then any drawing done by an API call cannot be seen until until the picture box gets refreshed.
 If picControl.AutoRedraw Then picControl.Refresh
End Sub
Обратите внимание
Язык Visual Basic 6.0 является устаревшим. Многие примеры, размещенные на нашем сайте, были созданы еще во времена Windows 98 и могут не работать в современных операционных системах.
Если у вас возникнут какие-либо проблемы или вопросы, вы можете обратиться за помощью на наш форум.
Об авторе

Ваня

Нет информации об авторе...
Ваня
Другие примеры этого автора (всего: 2)
Последние комментарии (всего: 0)

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


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

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