Disabilitare Pulsante X

Non so se vi e' mai capitato, ma se in una form volete evitare che venga chiusa dal pulsantino X o dal menu del form e volete lasciare la finestra dimensionabile (con tanto di pulsante per la riduzione ad icona e massimizzazione), avrete non pochi problemi con le proprieta' standard e, se ci riuscite, inviatemi pure le informazioni che aggiornero' questa pagina.

Nel caso non vi riesca, vi spiego cosa fare per ottenere tale effetto.

In un modulo e' necessario dichiarare le seguenti informazioni:

Public Const SC_CLOSE = &HF060
Public Const MF_BYCOMMAND = &H0&

Queste due costanti indicano la "posizione" del menu da eliminare ed un flag di operazione.

Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long

La prima funzione ci permettera' di ottenere l'handle di riferimento del menu di sistema della form, mentre la seconda di eliminare una voce dal menu stesso.

Fatto cio' non bisogna far altro che dire al form di eliminare appunto la voce del menu.

Per farlo nel form da trattare dovremo prima di tutto recuperare l'handle del menu di sistema:

hMenu = GetSystemMenu(Me.hWnd, False)

dove hMenu e' stata definita come long

ed a questo punto eliminare la voce del menu:

DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND

Ora mi direte ma cosi' ho eliminato il menu, non il pulsantino ed avrete perfettamente ragione in effetti il pulsante non viene eliminato ma il sistema si accorgera' che la funzione non e' utilizzabile e conseguentemente disabilitera' il pulsante.