RE:Pregunta sobre el form , me pueden ayudar
Aquí tienes un ejemplo
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Sub Form_Load()
Dim Xs As Long, Ys As Long
Ys = Me.Height / Screen.TwipsPerPixelY
‘Si queremos que sea elíptica...
'Xs = Me.Width / Screen.TwipsPerPixelX
‘En cambio si queremos que sea circular…
Xs = Ys
SetWindowRgn hwnd, CreateEllipticRgn(0, 0, Xs, Ys), True
End Sub
‘--------------------------------------
Si quieres que la forma no sea circular Hay que utilizar la función:
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" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
‘Declaramos una estructura del siguiente tipo
Private Type POINTAPI
-X As Long
-Y As Long
End Type
‘Creamos una estructura que es una matriz en la cual vamos a introducir las coordenadas de los puntos de la figura, en el ejemplo es un triángulo.
Dim Puntos(3) As POINTAPI
Dim Region As Long
Private Sub Form_Load()
‘Guardamos las coordenadas del triángulo en la estructura (TwipsPerPixelX es para pasar a unidades gráficas, o algo así, je, je)
Puntos(0).X = (Me.Width / Screen.TwipsPerPixelX) / 2 ‘En la mitad del Form
Puntos(0).Y = 0 ‘En la parte superior
‘Punto(1) es la esquina inferior izquierda
Puntos(1).X = 0 ‘En la parte derecha del Form
Puntos(1).Y = Me.Height / Screen.TwipsPerPixelY ‘En la parte inferior del Form
‘Punto(2) es la esquina inferior derecha
Puntos(2).X = Me.Width / Screen.TwipsPerPixelX
Puntos(2).Y = Me.Height / Screen.TwipsPerPixelY
Region = CreatePolygonRgn(Puntos(0), UBound(Puntos), 1)
SetWindowRgn Me.hwnd, Region, True
End Sub
Nota: - corresponde a una tabulación
Espero que te funcione y te sirva.
Un saludo