
29/11/2006, 11:22
|
 | | | Fecha de Ingreso: enero-2006 Ubicación: ¿Atlantida, Hesperides, Islas afortunadas?
Mensajes: 2.231
Antigüedad: 19 años, 3 meses Puntos: 19 | |
http://www.vb-mundo.com/truco_progra...mover,-etc.htm Cita: Formularios que no se cierran con el botón (x), no se pueden mover, etc
Si eliminamos opciones del menú de control (-) de un formulario impedimos que esas mismas acciones se puedan realizar de otras formas. Si quitamos la opción Cerrar el botón de cerrar el formulario (x) quedará dehabilitado. Si eliminamos la opción Mover el formulario no se podrá mover arratrándolo por la barra de título, etc.
Veamos un ejemplo de cómo impedir el funcionamiento del botón Cerrar de la barra de título :
Declaramos en un módulo :
Codigo:--------------------------------------------------------------------------------
Public Const MF_BYPOSITION = &H400
Public Const MF_REMOVE = &H1000
Public Declare Function DrawMenuBar Lib `user32` _
(ByVal hwnd As Long) As Long
Public Declare Function GetMenuItemCount Lib `user32` _
(ByVal hMenu As Long) As Long
Public Declare Function GetSystemMenu Lib `user32` _
(ByVal hwnd As Long, _
ByVal bRevert As Long) As Long
Public Declare Function RemoveMenu Lib `user32` _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long) As Long
--------------------------------------------------------------------------------
Y para deshabilitar el botón Cerrar eliminamos la opción Cerrar del menú :
Codigo:--------------------------------------------------------------------------------
Dim hMenu As Long
Dim menuItemCount As Long
`Obtenemos un handle al menú de sistema del formulario
hMenu = GetSystemMenu(Me.hwnd, 0)
If hMenu Then
`Obtenemos el número de elementos del menú
menuItemCount = GetMenuItemCount(hMenu)
`Eliminamos el elemento Cerrar, que es el último
`Los elemento empiezan a numerarse en cero por lo que el
`último es menuItemCount - 1
Call RemoveMenu(hMenu, menuItemCount - 1, _
MF_REMOVE Or MF_BYPOSITION)
`Eliminamos la barra de separación que hay justo antes de la opción Cerrar
Call RemoveMenu(hMenu, menuItemCount - 2, _
MF_REMOVE Or MF_BYPOSITION)
`Forzamos el redibujado del menú. Esto refresca la barra de título
`y deja la X deshabilitada
Call DrawMenuBar(Me.hwnd)
End If |