Redondear esquinas de formularios en access

Bueno lo que yo deseo lograr es que mi formulario tenga todas las esquinas redondeadas .Se que se puede hacer, porque buscando en Internet encontré un archivo que muestra un formulario elíptico que adjuntare a esta pregunta.

Quiero que el formulario tenga la siguiente forma

La cuestión es que revise el modulo del ejemplo que descargue y por mi falta de conocimiento no he logrado dar con las lineas en donde se dan los parámetros para darle la forma al formulario

Encontré ademas en Internet los siguientes códigos que probé pero no me funcionaron no se si por mi mala implementan o porque el código es netamente Vb 6.

Option Explicit 
'Declaraciones de funciones Api  
' Crea la región  
Private 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  
'Establece la región  
Private Declare Function SetWindowRgn Lib "user32" ( _  
    ByVal hwnd As Long, _  
    ByVal hRgn As Long, _  
    ByVal bRedraw As Boolean) As Long  
Private Sub Redondear_Formulario(El_Form As Form, Radio As Long)  
Dim Region As Long  
Dim Ret As Long  
Dim Ancho As Long  
Dim Alto As Long  
Dim old_Scale As Integer  
    ' guardar la escala  
    old_Scale = El_Form.ScaleMode  
    ' cambiar la escala a pixeles  
    El_Form.ScaleMode = vbPixels  
    'Obtenemos el ancho y alto de la region del Form  
    Ancho = El_Form.ScaleWidth  
    Alto = El_Form.ScaleHeight  
    'Pasar el ancho alto del formualrio y el valor de redondeo .. es decir el radio  
    Region = CreateRoundRectRgn(0, 0, Ancho, Alto, Radio, Radio)  
    ' Aplica la región al formulario  
    Ret = SetWindowRgn(El_Form.hwnd, Region, True)  
    ' restaurar la escala  
    El_Form.ScaleMode = old_Scale  
End Sub  
Private Sub Form_Load()  
    MsgBox "Quitarle el borde al formulario: Border Style en 0", vbInformation  
    ' Le pasamos el formulario y el radio de redondeo  
    Call Redondear_Formulario(Me, 100)  
End Sub 

Este código de lleno no hace nada solo errores

También encontré este con código muy simple pero según lo que leí de donde lo extraje funciona perfecto

Option Explicit
Private 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
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Sub Form_Load()
  Call SetWindowRgn(Me.hwnd, CreateRoundRectRgn(0, 0, Me.Width / 15, Me.Height / 15, 10, 10), True)
End Sub

Este código me arroja el error en la carga del formulario donde dice Me.Height

Bueno finalmente les dejo el archivo que encontré que el formulario tiene forma elíptica y ademas por lo que note ocupa los mismos criterios en el código comparado con los anteriores que expuse.

Archivo https://drive.google.com/open?id=1bcm2nqImvV_SOBK2irTWutDrgSU5sfMx 

Para ver el código deben abrirlo utilizando la combinación de teclas shift +enter mantenido

1 Respuesta

Respuesta
3

Para poder usar formas irregulares en los formularios, es condición indispensable que ocultes la ventana de Access.

Para eso tienes esta linea en el evento Form_Open del ejemplo que enlazas: fSetAccessWindow (0)

Y obviamente tienes que tener esa función declarada en un módulo (lo que está en el módulo AccessWindow)

Para darle formas a los formularios, necesitas los códigos del módulo FormulariosIrregulares, donde tienes varias funciones para dar distintas formas a los mismos.

Para llamarlos, en el ejemplo lo hace en el evento Form_Load, que llama a la rutina ChangeFormShape.

Luego ya es cuestión de que uses una u otra API de las que están en FormulariosIrregulares para darle una forma u otra, variando los parámetros de esas APIs.

En mi base de datos ya la tengo configurada para que oculte la ventana de acccess y podría copiar los mimos módulos y código del archivo de ejemplo que puse en mi pregunta pero la cuestión es que no se como modificar los parámetros para que funcione tome la forma de solo las esquinas redondeadas.

este es el archivo https://drive.google.com/open?id=1bcm2nqImvV_SOBK2irTWutDrgSU5sfMx de ejemplo que descargue y quiero modificarlo a la forma que espero lograr .Para asi luego aplicarlo a mi bd

No te voy a hacer el trabajo de averiguar cual de las funciones es la que te redondea los bordes del formulario, porque no tengo tiempo ni ganas para ponerme a probar.

Pero con lo que te comenté previamente, no veo qué problema tienes en ir haciendo tu mismo las pruebas. Además, imagino que en la página de dónde bajaste el ejemplo habrá una explicación de lo que hacen las distintas funciones o de cómo usarlo.

Lo único que añadiré al mensaje anterior es que las funciones que dan forma a los formularios son:

ApiCreateEllipticRgn

ApiCreatePolygonRgn

ApiCreateRectRgn

Solo debes ir cambiando la función que usas en Private Sub ChangeFormShape(frm As Form) e ir variando los valores de sus parámetros hasta que encuentres lo que buscas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas