yo lo hago usando por API de esta forma:
primero creas un modulo (con el nombre que quieras)
en ese modulo copias este codigo:
'***** INICIO DEL MODULO *******
'****************************************************
'********** MODIFICAR BOTON CERRAR VENTANA **********
'****************************************************
Public Declare Function GetSystemMenu Lib "user32" _
(ByVal hWnd As Long, ByVal bRevert As Long) As Long
Public Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _
(ByVal hMenu As Long, ByVal nPosition As Long, _
ByVal wFlags As Long, ByVal wIDNewItem As Long, _
ByVal lpString As Any) As Long
Public Declare Function DrawMenuBar Lib "user32" _
(ByVal hWnd As Long) As Long
'
Public Const MF_BYCOMMAND = &H0&
Public Const MF_ENABLED = &H0&
Public Const MF_GRAYED = &H1&
'Private Const MF_DISABLED = &H2&
'
Public Const SC_CLOSE = &HF060&
'****************************************************
'****************************************************
'****************************************************
'
'*********************************************************
'************* HABILITAR/DESHABILITAR CERRAR *************
'*********************************************************
'** esta parte es opcional ponerlo en el modulo, **
'** se puede poner en el load_form que quieras **
'** luego explicare porque **
'*********************************************************
Public Sub cmdDeshabilitar_Click()
' Deshabilitar el botón de cerrar el formulario
Dim hMenu As Long
'
hMenu = GetSystemMenu(hWnd, 0)
' Deshabilitar el menú cerrar del formulario
Call ModifyMenu(hMenu, SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED, -10, "Close")
'
' Si esta llamada se hace dentro del Form_Load,
' no es necesario redibujar los menús
' Redibujar los menús
Call DrawMenuBar(hWnd)
'
End Sub
'
Public Sub cmdHabilitar_Click()
' Habilitar el botón de cerrar el formulario
Dim hMenu As Long
'
hMenu = GetSystemMenu(hWnd, 0)
' Esto lo habilita, pero sigue en gris
Call ModifyMenu(hMenu, -10, MF_BYCOMMAND Or MF_ENABLED, SC_CLOSE, "Close")
' Redibujar los menús
Call DrawMenuBar(hWnd)
'
End Sub
'*********************************************************
'*********************************************************
'*********************************************************
'******* FIN DEL MODULO ************
ahora en cualquier FORM que tengas o MDIForm en la parte del load pones lo siguiente: Supongamos que es un MDI
Private Sub MDIForm_Load()
call cmdDeshabilitar_Click()
End Sub
Supongamos que es un Form comun y corriente
Private Sub Form_Load()
call cmdDeshabilitar_Click()
End Sub
esto va hacer que el boton cerrar [X] quede deshabilitado como un boton sin codigo, por mas que le das click, el boton no hace nada.
pero si quieres que el boton quede deshabilitado y desactivado (no clickeable) entonces debes poner el codigo de cmdDeshabilitar_Click() al cargar el form de esta manera:
Private Sub Form_Load()
'************* DESHABILITAR CERRAR ******************
Dim hMenu As Long
hMenu = GetSystemMenu(hWnd, 0)
Call ModifyMenu(hMenu, SC_CLOSE, MF_BYCOMMAND Or MF_GRAYED, -10, "Close")
'**************************************************************
End Sub
Esta es la forma que uso en XP no lo he probado en otro windows (digo porque es usando api) espero te sirva
Salud!