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
|