![]() |
![]() Sincronizza Indice |
![]() Scarica il progetto |
![]() Testo dell'articolo |
![]() Stampa l'articolo |
In alcuni programmi si può rendere necessario disabilitare il
pulsante di chiusura
Per disabilitare il pulsante di chiusura rimuoveremo la voce Chiudi
dal menu di sistema Passiamo subito alla dichiarazione delle funzioni API:
Abbiamo dichiarato 4 funzioni API
ed una costante. Alla riga 7 abbiamo dichiarato una costante MF_BYPOSITION che servirà da parametro per la funzione RemoveMenu. Nel nostro progetto effettueremo la disabilitazione del menu al caricamento del form, identificato dall'evento Load del form. Vediamo le istruzioni:
La riga 10 definisce una variabile di nome HandleMenu che utilizzeremo
per memorizzare l'handle del menu
di sistema. Come quasi tutte le variabili utilizzate dalle funzioni API,
anche questa è dichiarata come Long.
Come prima operazione otterremo l'handle del menu di sistema del form. La funzione GetSystemMenu richiede come parametro l'handle della finestra contenente il menu. Il valore restituito da questa funzione verrà memorizzato all'interno di HandleMenu. D'ora in poi utilizzeremo questa variabile per indicare alle altre funzioni API il menu di sistema. Alla riga 13 utilizzeremo la funzione GetMenuItemCount passandogli come parametro l'handle contenuto all'interno della variabile HandleMenu. Questa funzione ci restituisce un numero intero rappresentante il numero di voci contenute all'interno del menu, valore che memorizzeremo nella variabile VociMenu. Quest'operazione è necessaria poiché la funzione che rimuove una voce di menu richiede la sua posizione ordinale all'interno del menu. Ebbene, analizziamo queste tre situazioni:
Se in fase di progettazione cambiamo alcune proprietà del form, viene alterato il menu di sistema del form. Ragion per cui non possiamo decidere a priori quale elemento eliminare. Però abbiamo una situazione utile dal nostro lato: in tutti i casi la voce Chiudi è sempre l'ultima ed il separatore è sempre prima di essa. Ecco il perché utilizzeremo la funzione GetMenuItemCount: essa ci dirà di quanti elementi è composto il menu di sistema. Conoscendo questo provvederemo ad eliminare gli ultimi due elementi.
Quando si effettua l'eliminazione di più voci di menu è
bene tenere a mente due cose: i menu iniziano il loro conteggio da 0 e
subito dopo l'eliminazione di una voce da un menu, il numero complessivo
diminuisce di 1. Questo significa che se, inizialmente, le voci di menu
sono 7 e vogliamo eliminare le ultime due voci, dobbiamo comunicare all'API
di cancellare dal menu le voci 6 e 7, ma poiché le voci sono a
base 0, i numeri da passare per eliminare sono 5 e 6. Ma, ricordiamo questa
cosa importante: se eliminiamo la voce 5 del menu, tutte le successive
diminuiscono di una posizione. L'originaria 6 diventa 5. Ecco perché alla riga 14, eliminiamo l'ultima riga (VociMenu - 1) ed in seguito eliminiamo la penultima (VociMenu - 2).
In seguito alla modifica, alla riga 17, comunichiamo all'API di ridisegnare la barra dei menu tramite la funzione DrawMenuBar.
Prima di provare il programma è necessario scrivere una funzione
sostitutiva al pulsante di chiusura, che abbiamo disabilitato. Al click
sopra il pulsante Chiudi abbiamo comunicato al form di chiudere
se stesso. |
Naturalmente si consiglia di non abusare di comandi del genere. Lo standard
Windows stabilisce che il metodo più naturale per chiudere un form
è il pulsante di chiusura Inoltre, una volta disabilitato il pulsante di chisura, non sarà possibile riabilitarlo. Prima di chiudere questo argomento voglio rivelarvi un piccolo segreto:
esiste un modo più semplice per elimininare la voce Chiudi
di un form. Abbiamo voluto utilizzare questa soluzione per stimolare il
calcolo e permettere l'estensione del codice.
Fibia
FBI
|
![]() |