Introduzione al Visual Basic
Transcript
Introduzione al Visual Basic
Introduzione al Visual Basic Chi intraprende lo studio di un nuovo linguaggio come il Visual Basic, come primo approccio, fa bene a procurarsi un calcolatore fornito del sistema operativo Windows, del Linguaggio stesso e di un buon word-processor, nonché un editore di immagini. WordPad e Paint fanno già parte di Windows e possono servire benissimo ai nostri scopi, almeno nella fase iniziale. Nel seguito supporremo che il lettore disponga quanto meno della versione Windows95 e di Visual Basic 5.0 per studenti. É ovvio che qualunque versione successiva a quelle dette è altrettanto buona e che il detto software deve essere stato installato correttamente. Windows e i suoi elementi Dal punto di vista del futuro programmatore, Windows è costituito da una finestra di base, che nel seguito individueremo con Screen e che occupa l'intero schermo e su cui sono poggiati degli oggetti a forma di figurine (icone) o altre finestre che, spesso, rappresentano parti di programmi in esecuzione. Gli oggetti Dal nostro punto di vista, tutto ciò che vediamo rappresentato sullo Screen è una finestra, quindi anche le icone, i pulsanti, le etichette, i menù a discesa, le barre di pulsanti, le caselle di testo ecc … Queste finestre, di natura grafica a volte diversissima, sono gli elementi base di Windows o i suoi componenti; ci riferiremo a loro come a oggetti di Windows. Questi oggetti hanno, nonostante il loro diverso aspetto, molte cose in comune e in particolare: ● tutti gli oggetti hanno una forma rettangolare, anche quando ciò non appare; ● tutti gli oggetti appartengono ad un'altra finestra-oggetto, solo lo Screen non ha un contenitore; ● tutti gli oggetti hanno una larghezza (Width) e una altezza (Height) ● tutti gli oggetti hanno una ascissa (Lef ) e una ordinata (Top) dell'angolo in alto a sinistra rispetto allo stesso vertice del contenitore; Left è considerato positivo da sinistra verso destra mentre Top è misurato positivo quando diretto verso il basso; ● tutti gli oggetti visualizzabili hanno un attributo (Visible) che può assumere il valore falso o vero e un colore di fondo (BackColor) ; ● tutti gli oggetti hanno un proprio attributo (Enable) che quando assume il valore vero definisce lo stato attivo di funzionamento dell'oggetto stesso, per contro il valore falso ne definisce lo stato disattivo; ● tutti gli oggetti hanno un nome (Name) che li identifica univocamente, pertanto non ci possono essere più di un oggetto con lo stesso nome. Figura 1 Attributi di posizione di un oggetto rispetto al suo contenitore ● tutti gli oggetti visualizzabili graficamente hanno un aspetto (Appearance) che può essere piatto (Flat) o tridimensionale (3D); Inoltre i predetti oggetti, tutti quanti, almeno quando siano visualizzabili in un contenitore, sono in grado di eseguire delle azioni che chiameremo metodi. Queste azioni (metodi) dipendono dai valori degli attributi (proprietà) prima detti e, anche, da valori che vengono passati ai metodi come parametri. I metodi agiscono sugli oggetti come procedure o procedimenti capaci di alterare, in base ad un prefissato programma, i valori di uno o più proprietà o attributi. Per la gran parte degli oggetti standard di Windows i metodi sono predefiniti dai loro costruttori e fra questi, i seguenti sono comuni alla gran parte degli oggetti: ● Move (x1, y1, b , a) dove (x1,y1) sono le coordinate del vertice superiore sinistro mentre (b,a) sono la nuova base e la nuova altezza della finestra-oggetto viste dal contenitore; il comando esegue lo spostamento e il ridimensionamento dell'oggetto. ● SetFocus che sposta lo stato attivo sull'oggetto rendendolo capace di reagire ai comandi provenienti dall'utente e anche a quelli provenienti dal programma; ● ZOrder che, per gli oggetti visualizzabili, quando vale 0 porta l'oggetto a cui è applicato in primo piano rispetto gli altri oggetti che popolano il contenitore mentre quando vale 1 l'oggetto viene portato in secondo piano. Ogni oggetto specifico ha, poi, i suoi metodi particolari, specificatamente studiati per realizzare complesse funzioni a cui, senza saperlo, siamo abituati nell'uso quotidiano di Windows. Windows è un sistema operativo a eventi, nel senso che il sistema passa la gran parte del suo tempo a "spiare" o "ascoltare" i dispositivi del calcolatore, attento alle variazioni di stato delle sue propaggini (pressione di un tasto, movimento del mouse, termine o inizio di un'operazione su disco, comunicazioni con la porta seriale o con la stampante ecc… Quando uno qualsiasi dei dispositivi del calcolatore intraprende o termina un'azione, in qualche modo il sistema operativo Windows viene avvertito, riceve, cioè, un messaggio dal dispositivo e tramite questo viene informato sia della natura che dell'entità della variazione intervenuta. La ricezione del messaggio da parte di Windows e il conseguente inizio di un processo di reazione noi lo chiameremo Evento. Tutti gli oggetti di Windows sono sensibili agli eventi; in particolare la gran parte di quelli visibili hanno in comune la capacità di rilevare, quando sono attivi, alcune azioni eseguite dall’utente o dal sistema operativo: ● Click viene generato quando si preme e si rilascia un pulsante del mouse su un oggetto oppure quando si modifica un oggetto. ● DblClick viene generato quando si preme e si rilascia due volte in rapida successione un pulsante del mouse puntato su un oggetto. Per una finestra, l’evento DblClick viene generato quando si fa doppio clic con il pulsante sinistro del mouse su un suo contenuto o su una sua area vuota. ● MouseUp e MouseDown vengono generati quando si preme (MouseDown) o si rilascia (MouseUp) un pulsante del mouse ● MouseMove Viene generato quando si sposta il mouse. ● GotFocus viene generato quando lo stato attivo viene spostato su un oggetto premendo TAB o facendo clic sull'oggetto oppure utilizzando il metodo SetFocus nel codice. Una finestra può ricevere lo stato attivo solo quando tutti i controlli visibili sono disattivati. ● LostFocus viene generato quando lo stato attivo viene spostato su un altro oggetto, cioè su un oggetto diverso da quello che detiene il focus. ● KeyDown e KeyUp vengono generati quando si preme (KeyDown) o si rilascia (KeyUp) un tasto mentre lo stato attivo ● si trova su un oggetto. ● KeyPress viene generato quando si preme e si rilascia un tasto. ● Change indica che il contenuto di un oggetto è stato modificato. Il momento e le modalità con cui questo evento viene generato dipendono dall’oggetto. Finestre di Form e Controlli Come si è già avuto occasione di dire Windows si manifesta all’utente attraverso il contenuto dello Screen dove sono depositate, in genere, delle icone collegate all’esecuzione di programmi o applicazioni. Ribadendo che tutto ciò che Windows mostra è un oggetto, vogliamo qui distinguere le finestre delle applicazioni – così si mostrano quando sono in funzione – da quelle di tutti gli altri oggetti. Le finestre delle applicazioni in funzione sono destinate a contenere altri oggetti di Windows e si chiamano finestre Form. Tutte le finestre-oggetto destinate a essere contenute dentro un Form si chiamano controlli. La differenza fra questi due tipi di oggetti di Windows è grande dal punto di vista del programmatore, in quanto ai form corrispondono i programmi eseguibili che risiedono sul disco rigido in file il cui nome è del tipo *.exe mentre ai controlli corrispondono programmi sistemati in file non direttamente eseguibili che risiedono nella directory …\windows\system\… e che hanno estensione *.ocx. Questi ultimi sono in gran parte componenti standard di Windows. Vi sono molti controlli, però, non prodotti dalla Microsoft , che vengono forniti da terze parti e possono essere normalmente scritti nel linguaggio C o Visual C++, in Visual Java++ o, più semplicemente, in Visual Basic. Il form È un oggetto finestra o finestra di dialogo. I form sono contenitori per controlli e possono, sostanzialmente, essere di tre tipi:. ● MDI (interfaccia a documenti multipli) è costituito da una finestra che può fungere da contenitore per form secondari e controlli. Le finestre secondarie, dette anche finestre figlie (child) non possono uscire fuori dalla principale. Il form MDI possiede una barra del titolo, una barra del menù, una barra degli strumenti e, quantomeno, una finestra figlia. ● SDI (interfaccia a documento singolo) è costituito da un form che può posizionarsi in un punto qualsiasi dello schermo, può contenere controlli ma non ha finestre figlie; ulteriori altre finestre della stessa applicazione sono libere di spostarsi nello schermo senza alcun vincolo. Anche questo tipo di form possiede sempre una barra del titolo, una barra del menù e una barra degli strumenti; i controlli vengono posizionati direttamente sul form stesso. ● La finestra di dialogo, è una finestra non tipizzata, può essere privata della barra di del titolo o intestazione, dei pulsanti di ogni tipo e, perfino, del bordo. I controlli Sono oggetti che è possibile inserire in un form e che prevedono per sé proprietà, metodi ed eventi specifici alla funzione per cui sono costruiti. I controlli consentono di ricevere l'input dell'utente, visualizzare l'output e generare routine di eventi. È possibile gestire la maggior parte dei controlli utilizzando i loro metodi. Alcuni controlli sono interattivi, ovvero rispondono alle azioni eseguite dall'utente, mentre altri sono statici, ovvero accessibili solo attraverso il codice. I controlli standard di Windows sono i seguenti: ● ● ● Label (etichetta), è adatto a produrre scritte sulla finestra ospite. Il controllo è di tipo grafico. TextBox o Casella di Testo, è adatto ad accettare un testo, anche su più righe, come input. Il controllo può anche essere usato per visualizzare come se fosse una etichetta. Frame o Cornice, viene usato soprattutto come contenitore di altri controlli come ● ● ● ● ● ● ● ● check, option, pulsanti. CommandButton o pulsante di comando, usato prevalentemente per iniziare, interrompere o concludere un processo un evento o un procedimento. CheckBox pulsante di selezione binaria. Quando il controllo viene selezionato il suo valore associato diviene vero mentre diviene falso quando deselezionato. La selezione è evidenziata graficamente da una crocetta disegnata sulla casella rettangolare del controllo. OptionButton pulsante di selezione multipla, consente di scegliere una possibilità fra molte. Questi pulsanti vengono normalmente usati in gruppo e, di tutto il gruppo, è possibile sceglierne uno solo. ListBox o lista o casella di riepilogo, consente di selezionare una possibilità da una lista. La lista può essere impostata a livello di programmazione o durante l’esecuzione del programma; se la lista è più lunga di quanto è visualizzabile sullo schermo compare alla sua sinistra una ScrollBar che ne consente lo scorrimento. ComboBox o casella combinata; è come la precedente ListBox ma prende meno spazio (un rigo solo) quando è chiuso. Il controllo possiede un pulsantino triangolare che consente di aprirlo e fargli assumere l’aspetto tipico della lista. HscrollBar e VscrollBar. Le barre di scorrimento consentono di spostarsi tra i vari elementi di un elenco o all'interno di informazioni. Indicano inoltre la posizione corrente all'interno del documento. È possibile utilizzare una barra di scorrimento come dispositivo di input o come indicatore di velocità o quantità, ad esempio per controllare il volume di un gioco o per visualizzare il tempo trascorso in un processo Timer è uno dei controlli che è sempre invisibile. Il suo compito è quello di generare un evento ad ogni prestabilito intervallo di tempo. DriveListBox (casella di riepilogo delle unità) viene utilizzato per visualizzare un elenco di tutte le unità disco valide nel sistema in uso. È possibile creare finestre di dialogo che consentano di aprire un file selezionato da ● ● ● ● ● ● ● un elenco dei file contenuti in una delle unità disponibili DirListBox o casella di riepilogo delle cartelle o directory. Viene usato insieme al controllo precedente. FileListBox o casella di riepilogo dei file. Viene usato insieme ai due controlli precedenti allo scopo di selezionare un file da una directory su un disco. Shape (forma) è un controllo di tipo grafico visualizzato come rettangolo, quadrato, ovale, cerchio e come rettangolo o quadrato con angoli arrotondati. Può avere o essere privo del bordo e del colore di riempimento. Line (linea) è un segmento congiungente due punti sullo schermo; lo spessore e il colore possono essere variati a piacimento. PictureBox e Image Il controllo PictureBox (casella immagine) consente di visualizzare un elemento grafico da un file in formato bitmap, icona, metafile, enhanced metafile, JPEG o GIF. Il controllo Image è identico tranne che meno spazio in memoria, è più veloce ma possiede alcuni metodi e proprietà in meno. Data o controllo gestione dati fornisce accesso ai dati memorizzati in database di qualunque tipo. Il controllo Data consente di spostarsi da un record all'altro e di visualizzare e gestire i dati dei record. È il controllo sicuramente più complesso che ci sia in quanto, da solo, costituisce uno dei più completi sistemi di gestione dei dati. OLE (contenitore OLE) consente l'aggiunta di oggetti inseribili nei form delle aplicazioni. Il controllo contenitore OLE consente di eseguire applicazioni o comandi DOS o di Windows nella propria finestra. I sopraelencati controlli standard o intrinseci, possono venire usati direttamente all’interno di form ma, spesso, vengono usati anche per costruire altri controlli esterni. Questi ultimi, cioè i controlli esterni, sono quelli che risiedono su disco in file con estensione *.ocx. Fra i controlli esterni più noti vale la pena di menzionare i seguenti: ● Il controllo CommonDialog (finestre di dialogo comuni) fornisce un gruppo di finestre di dialogo standard per l'esecuzione di operazioni quali l'apertura (finestra Apri) e il salvataggio di file (finestre Salva e Salva con nome) l'impostazione della stampa (finestra Stampa) e la selezione di colori e tipi di carattere. Il controllo consente inoltre di visualizzare la Guida in linea di Windows. ● ● ● Il controllo Multimedia MCI (MCI multimediale) o MMControl gestisce la registrazione e la riproduzione dei file multimediali sulle periferiche MCI (Media Control Interface). È costituito da un insieme di pulsanti di comando che inviano comandi MCI a periferiche quali schede audio, sequencer MIDI, unità CD-ROM, lettori CD audio, lettori videodisc e videoregistratori. Il controllo MCI è capace, inoltre, di riprodurre i file video per Windows (*avi). Il controllo MSComm (comunicazioni), invisibile a tempo di esecuzione, fornisce alle applicazioni che lo usano quanto serve per le comunicazioni seriali, consentendo la trasmissione e la ricezione di dati tramite una porta seriale. La porta seriale è una delle porte di comunicazione usata da Windows per il collegamento di macchine e dispositivi esterni al calcolatore; tramite essa i calcolatori possono collegarsi ad un mouse, un modem, tra loro, ecc… Il controllo MSFlexGrid consente di visualizzare ed eseguire operazioni con i dati di tabelle. Con esso si possono eseguire operazioni di ordinamento, unione e formattazione di tabelle contenenti sia testo che immagini. Il suo aspetto e le sue funzioni sono quelle di un foglio di calcolo. ● ● Il controllo Internet Transfer (trasferimento Internet), invisibile a tempo di esecuzione, realizza due modi di collegarsi (protocolli) a Internet, il protocollo HTTP (HyperText Transfer Protocol) e il protocollo FTP (File Transfer Protocol). Il protocollo HTTP consente di effettuare la connessione ai server World Wide Web per visualizzare documenti HTML. Il protocollo FTP consente di accedere ai server FTP per scaricare e caricare file. È possibile utilizzare le proprietà UserName e Password per accedere a server privati che richiedono l'autenticazione. In alternativa, è possibile effettuare la connessione a server FTP pubblici e scaricare file. Il controllo RichTextBox (casella di testo RTF), dall’aspetto simile al controllo TextBox, consente di immettere e modificare testo, con funzioni di formattazione avanzate rispetto a quelle fornite dal normale controllo TextBox. Il controllo ● ● RichTextBox dispone di molte proprietà utilizzabili per dare forma a qualsiasi parte di testo presente nel controllo. Le sue proprietà consentono di applicare, al testo in esso contenuto, il grassetto o il corsivo, di modificarne il colore e di creare elementi in apice o in pedice. È inoltre possibile modificare la formattazione dei paragrafi, impostando rientri a destra e a sinistra, nonché rientri sporgenti. Il controllo MSChart è un controllo grafico di visualizzazione di dati in forma di istogramma o diagramma cartesiano. Il controllo è capace di rappresentazioni molto diverse fra loro come i diagrammi a torta, diagrammi tridimensionali, ecc… I dati possono essere immessi direttamente o importandoli da un foglio di calcolo o da una matrice. Il controllo TabStrip consente di raggrup-pare visivamente una serie di controlli fra loro in relazione. Nel titolo di ciascuna scheda si specifica il nome della stessa; ognuna di queste schede può essere selezionata per ottenere la visualizzazione e l’entrata in funzione del suo contenuto. Molti altri controlli sono disponibili sia da parte della Microsoft sia da parte di terze parti. Molte aziende basano la loro vita sulla produzione di controlli specifici per le funzioni più diverse; alcuni di questi sono delle applicazioni intere. I controlli sono i "mattoni" con cui si costruiscono le applicazioni e per questo un’azienda informatica può scegliere di produrre applicazioni dirette all’utente finale usando i controlli prodotti da altri o, in alternativa, produrre controlli per altri programmatori. Ovviamente la produzione di controlli richiede il possesso di conoscenze e tecnologie di livello superiore, tuttavia questi possono, attualmente, essere prodotti sia in Visual C++ sia in Visual Basic che in Visual Java++. Una applicazione per iniziare Se Visual Basic è stato installato correttamente, selezionando il programma dalla barra delle applicazioni, il programma dovrebbe partire mostrando la finestra di inizio (NuovoProgetto) che viene riportata nella figura. Si scelga, nella scheda Nuovo l’opzione EXE standard e si faccia click sul pulsante Apri. Visual Basic preparerà una form del tipo finestra di dialogo e la presenterà, vuota, sullo schermo all’interno di una finestra bianca dal titolo Progetto1- Form1 (Form). A fianco, sia a destra che a sinistra, vi saranno altre finestre aperte. A sinistra dello schermo è aperta una finestra dal titolo Generale contenente una barra verticale piena di strumenti cioè di icone referentesi ai controlli standard di Windows. A destra dovrebbero essere aperte almeno due finestre una dal titolo Progetto – Progetto1 e l’altra Proprietà – Form1. Spegnete quelle in più e, se quelle necessarie non sono presenti, cercate nella barra degli strumenti superiore le diciture Gestione Progetti e Finestra Proprietà facendo click sui relativi pulsanti. Sulla barra degli strumenti laterale di sinistra (intitolata Generale) fare click su CommandButton, quindi ci si sposti su Form1, dove, facendo click con il pulsante sinistro e tenendolo premuto fino a tracciare un rettangolo, come nella figura seguente, si rilascerà il pulsante del mouse sull’angolo in basso a destra dello stesso rettangolo. In maniera analoga, si trasporti una Label dalla barra strumenti sulla Form1 sotto il pulsante posizionato prima. Alla fine di questa operazione la Form1 deve avere l’aspetto della figura seguente. Posizionare, ora, il mouse sulla Form1 ed eseguire un rapidissimo doppio-click: comparirà una finestra di testo contenente una parte della seguente scritta che va completata come di seguito: Private Sub Form_Load() Label1.Caption = " Non hai premuto niente" End Sub Si digiti tutto in minuscolo, non appena si andrà a capo, se si è battuto tutto correttamente il Visual Basic trasformerà i capolettera in maiuscolo a conferma del fatto che tutto è in ordine. Sulla finestra dove si sta digitando il codice vi sono due ComboBox (caselle combinate); in quella di sinistra è scritto Form1, aprite quella di destra dove è scritto Load e scegliete dalla lista che compare la voce Click. Deve comparire l’intestazione del seguente codice che completerete: Private Sub Form_Click() Label1.Caption = "Hai fatto click sulla Form" End Sub Nella finestra Proprietà-Progetto1 si faccia doppio-click sull’icona di Form1 per far ricomparire la finestra della form. Si esegua un doppio-click sul pulsante Command1 e, nella finestra del codice che così compare si digiti: Private Sub Command1_Click() Label1.Caption = "Hai premuto il pulsante" End Sub Si ritorni sulla finestra di Form1. Si prema il tasto F5 o, se si vuole, nella barra degli strumenti di Vb, sotto la voce Esegui del menu, si faccia click con il mouse sul segno di avvio (segno di triangolo). Il programma andrà in esecuzione immediatamente. Per prova, si faccia click sulla form e in alternativa sul pulsante: si vedrà la scritta di risposta del programma che avete scritto. Per interrompere il programma in esecuzione si può fare click sul pulsante di arresto o fine di VB (il pulsante quadrato sotto la scritta Esegui del menu) o sul pulsante con croce sulla barra del titolo di Form1. La programmazione a eventi in Windows In windows tutto è determinato dal succedersi degli eventi. Quando un utente del programma esegue un doppio click sull’icona del programma stesso o quando l’utente avvia il programma, in qualsiasi altro modo lo faccia, Windows riceve il messaggio di avvio dell’applicazione quindi in successione, nella Form principale dell’applicazione, si verificano i seguenti eventi le cui azioni possono essere decise dal programmatore: 1. Inizialize 2. Load 3. Resize 4. Activate 5. Paint Se la Form contiene dei controlli come, per esempio, un pulsante di comando e una casella immagine l’ordine degli eventi è: 1. Inizialize 2. Load 3. Resize 4. Activate 5. GotFocus del Tasto 6. Paint 7. Paint della Picture Alla luce della sequenza degli eventi, il programmatore, può decidere per esempio di introdurre durante l’evento Inizialize i valori iniziali di variabili che saranno utilizzati durante l’evento Load. Durante l’esecuzione di Load, si possono decidere e impostare le proprietà dei controlli contenuti nella form o della form stessa ma non si possono eseguire metodi sui controlli contenuti in quanto essi vengono attivati più tardi così come risulta dall’elenco precedente. D’altro canto, l’evento Load precede la visualizzazione della Form sullo schermo che avviene per prima tramite il ridimensionamento della stessa (evento Resize) seguito dalla sua attivazione tramite l’evento Activate e, infine, l’evento Paint conclude, tramite il tracciamento grafico, la presentazione visiva della Form stessa. Si noti come i controlli eventualmente presenti sulla form vengono tracciati e attivati comunque dopo l’attivazione della form. Ne consegue che, per esempio, il tentativo di tracciare una linea su una PictureBox durante l’evento Load di una form risulta inefficace in quanto la PictureBox sarà creata molto più tardi e soprattutto il suo evento Paint sarà l’ultimo a essere eseguito. Ovvero, qualsiasi disegno sulla PictureBox deve essere eseguito durante o dopo il suo evento Paint. In caso diverso il disegno eseguito sarà cancellato dallo stesso evento Paint. Terminato che sia il caricamento e l’attivazione nonché il disegno della form, la stessa form e i controlli in essa contenuti restano in attesa di eventi provocati dall’utente o dall’hardware o anche dallo stesso software. Il compito del programmatore è quello di prevedere, progettare e programmare quanto deve essere eseguito in conseguenza degli eventi che saranno attivati durante l’esecuzione dell’applicazione. Diventa pertanto evidente l’analisi seguente del programma del paragrafo precedente: 1. durante il caricamento della form il contenuto dell’etichetta (Label1) viene impostato a "non hai premuto niente"; nessuna azione è prevista per gli eventi che precedono o seguono il caricamento della form; 2. l’applicazione, terminata la sua attivazione, resta in attesa degli eventi futuri fra i quali solo per due di essi è prevista una reazione; 3. se l’utente esegue un click sul tasto (Command1) il contenuto dell’etichetta viene impostato a "hai premuto il pulsante" 4. se l’utente esegue un click sulla form il contenuto dell’etichetta viene impostato a "hai fatto click sulla form"; 5. non è stabilito a priori quante volte l’utente debba provocare le azioni (3) e (4) pertanto queste saranno eseguite ogni qualvolta l’utente deciderà di provocarle e fino a quando non farà click sul pulsante di chiusura; 6. quando l’utente farà click sul pulsante a croce della barra del titolo saranno eseguiti gli eventi Unload e infine Terminate; il controllo dei messaggi e degli eventi tornerà alla finestra contenitore la quale genererà, per se stessa, un evento Paint, che servirà a ridisegnare l’intera finestra padre provocando, nell’utente, l’impressione che la finestra dell’applicazione venga chiusa.