viernes, 17 de octubre de 2008

Regiones para tus forms en vb6

Hola ahora voy a postear como dibujar regiones para derle la forma que quieras a tus forms en vb6, es un antigüo codigo que tengo generado por Arturo Guzman Guerra, que me ha servido en algunos programas que he hecho.


En fin aqui va el codigo con explicación:

Declaraciones de constantes , tipos y funciones:

'Región con las partes que se interpolan entre dos regiones
Public Const RGN_AND = 1
'Región mediante la copia de una de las regiones origen
Public Const RGN_OR = 2
'Región con las partes de dos regiones que no se solapan
Public Const RGN_XOR = 3
'Región con las partes de una región que no interseccionan con la otra
Public Const RGN_DIFF = 4
'Región mediante la copia de una de las regiones origen
Public Const RGN_COPY = 5
'Redundantes pero bueno
Public Const RGN_MAX = RGN_COPY
Public Const RGN_MIN = RGN_AND

'Tipo de dato RECT
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Type POINTAPI
x As Long
y As Long
End Type

'Región eliptica o circular mediante 4 coordenadas
Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
'Región eliptica o circular mediante una estructura RECT
Public Declare Function CreateEllipticRgnIndirect Lib "gdi32" (lpRect As RECT) As Long
'Región poligonal
Public Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
'Región consistente en una serie de poligonos
Public Declare Function CreatePolyPolygonRgn Lib "gdi32" (lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
'Región rectangular
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
'Región rectangular con una estructura RECT
Public Declare Function CreateRectRgnIndirect Lib "gdi32" (lpRect As RECT) As Long
'Región rectangular con los bordes redondeados
Public Declare Function CreateRoundRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, ByVal Y3 As Long) As Long
'Para convinar varias regiones en una
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
'Establece la región en la ventana correspondiente
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Forma de uso, en este caso se toma la forma rectangular con bordes redondeados, el cual lleva 6 valores el primer par son X1 e Y1, los cuales son lado izquierdo y parte superior del form, X2 e Y2, lado derecho y parte posterior del form, y por último X3 e Y3, este ultimo par da el grado de redondeo de cada esquina es un valor para los cuatro vertices , solo que con un valor separado para las X y otro para las Y, en fin aca va su aplicación:

Public Sub EstablecerRegionPruebas()
Dim Retorno As Variant
Dim RGN, RGN2 As Long
RGN = CreateRoundRectRgn(10, 0, 320, 190, 40, 40)
Retorno = SetWindowRgn(frmPruebas.hWnd, RGN, True)
End Sub