Inicio
 
Nuestra Empresa
Nuestros Servicios
Contactenos
     
 

Trucos Varios I

Control redimensionable

Cualquier control que tenga un Hwnd puede hacerse "redimensionable", es decir que cuando esté en ejecución se pueda cambiar el tamaño, para ello hay que usar una serie de llamadas del API.
Veamos las declaraciones del API, así como un procedimiento genérico para hacerlo redimensionable.
Este procedimiento espera un parámetro que será el control al que se le quiere dar esa característica, en el procedimiento he puesto una rutina de detección de errores por si el control que se le pasa no soporta esta característica.
'Declaraciones del API para 32 bits
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cX As Long, ByVal cY As Long, ByVal wFlags As Long) As Long
Const GWL_STYLE = (-16)
Const WS_THICKFRAME = &H40000
Const WS_CHILD = &H40000000
Const SWP_DRAWFRAME = &H20
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4
Private Sub Dimensionable(ByVal elControl As Control)
Dim Style As Long
'Por si el control pasado no se puede redimensionar
On Local Error Resume Next
Style = GetWindowLong(elControl.hWnd, GWL_STYLE)
Style = Style Or WS_THICKFRAME
Style = SetWindowLong(elControl.hWnd, GWL_STYLE, Style)
Style = SetWindowPos(elControl.hWnd, Me.hWnd, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME)
Err = 0
On Local Error GoTo 0
end Sub
'Para usarlo, se haría así:
Private Sub Form_Load()
Dimensionable Picture1
Dimensionable Text1
End Sub

 

 

 
Enlaces de Programación
Conexiones en Ado
Notas de Interes
Trucos en Visual Basic
Correo
Otros Enlaces
 
 



 

Hecho en Lima - Perú por ® SYL systems

Teléfono : (511) 9921-4893