Formulario

Hola,
Tengo una macro que llama a un formulario "userfrom.sow", hasta aquí bien. Lo que me gustaría seria que no se pudiera mover de la intentar que le marque aunque el usuario lo intente. ¿Cómo se puede hacer?
Gracias por tu ayuda.
Saludos.

1 respuesta

Respuesta
1
Puedes usarlo usando APIS
En un módulo de clase:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Property Set Form(oForm As Object)
If Val(Application.Version) < 9 Then
hWndForm = FindWindow("ThunderXFrame", oForm.Caption) 'XL97
Else
hWndForm = FindWindow("ThunderDFrame", oForm.Caption) 'XL2000
End If
Set moForm = oForm
End Property
En un módulo
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public hWndForm As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public WndProcOld As Long
Public Function WndProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wMsg = WM_NCLBUTTONDOWN Then '*
If wParam = HTCAPTION Then '*
Exit Function '*
End If '*
End If '*
WndProc = CallWindowProc(WndProcOld, hwnd, wMsg, wParam, lParam)
End Function
Public Function SubClass(hwnd As Long)
WndProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WndProc)
End Function
Public Function UnSubClass(hwnd As Long)
Call SetWindowLong(hwnd, GWL_WNDPROC, WndProcOld)
WndProcOld = 0
End Function
En el código del formulario:
Dim nActualizaForm As New Clase1
Private Sub UserForm_Initialize()
Set nActualizaForm.Form = Me
Call SubClass(hWndForm)
End Sub
LISTO!!!
Saludos
Private Sub UserForm_Terminate()
Call UnSubClass(hWndForm)
End Sub
Hola,
Esoy muy impresionado con tu rápida respuesta y aun más con el desarrollo tan acertado. Es justo lo que necesitaba. Es increíble lo que me queda por aprender. Si no es mucho abusar, me gustaría pedirte si me puedes hacer algún comentario de como actúa todo el código para yo poder entenderlo.
Gracias por tu tiempo.
Saludos.
No tengo muchos comentarios para hacerte, para ser honesto este código lo encontré hace mucho tiempo en una página de Internet. Las APIS son algo complicadas y sus argumentos en ocasiones son muy "gaseosos" para quienes como yo somos aficionados a la progaramación (mi profesión no tiene nada que ver con los sistemas ni la informática, soy Ingeniero Agrónomo), entonces en esos casos uno debe contentarse con saber que funciona. Sin embargo te diré que entiendo yo del código anterior:
La finción FindWindow es usada para salvar un problema que tiene excel y es que sus formularios no tienen manjador conocido (como en Visual Basic 6.0), me refiero a la propiedad hWnd. Entonces esta función nos ayuda a encontrar cual es el manejador del formulario.
Las Funciones SetWindow y CallWindow sirven para ajustar el estilo del formulario y las constantes declaradas arriba son los parámetros que las funciones tomaran para darle el aspecto y propiedades al formulario a través de su manejador. Si eres usuario de Visual Basic 6.0 te recomiendo que revises el Api Text Viewer y El MSDN para que tengas más claridad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas