Создание фигурных форм по средствам API.

Сразу же напишу, что это может быть не лучший способ, при том, что есть возможность положить картинку и вырезать по ней. Но это уже другой разговор. Для начала возьмем форму и вырежем из нее что-нибудь:

Private Type POINTAPI ' Объявление необходимых функций, типов и переменных
X As Long
Y As Long
End Type
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreatePolygonRgn Lib "gdi32" (lpmPnt As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Dim Mouse_Lock As Boolean
Dim mY, mX As Integer
Dim mPnt(3) As POINTAPI ' Здесь я объявил только три, но можно гораздо больше, если хотите
Private Sub Form_Load()
Mouse_Lock = False
End Sub
Private Sub Form_DblClick()
End ' При двойном щелчке выход
End Sub

Private Sub Command1_Click()
mPnt(0).X = 10 * 10 ' Набор координат вырезания в массиве
mPnt(0).Y = 30 * 10
mPnt(1).X = 60 * 10
mPnt(1).Y = 20 * 10
mPnt(2).X = 20 * 10
mPnt(2).Y = 20 * 10
mPnt(3).X = 10 * 10
mPnt(3).Y = 30 * 10
Me.Show
SetWindowRgn hWnd, CreatePolygonRgn(mPnt(0), 4, 1), True 'Если вы сделали больше, то замените 4 на число элементов в массиве при этом учтите, что счет идет с нуля
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mouse_Lock = True ' Если нажата кнопка мыши, то наша переменная True
mX = X ' Записываем, где курсор относительно формы
mY = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Mouse_Lock Then ' Если мышь опущена на форму, то двигаем форму, с учетом положения курсора относительно формы
Form1.Top = Form1.Top + Y - mY
Form1.Left = Form1.Left + X - mX
End If
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Mouse_Lock = False ' Соответственно, если мышь отпустить, то форма освобождается
End Sub


Надеюсь, что я ответил на ваши вопросы. Теперь дело за вами и вашим воображением.

 

Hosted by uCoz