Sincronizza Indice |
Scarica il progetto |
Testo dell'articolo |
Stampa l'articolo |
Questa volta proveremo a creare un nuovo controllo utente. L'esempio più semplice è sviluppare una label che cliccandoci sopra apre un indirizzo internet. Per far questo all'interno di un progetto qualsiasi (meglio se uno standard EXE nuovo) inseriamo un controllo utente. Apriamo il menu Progetto e clicchiamo sulla voce Inserisci Controllo Utente . Ci verrà generato una specie di form vuoto, senza bordo. Quello è il nostro controllo. Per prima cosa cambiamone il nome e chiamiamolo Collegamento semplicemente impostando la proprietà Name. Cambiamo anche la proprietà AutoRedraw ed impostiamola a True, per evitare spiacevoli errori grafici; infatti se questa proprietà è impostata a True, il computer si occuperà di ridisegnare il controllo ogni volta che esso viene cambiato e noi non dovremo occuparcene più. Dentro il nostro controllo Inseriamo una Label e chiamiamola EtichettaIndirizzo.
Cambiamo subito lo stile ed il colore del carattere attraverso la proprietà
Font e la proprietà ForeColor. Impostiamo per essa il classico
blu in grassetto sottolineato utilizzato in quasi tutti i browser.
Impostiamo anche la proprietà AutoSize a True per fare calcolare al computer la dimensione necessaria per il nostro testo. Impostiamo il testo d'essa attraverso la proprietà Caption e settiamola a Clicca per visitare il sito. Posizioniamo la Label in alto a sinistra, alle coordinate 0,0 in modo da non sprecare spazio inutile che non è utilizzato dalla Label. Allo stesso scopo ridimensioniamo il nostro controllo Collegamento e diamogli la stessa dimensione della EtichettaIndirizzo. Questo può essere fatto visivamente o attraverso i valori delle proprietà Height e Width. Noi utilizzeremo questo secondo metodo. Il primo è facilmente applicabile ma meno preciso. Per cui clicchiamo una volta su EtichettaIndirizzo e guardiamo i valori delle proprietà di grandezza:
Nota: Questi valori in alcuni computer potrebbero essere diversi, perché l'utente può cambiare le impostazioni del computer dal Pannello di controllo di Windows. Ora facciamo corrispondere le stesse grandezze al controllo Collegamento. Selezioniamo il controllo o cliccandoci su o scegliendolo dalla finestra delle proprietà. Impostiamo quindi la proprietà Width a 2400 (2370 + 30 per evitare di tagliare la scritta in alcuni punti), e la proprietà Height a 195. Ora i due oggetti dovrebbero corrispondere. L'unica pecca è che ora non possiamo più cliccare sopra il controllo, ma soltanto sulla sua label. Se volessimo cambiare qualcosa del controllo dovremmo scegliere Collegamento dalla finestra delle proprietà. Abbandoniamo la finestra di progettazione ed andiamo al codice vero e proprio. Dichiariamo una variabile privata visibile soltanto al controllo e invisibile a tutto il resto del progetto. Il suo nome sarà Indirizzo e dentro questa sarà memorizzato l'indirizzo a cui andare quando l'utente clicca sopra il nostro controllo. La dichiarazione di questa variabile sarà:
Nella zona delle dichiarazioni inseriamo questa Declare API:
Questa dichiarazione API permette l'uso della funzione ShellExecute, che corrisponde via codice al classico doppio click sopra un'icona qualunque. Utilizzeremo questa funzione per aprire il browser predefinito ed andare all'indirizzo voluto.
Ragioniamo ora intorno all'interfaccia... Quando il programmatore cambia il valore della Label EtichettaIndirizzo essa automaticamente prende la dimensione esatta minima per il testo contenuto, poiché la proprietà AutoSize è impostata a True. Ma così non avviene per il controllo Collegamento, perché non è disponibile la proprietà AutoSize per esso. Per cui se la label viene impostata ad una grandezza superiore a quella del controllo, una parte della label non sarà visibile. Per evitare questo facciamo in modo che ogni volta che la EtichettaIndirizzo cambia dimensione, anche il controllo Collegamento cambia la sua dimensione. Sfruttiamo l'evento Change della label EtichettaIndirizzo con:
Quando l'utente clicca sopra la Label, che é l'unico oggetto cliccabile, in quanto la superficie del controllo è coperta da essa, deve essere chiamato il browser predefinito. Sfruttiamo la funzione API dichiarata prima:
La funzione appena vista dice al computer di aprire ("open") l'indirizzo contenuto nella variabile Indirizzo e mostrare la finestra in modalità normale (vbNormalFocus). Ora bisogna fare in modo che la variabile interna Indirizzo prenda il valore che noi preferiamo. Essendo una variabile Private, non sarà possibile aver accesso dall'esterno del controllo. Per questo ci serviremo di una proprietà nuova, che chiameremo URL. Questa proprietà sarà di lettura e scrittura, per permetterne il cambiamento e la lettura del valore. Prima di iniziare a scrivere le proprietà è importante chiarire il concetto di Borsa delle Proprietà detta PropertyBag. Tutte le proprietà di un controllo impostate in fase di progettazione devono essere memorizzate nella borsa delle proprietà, altrimenti il loro valore sarebbe perduto. Inoltre in fase di esecuzione tutti i valori delle proprietà devono essere estratti dalla borsa e memorizzati nelle loro proprietà. Vedremo più avanti come utilizzare la borsa delle proprietà. Per definire la scrittura della proprietà URL scriviamo:
La parola chiave Let identifica la scrittura della proprietà. Il parametro Stringa Nuovo_URL è il nuovo valore dato alla proprietà. Se noi scrivessimo:
Verrebbe chiamata la funzione che modifica la proprietà, cioè
la Let URL e come parametro avrebbe "http://www.sitomio.it".
Definiamo ora la lettura della proprietà URL, scrivendo:
Quest'istruzione molto semplice dice al computer che quando abbiamo bisogno di utilizzare la proprietà URL ci restituisca il valore della variabile Indirizzo. Allo stesso modo dobbiamo permettere di cambiare la scritta all'interno della EtichettaIndirizzo, cioè la proprietà Caption. Ma la nostra label non sarà direttamente accessibile all'esterno del controllo, ragion per cui è necessario definire una nuova proprietà al controllo. Chiameremo questa nuova proprietà Caption, lo stesso nome della proprietà della label. Anche questa proprietà sarà di lettura e scrittura. Definiamo quindi:
Queste istruzioni effettuano il mapping, cioè la corrispondenza della proprietà Caption del controllo con la proprietà Caption della Label EtichettaIndirizzo. Anche in questa proprietà abbiamo la notifica alla borsa delle proprietà del cambiamento della proprietà Caption. Qui il nostro lavoro può giungere alla fine. Ci mancano soltanto
le due operazioni citate prima, cioè l'estrazione dei dati dalla
borsa delle proprietà e la loro memorizzazione. Selezioniamo tale evento e scriviamo:
Il parametro PropBag è la borsa delle proprietà
del nostro controllo. Ce la fornisce in automatico l'evento ReadProperties. Sviluppiamo ora l'operazione di scrittura delle proprietà nella borsa, che avviene nel momento in cui termina la fase di esecuzione e si ritorna alla fase di progettazione.
Quest'operazione potrà sembrare molto sciocca, ma Visual Basic non ricorda il contenuto di alcune proprietà impostate in fase di progettazione all'uscita dell'esecuzione del programma. Dobbiamo quindi riscrivere tali valori nella borsa delle proprietà. Tecnicamente il nostro controllo Collegamento è finito qui.
Avremmo anche potuto richiamare la funzione EtichettaIndirizzo_Change, che effettua la medesima operazione, ma abbiamo voluto semplificare il codice. Il nostro controllo finisce qui. Passiamo ora alla prova sopra un form.
Prima di poterlo utilizzare, tuttavia, è necessario chiudere la
finestra di progettazione del controllo. Inseriamone uno sopra il form, impostiamo le proprietà Caption
e URL, eseguiamo il progetto e vedremo realizzati i nostri sforzi. |
Se volessimo sfruttare questo controllo in un altro progetto possiamo utilizzare la voce Inserisci Controllo Utente dal menu Progetto. Lì selezionare la voce esistente e cercarsi la cartella dove è salvato il nostro controllo. Possiamo estendere il nostro controllo inserendo nuove proprietà, cambiando il puntatore del mouse a forma di manina quando l'utente posiziona il mouse sopra il nostro controllo, fare in modo che ogni controllo possa cambiare il colore del testo, e tante altre cose, sempre tenendo sott'occhio una cosa: la Borsa delle Proprietà. Per facilitare l'utilizzo del nostro controllo potremo anche creare una pagina delle proprietà dove sono raccolte le proprietà del controllo. La generazione di una pagina delle proprietà verrà affrontata in un'altra sezione. Una versione più completa di questo controllo utente è l'FBI Hyperlink reperibile nella sezione Controlli utente. Fibia
FBI
|
Torna all'introduzione delle Richieste dei lettori |