Nona lezione - Studiare un'applicazione professionale: il Blocco Note di Windows
Nella precedente lezione abbiamo visto che gli operori logici, se applici a variabili numeriche, eseguono un confronto bit a bit dei due operandi (o dell'operando, nel caso si usi l'operore Not): ora vediamo in quali casi è utile utilizzare questo tipo di confronto.
Supponiamo di avere una serie di tributi relivi a un oggetto: questi tributi possono essere presenti singolarmente, oppure essere presenti contemporaneamente ad altri; ad esempio, gli tributi di un file (archivio, nascosto, sistema, sola lettura) possono essere presenti uno per uno, oppure anche più di uno insieme.
Per sapere quali tributi possiede un determino file, essi vengono memorizzi come un numero: infti ad ogni tributo corrisponde un preciso valore; all'tributo archivio corrisponde il valore 32, all'tributo nascosto corrisponde il valore 2, all'tributo sistema corrisponde 4 e all'tributo sola lettura corrisponde 1.
Così, se il valore degli tributi di un file è 2, sapremo che quello è un file nascosto, e viceversa; se invece il file, oltre ad essere nascosto, è anche di sola lettura, allora il valore dei suoi tributi sarà 3, cioè 2+1. Non è un caso, infti, se i valori dei singoli tributi sono tutti potenze di 2 (anche 1 è potenza di 2: 1 = 2 ^ 0): in questo modo non ci sono possibilità di equivoci nel caso siano presenti più di un tributo, perché la somma di potenze di 2 sarà sempre diversa da una potenza di 2.
Ora, supponiamo che il valore degli tributi del file pippo.txt sia 34: come facciamo a sapere quali tributi corrispondono a 34 ?
Bisogna considerare il corrispondente valore binario:
00100010 (34)
-------------
00100000 (32)
00000010 (2)
Come si vede, 34 è la somma di 32 e 2 perché sono imposti (cioè valgono 1) il secondo e il sesto bit (a partire da destra, come sempre), che corrispondono appunto alle potenze:
2 ^ 1 = 2
e :
2 ^ 5 = 32
In questo caso è molto semplice capire quali sono i bit imposti, ma ovviamente non è sempre così: per capirlo senza fare troppa fica è sufficiente usare l'operore And con i valori giusti. Nel nostro caso sappiamo che i valori possibili sono 1, 2, 4, 32 oppure una loro combinazione; ebbene, eseguendo l'And con ognuno di questi valori sapremo subito quali bit sono imposti:
34 And 1 = 0
34 And 2 = 2
34 And 4 = 0
34 And 32 = 32
I valori diversi da 0 sono proprio 2 e 32, quindi sappiamo che il valore 34 corrisponde agli tributi nascosto e archivio.
Allora, se ad esempio volessimo cercare tutti i file nascosti all'interno di una directory, potremmo eseguire questo controllo (per ogni file):
If inttr And vbHidden Then
dove inttr è la variabile che contiene il valore degli tributi del file in esame, e vbHidden è una costante di VB che assume proprio il valore dell'tributo Hidden (nascosto), cioè 2: la condizione
inttr And vbHidden
sarà diversa da 0 (e quindi True) solo se il file è nascosto; potrebbe anche avere altri tributi, ma a noi interessa solo che sia nascosto.
Altri esempi dell'uso del confronto bit a bit li vedremo man mano che se ne presenterà l'occasione.
Ora ricominciamo coi nostri progetti d'esempio: uno dei modi migliori per imparare un linguaggio di programmazione è provare a replicare un'applicazione "professionale", che conosciamo già e che sappiamo già utilizzare; per cominciare, nuralmente, è bene partire da un'applicazione semplice, ad esempio il Blocco Note di Windows.
Innanzitutto bisogna capire da quali controlli è costituita l'applicazione: nel caso del blocco note è facile vedere che esso comprende un menu e un'area bianca in cui scrivere il testo; quest'area bianca non è altro che un TextBox.
Cominciamo allora con l'aprire un nuovo progetto, inseriamo un TextBox sul form e chiamiamolo txtFile, mentre il form lo chiamiamo frmNotePad e come Caption gli diamo "Blocco Note - VBItalia"; trasciniamo txtFile in modo che l'angolo superiore sinistro coincida con l'angolo superiore sinistro di frmNotePad e poi ridimensioniamolo in modo che occupi tutta l'area disponibile in frmNotePad (vedi figura sottostante):
Lo stesso risulto si può ottenere selezionando txtFile e impostando a 0 le proprietà Top e Left nella finestra delle proprietà; le proprietà Height e Width vanno invece imposte con lo stesso valore delle proprietà ScaleHeight e ScaleWidth di frmNotePad.
Già che ci siamo, impostiamo la proprietà Multiline di txtFile su True, in modo che sia possibile visualizzare il testo su più righe e la proprietà ScrollBars su 2 in modo da visualizzare una barra di scorrimento verticale sulla destra di txtFile.
Ora inseriamo il menù, cominciando dal menù File, il più importante: per farlo dobbiamo visualizzare il nostro form (se non è visibile ande sul menù Finestra o clicce due volte sulla voce giusta nella finestra di Gestione Progetti) e visualizzare l'Editor di Menù dal menù Strumenti, oppure premere l'apposito pulsante sulla barra degli strumenti (nella configurazione standard è il terzo pulsante da sinistra).
L'Editor di Menù permette di impostare le principali proprietà delle voci del nostro menù: prima di tutto bisogna scegliere la Caption, ossia la stringa che appare sul menù, nel nostro caso "File"; poi bisogna impostare il nome del menù, ad es. "mnuFile": il prefisso "mnu" indica, secondo le convenzioni di sintassi, che si trta appunto di una voce di menù; le altre opzioni per ora potete lasciarle così come sono.
Ora che abbiamo il nostro menù File, bisogna inserire le apposite voci: per semplificarci il compito inseriremo solo le voci "Apri", "Salva", "Esci"; clicchiamo quindi sul pulsante "Successivo", che crea un'altra voce di menù, scriviamo la caption "Apri…", scriviamo il nome "mnuApri" e infine premiamo il pulsantino con la freccia verso destra: nella lista dei menù che compare in basso vedremo che la voce "Apri…" è preceduta da tre puntini, i quali indicano che Apri è un sottomenù di File;
clicchiamo ancora su "Successivo", scriviamo la caption e il nome per la voce "Salva": VB intuisce che si trta ancora di un sottomenù di File, per cui non c'è più bisogno di premere il pulsante con la freccia verso destra; ripetiamo il procedimento per la voce Esci.
Ora che abbiamo disegno il nostro menù File, possiamo premere OK: sul frmNotePad vedremo quindi il nostro menù, e cliccandoci sopra vedremo le sue voci; cliccando infine su una delle voci si aprirà la finestra del codice in corrispondenza della routine click di quella voce di menù.
Ora dobbiamo inserire il codice per l'apertura e il salvaggio dei file e per la chiusura dell'applicazione: occupiamoci prima dei file.
Per sapere quale file aprire o con quale nome salvare il testo che l'utente ha inserito nel textbox txtFile si potrebbe utilizzare la finestra di dialogo standard di Windows, proprio quella che usa lo stesso Blocco Note o qualunque altra applicazione di Windows, ma per ora ci accontentiamo di un semplice inputbox, ovvero una finestrella che chiede l'inserimento di una stringa: nel nostro caso questa stringa sarà il nome del file.
Prima di tutto, però, dobbiamo dichiarare le variabili che ci serviranno: queste saranno il nome del file da aprire o salvare e il contenuto di questo file;
cominciamo dunque a inserire, nella routine mnuApri_Click, le istruzioni:
Dim strNomeFile As String
Dim strTesto As String
StrNomeFile = Inputbox("Inserisci il nome del file:")
La funzione Inputbox è quella che fa comparire l'omonima finestra:
Come parametri richiede obbligoriamente il prompt, ovvero il messaggio visualizzo nella finestra, e facoltivamente il "titolo" della finestra, cioè la stringa che compare nella barra del titolo; gli altri parametri, tutti facoltivi, per ora non ci interessano: comunque sulla guida trove tutte le informazioni necessarie.
Il valore restituito dalla funzione è proprio ciò che l'utente inserisce nella casella di testo contenuta nella finestra, e noi assegniamo questo valore a una nostra variabile locale.
Una volta saputo il nome del file, dobbiamo aprirlo e leggerne il contenuto: per fare questo dobbiamo utilizzare l'istruzione open e quelle ad essa college.
Open serve ad aprire un file in lettura e/o scrittura: questa istruzione sarà analizza in dettaglio più avanti, ora è sufficiente sapere che per utilizzarla è necessario indicare il nome del file da aprire, la modalità di apertura (in parole povere se vogliamo aprirlo per leggere e/o per scrivere) e un numero di file che verrà utilizzo per identificare univocamente il file che abbiamo aperto; la sintassi è la seguente:
Open nome del file For modalità di apertura As #numero del file
Noi conosciamo il nome del file, sappiamo che vogliamo aprirlo per leggerlo (quindi la modalità sarà input) e do che è il primo file che apriamo possiamo usare 1 come numero di file:
Open strNomeFile For Input As #1
dopodiché dobbiamo leggerne il contenuto: esiste una funzione apposita, Input, che vuole sapere quanti byte deve leggere e da quale file; il numero di byte da leggere è estamente uguale alla lunghezza del file, che possiamo recuperare traverso la funzione LOF (Length Of File):
strTesto = Input(LOF(1),1)
Il testo letto da Input() viene così memorizzo in strTesto.
Ora che abbiamo letto il contenuto del file, possiamo anche chiuderlo:
Close 1
Ricorde di chiudere sempre i file aperti che non vi servono più, perché finché restano aperti non saranno accessibili da altre applicazioni.
Ora non ci resta che visualizzare ciò che abbiamo letto:
txtFile.Text = strTesto
Se volete, potete già provare ad avviare il progetto e ad aprire qualche file: per chiuderlo non possiamo ancora usare il menù File->Esci perché non abbiamo inserito le istruzioni necessarie, però è sufficiente cliccare sulla "x" nel form.
Il progetto sarà completo con la prossima lezione, perciò ora salve il progetto (menù File->Salva progetto).
Note sul corso:
I diritti di ognuna delle lezioni presente in queste pagine appartengono all'autore Giorgio Abraini. La riproduzione e la divulgazione delle stesse sono consentite solamente dietro citazione di fonte ed autore.
Per suggerimenti, consigli o richieste conttare giorgio102@libero.it.
Fonte : VBItalia.it