simply4you.it simply4you.it

   Home
     Articoli, Tutorial...
       Visual Basic
         Lezione 11
Indice
Lez. 01
Lez. 02
Lez. 03
Lez. 04
Lez. 05
Lez. 06
Lez. 07
Lez. 08
Lez. 09
Lez. 10
Lez. 11
Lez. 12
Lez. 13
Lez. 14
Lez. 15
Lez. 16
Lez. 17
Lez. 18
Lez. 19
Lez. 20
Lez. 21
Lez. 22
Lez. 23
Lez. 24
Lez. 25
Lez. 26
Lez. 27
Lez. 28
Lez. 29
Lez. 30
Lez. 31
Lez. 32
Lez. 33


Autore
Giorgio Abraini

E-Mail
giorgio102@libero.it

VBItalia.it



Commenta anche tu !  


LINK Visual Basic













   Invia il link di questo articolo ad un amico  Invia ad un amico Visualizza la versione stampabile di questo articolo  Stampa Commenta questo Articolo  Commenta Parlane in Chat  Chat   Parlane sul Forum  Forum

Corsi Programmazione in aula:
ASP, Dreamweaver MX, Flash MX, HTML, Introduzione alla programmazione strutturata, JSP/Servlet, JavaScript, Linguaggio C, Linux programmazione shell, Oracle PL/SQL, Oracle Portal 9.0.2, PHP, Perl, Programmazione Java, Programmazione Java avanzata, Programmazione web Corso avanzato, Programmazione web Corso base, Programmazione web Corso intermedio, XML


Undicesima lezione - Studiare un'applicazione professionale: il Blocco Note di Windows - Terza parte

Nella lezione precedente abbiamo visto come agire nel caso in cui l'utente abbia apporto modifiche al testo senza salvarle: questo controllo non va effettuo solo se l'utente sceglie di creare un nuovo file, ma anche se ne vuole aprire uno già esistente o se vuole chiudere il programma; quindi dobbiamo modificare anche le routine mnuApri e mnuEsci. In questi casi, però, non c'è bisogno di pulire il TextBox, perciò basterà scrivere:

Dim intRisposta As Integer
If blnTextChanged Then intRisposta = MsgBox("Il testo è sto modifico." & _
" Vuoi salvare le modifiche?", vbYesNo + vbQuestion, "Conferma salvaggio")
	If intRisposta = vbYes Then mnuSalva_click 
		'richiamo la routine che permette
		'di salvare le modifiche
	End If

La figura sotto mostra il risulto che si ottiene traverso il codice appena descritto:



Per quanto riguarda l'uscita dal programma, questo controllo viene effettuo solo se l'utente sceglie il menù File->Esci, ma non se preme il pulsante "X" in alto a destra nel form.



In questo secondo caso, infti, non viene certo richiama la routine mnuEsci_click, ma viene genero direttamente l'evento Unload del frmNotePad: pertanto saremo noi a richiamare la routine mnuEsci_click dall'evento Unload:

mnuesci_Click  

A questo punto, se si cerca di aprire un file senza avere salvo le modifiche al file correntemente aperto, succederà questo: compare un messaggio con la richiesta di confermare il salvaggio delle modifiche; se si risponde sì, comparirà una finestra per chiedere il nome del file da salvare, dopodiché comparirà un'altra finestra per chiedere il nome del file da aprire.
Poiché queste due ultime finestre sono identiche, sarà opportuno differenziarle leggermente per evitare confusioni: basterà a questo scopo specificare il titolo della finestra in questo modo:

strNomeFile = InputBox("Inserisci il nome del file:", "Salva")  

nella routine mnuSalva_click, che dà come risulto la seguente finestra:



e:
strNomeFile = InputBox("Inserisci il nome del file:", "Apri")  

nella routine mnuApri_click che permette di visualizzare la seguente finestra:



C'è un altro problema: quando si apre un file, il suo contenuto viene carico in txtFile, e di conseguenza viene genero l'evento Change che imposta blnTextChanged a True; il programma perciò penserà che il testo sia sto modifico dall'utente, anche se in realtà è sto semplicemente aperto.



Per correggere questo "bug" (i "bug", come dovreste sapere, sono gli errori commessi dai programmori nello sviluppo di un'applicazione), basterà aggiornare blnTextChanged in mnuApri_Click aggiungendo in fondo, DOPO l'istruzione txtFile.Text = strTesto:

blnTextChanged = False

Un altro bug da correggere è quello che si verifica quando il file che abbiamo inserito nell'inputbox non viene trovo: ciò può accadere sia perché abbiamo sbaglio a scrivere il nome del file, sia perché non abbiamo inserito il percorso completo del file; infti, se manca il percorso, Visual Basic cercherà il file nella directory corrente, che solitamente è quella in cui risiede l'IDE (ad es. c:\programmi\microsoft visual basic\vb98). Per accertarvi di quale sia la directory corrente, potete scrivere, nella finestra immedia:



e premere "invio"; "?" è un cartere che nella finestra immedia ha lo stesso significo di Print, curdir è la funzione che restituisce, appunto, la directory corrente.
Per ovviare a questo inconveniete useremo, al posto del banale InputBox, le finestre di dialogo standard utilizze da Windows per scegliere i file da aprire o salvare: queste finestre si chiamano CcommonDialog e sono contenute nel file comdlg32.ocx.
Il controllo CommonDialog di norma non è presente nella casella degli strumenti, perciò dobbiamo aggiungerla noi: cliccando col tasto destro del mouse sulla casella degli strumenti, apparirà un menù popup; scegliendo la voce Componenti



apparirà una finestra con una lista di componenti che è possibile aggiungere a quelli standard già presenti nella casella degli strumenti.
Scrolle la lista fino a trovare la voce "Microsoft Common Dialog Control 6.0" (l'ultimo numero potrebbe differire a seconda della versione di Visual Basic installa) e selezionela, poi premete OK.



Nella casella degli strumenti ci sarà un oggetto in più, il controllo Commondialog: selezionelo e inseritelo sul frmNotePad (non importa in quale punto, tanto non sarà visibile durante l'esecuzione del programma).
Questo controllo dispone di diverse interessanti proprietà, che approfondiremo a suo tempo: le cose essenziali da sapere sono che per visualizzare la finestra bisogna utilizzare uno dei metodi Show (nel nostro caso serviranno ShowOpen e ShowSave), e che il nome del file scelto dall'utente è contenuto nella proprietà FileName, insieme al percorso completo; invece il semplice nome del file, senza il percorso, è contenuto nella proprietà FileTitle.
Ora, al posto dell'InputBox, possiamo usare:

CommonDialog1.ShowOpen  
in mnuApri_click, e:
CommonDialog1.ShowSave  
in mnuSalva_click.

Non abbiamo più bisogno della variabile strNomeFile, perché per aprire il file basterà fare:

Open CommonDialog1.FileName For ...  

Do che solitamente col blocco note si aprono i file di testo, impostiamo i tipi di file che è possibile scegliere dalla finestra di dialogo nella casella di riepilogo posta in basso: per fare questo bisogna impostare correttamente la proprietà Filter, secondo questo schema:

descrizione1|filtro1|descrizione2|filtro2  

La descrizione è la voce che compare nella casella di riepilogo, mentre il filtro è una stringa che indica quali file visualizzare; il cartere che separa la descrizione dal rispettivo filtro è la pipe (simbolo "|"), che solitamente si trova sulla tastiera sopra "\"; nel nostro caso basterà fare:

CommonDialog1.Filter="File di testo|*.txt|Tutti i file|*.*"  

Questa riga si può mettere ad esempio nel Form_Load oppure appena prima di visualizzare la finestra di dialogo, o ancora direttamente nella finestra delle proprietà in fase di progettazione; selezionando, nella finestra di dialogo, il tipo "File di testo", saranno visualizzi solo i file con estensione *.txt; selezionando "Tutti i file" saranno visualizzi tutti i file. Ora il nostro blocco note ha un'aspetto un po' più professionale.
Restano ancora un paio di cose da fare (veramente ce ne sarebbero diverse, ma per ora ci accontentiamo così): se l'utente prova a ridimensionare la finestra, avrà la spiacevole sorpresa che il TextBox non si adegua alle dimensioni del form.
Per rimediare a quest'altro bug, dobbiamo sfruttare l'evento Resize del frmNotePad: questo evento è sceno da qualunque operazione di ridimensionamento, e noi non dobbiamo fare altro che rendere uguali le dimensioni del txtFile a quelle del frmNotePad; basterà inserire queste due istruzioni:

txtFile.Width = Me.ScaleWidth - 50 txtFile.Height = Me.ScaleHeight - 50  

Il "-50" serve solo a lasciare un po' di spazio tra il margine inferiore del txtFile e quello del frmNotePad; ho uso la proprietà ScaleWidth al posto di Width, perché la prima misura l'area interna del form: prove a usare Me.Width e vi accorgerete della differenza.
Il secondo problema è che il txtFile è multiline, ma non ha le ScrollBar: è come se nel "vero" Blocco note fosse imposto "A capo automico", e per vedere le righe non visibili nel TextBox dobbiamo usare le frecce per muovere il cursore; per risolvere il problema basterà impostare la proprietà ScrollBars del txtFile su "3 - Both", in modo da avere sia quella orizzontale che quella verticale.



Ora il nostro blocco note è pronto: in un'oretta e con circa 40 righe di codice abbiamo replico in buona parte il Blocco Note di Windows.



<< Lezione Precedente (10 Lezione) Lezione Successiva (12 Lezione) >>




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



   Invia il link di questo articolo ad un amico  Invia ad un amico Visualizza la versione stampabile di questo articolo  Stampa Commenta questo Articolo  Commenta Parlane in Chat  Chat   Parlane sul Forum  Forum