Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Avete presente l'IDE di Visual Basic? La soluzione più semplice ed anche migliore consiste nell'utilizzare l'API ed i messaggi delle finestre. Per un discorso più approfondito sui messaggi vedi la sezione informazioni aggiuntive.
Nel nostro esempio inseriremo tre controlli (tanto per dare l'idea e provare il nostro codice): una DirListBox di nome Dir1, un CommandButton di nome Command1 ed una TextBox di nome Text1. Per il momento lasciamoli lì, inutilizzati. Per effettuare lo spostamento di questi controlli utilizzeremo due dichiarazioni
API: la ReleaseCapture e la SendMessage. La funzione ReleaseCapture rilascia l'oggetto selezionato in modo da redirigere i messaggi nella maniera più idonea. Non è necessario ripristinare l'oggetto attivo perché di questo si occuperanno tanti altri eventi. La funzione SendMessage serve per inviare un messaggio specifico ad una determinata finestra. Nel nostro esempio invieremo il messaggio che permette lo spostamento del controllo. Passiamo al nostro codice; innanzitutto dichiariamo le nostre funzioni API:
Dichiariamo anche due costanti utilizzate per definire il messaggio che permette lo spostamento di un controllo:
Per evitare di dover riscrivere ogni volta il codice di spostamento del controllo abbiamo scritto le istruzioni di spostamento all'interno di una sub. Per distinguere un controllo dall'altro utilizzeremo il suo handle:
In questa funzione c'è poco da commentare: viene semplicemente rilasciato l'oggetto attivo tramite la funzione API ReleaseCapture e poi viene inviato tramite la funzione API SendMessage il messaggio SC_DLG_NO_UI associato a WM_NCLBUTTONDOWN alla finestra il cui handle è quello passato alla funzione. Per spostare un controllo utilizzeremo l'evento MouseDown associato
ad ogni controllo. Se il tasto del mouse premuto sarà quello sinistro,
verrà chiamata la funzione MuoviControllo vista poco prima.
Come possiamo vedere, la chiamata dei diversi controlli, differisce soltanto per l'handle passato alla funzione. A questo punto possiamo provare il nostro progetto: una semplice operazione
di trascinamento provoca lo spostamento del controllo trascinato. Ovviamente
ad ogni riavvio del form tutti i controlli torneranno alla loro posizione
originale perché non abbiamo una funzione di salvataggio delle
posizioni dei controlli.
|
L'utilizzo dei messaggi delle finestre semplifica enormemente la scrittura di codici per il calcolo delle coordinate di movimento del controllo. Esiste una seconda soluzione funzionante però soltanto su Windows
9x. Consiste nell'utilizzare i messaggi WM_SYSCOMMAND e SC_MOVE. Fibia
FBI
|
Torna all'indice degli HowTo |