Visual Basic®
Lo studio di questa unità può essere affrontato con due modalità differenti. Il lettore che ha già esperienza di programmazione in un linguaggio ad alto livello (QBasic,
Pascal, C) può tralasciare inizialmente lo studio delle caratteristiche tipiche del codice (tipi di dati, operatori, strutture, ecc.) e dedicarsi essenzialmente alle esercitazioni con l’interfaccia grafica ed alle modalità di funzionamento dei primi programmi
proposti.
I lettori che invece non conoscono le modalità di programmazione con un linguaggio
ad alto livello, debbono accompagnare lo studio degli argomenti precedentemente
descritti con quelli riguardanti le caratteristiche tipiche del linguaggio Basic.
Si consiglia soprattutto come metodo di rapido apprendimento del linguaggio lo studio delle esercitazioni e dei primi programmi proposti, cercando, per ogni applicazione, di comprendere la modalità con cui essa opera.
I primi programmi sono di facile comprensione ed è su di essi che deve concentrarsi l’attenzione dell’operatore, senza ricercare, almeno inizialmente, lo sviluppo di applicazioni più complesse.
Prima di iniziare lo studio di Visual Basic (VB) è consigliabile acquisire le semplici nozioni di base sulla programmazione orientata agli oggetti, con particolare riferimento alle
nozioni riguardanti VB.
1
Programmazione orientata agli oggetti
Alla base della programmazione orientata agli oggetti, che ha attualmente sostituito
la più vecchia programmazione strutturata, sta il concetto di astrazione dei dati, ovvero la possibilità di creare, da parte dell’utilizzatore di un linguaggio, nuovi tipi di dati
più aderenti alla descrizione degli oggetti reali e che offra la possibilità che questi vengano riutilizzati senza la scrittura di nuovo codice.
Š Un oggetto può essere considerato un’applicazione vista come un unico blocco chiuso,
contenente sia codice che dati, di cui il programmatore può servirsi nelle proprie applicazioni. Non interessa al programmatore come l’oggetto sia stato implementato; è essenziale solamente che esso risponda correttamente all’uso per cui è stato realizzato.
Un Oggetto in Visual Basic ha:
• Proprietà: sono gli attributi che descrivono l’oggetto (ne descrivono per esempio il
nome, la forma, le dimensioni, il colore, ecc.).
• Metodi: sono le attività che un oggetto può svolgere quando esso viene richiamato
da una applicazione; i metodi possono essere considerati come comandi che VB dà
all’oggetto per eseguire determinate azioni.
• Eventi: sono azioni che l’oggetto genera in risposta al verificarsi di determinate sollecitazioni.
Si esaminino per esempio alcune proprietà, metodi ed eventi dell’oggetto ListBox (elenco di stringhe racchiuse in una cornice).
– Alcune delle proprietà di questo oggetto sono: le dimensioni, la posizione, il colore
dello sfondo, il font dei caratteri, ecc. Come si vede sono tutti attributi che permettono di definire le caratteristiche dell’oggetto.
– Come metodi dell’oggetto, in altre parole le azioni che il programma in VB può richiedere all’oggetto di eseguire, possono essere prese in considerazione, per esempio,
l’aggiunta e la cancellazione di stringhe nell’elenco.
– Gli eventi sono azioni che l’oggetto genera, spesso legate ad attività svolte da parte
dell’utente sull’oggetto stesso, come ad esempio la pressione di un tasto o il clic o il
doppio clic del mouse. Quando l’azione non è effettuata direttamente sull’oggetto
(per esempio clic con il mouse su di esso), ma è indiretta (per esempio pressione di
un tasto della tastiera), l’azione viene ricevuta dall’oggetto attivo in quel momento
(ovvero, come si dice, l’oggetto che ha il focus). Alla generazione di un evento è
associata l’esecuzione di una particolare subroutine il cui codice deve essere scritto
dall’utente.
Un oggetto viene identificato con una variabile oggetto. Viene definita interfaccia di
un oggetto l’insieme di proprietà (attributi) e metodi (funzioni) dell’oggetto stesso.
• Nella programmazione in Visual Basic viene spesso utilizzata la seguente espressione:
var_oggetto.tipo_ proprietà = xxx
con tale sintassi si indicherà che all’oggetto identificato con la variabile var_oggetto, viene applicata la proprietà (tipo_ proprietà) ed ad essa si assegna un certo valore (xxx).
• Per richiamare un metodo di un oggetto si usa un’espressione simile alla precedente:
var_oggetto.tipo_metodo
dove con tipo_metodo si richiama un metodo dell’oggetto indicato.
Alcune definizioni
Si danno ora alcune definizioni proprie della programmazione ad oggetti:
• Classe: si definisce classe il contenitore di un oggetto. La classe fornisce quindi gli
attributi necessari per modellare l’oggetto.
• Creazione di un’istanza: l’operazione di creazione di un oggetto a partire da una
classe viene definita creazione di un’istanza della classe.
• Variabili dell’istanza: rappresentano i dati presenti nell’oggetto.
• Metodi di una classe: sono le funzioni e le procedure utilizzate in un oggetto di una
determinata classe.
Nella programmazione ad oggetti debbono essere rispettate tre proprietà fondamentali:
• Incapsulamento: si definisce incapsulamento l’implementazione di dati e codice che
costituiscono l’oggetto. Tale implementazione è interna all’oggetto e non deve essere accessibile all’esterno. Normalmente l’accesso ad un oggetto deve avvenire solamente attraverso i metodi dell’oggetto.
• Ereditarietà: consiste nella possibilità di creare nuove classi che derivino da classi già
esistenti apportando a queste delle modifiche. Le nuove classi ereditano i metodi
della classe da cui derivano ma possono aggiungerne anche di nuovi.
• Polimorfismo: è la possibilità che più classi forniscano le stesse proprietà o metodi.
Quindi possono essere utilizzati metodi e proprietà di oggetti derivanti da classi che
godono di polimorfismo senza conoscere preventivamente a quale classe appartenga l’oggetto.
Dei precedenti requisiti della programmazione ad oggetti Visual Basic supporta solamente l’incapsulamento e un particolare metodo di polimorfismo.
2
L’ambiente grafico di Visual Basic
Una volta avviato VB, prima di accedere all’ambiente di lavoro viene richiesto se si desidera aprire un nuovo progetto, uno già esistente o uno utilizzato recentemente.
Evidentemente, non essendo ancora stato realizzato nessun progetto, si deve scegliere
l’opzione NUOVO (EXE standard), facendo poi clic sul pulsante APRI. All’utente si presenta un ambiente grafico simile a quello riportato nella figura 1.
Fig. 1
Sulla sinistra della finestra compare una zona denominata casella degli strumenti. In
essa sono visualizzati, sotto forma di icone, gli oggetti disponibili nell’edizione che si
sta utilizzando di Visual Basic.
Un elenco degli oggetti (detti anche controlli) presenti è riportato nella figura 2.
Accanto all’icona dello strumento è riportato il nome della classe a cui l’oggetto appartiene.
Fig. 2
L’icona con la freccia deve essere attivata per manipolare gli oggetti che vengono posti
sul form.
Š I form (nella figura 1, Form1), sono degli oggetti, come si vedrà, in cui vengono posti
altri oggetti ovvero i vari controlli che dovranno essere utilizzati nelle applicazioni.
Alla sinistra del video è visibile la finestra delle proprietà degli oggetti selezionati (si
ricorda che le proprietà sono gli attributi che descrivono l’oggetto).
Nella figura 1 sono elencate le proprietà dell’oggetto Form1. Esse non sono tutte visibili ma possono essere fatte scorrere nella finestra con la barra laterale.
Selezionando una delle proprietà nella parte bassa della finestra viene visualizzata una
breve descrizione della stessa.
Sopra la finestra delle proprietà è visibile una piccola finestra che descrive la struttura
del progetto che si sta realizzando.
Per realizzare un’applicazione in Visual Basic deve essere aperto un progetto che raggruppa i vari moduli utilizzati.
In pratica poi, i singoli moduli si tradurranno in altrettanti file con appropriate estensioni.
TIPI DI MODULO ESTENSIONI DEI
Un progetto avrà sempre almeno
Tipi di modulo
Estensioni dei file
un form con il relativo file .frm e un
file di progetto con estensione .vbp.
intero progetto
.vbp
Al progetto poi, a seconda del tipo
form
.frm
di applicazione, possono essere
moduli BASIC
.bas
aggiunti altri moduli.
area di lavoro
.vbw
Sulla parte alta del video sono pregruppi di progetto
.vbg
senti la barra dei menu e la barra
degli strumenti.
Prima di descrivere degli esempi applicativi è bene precisare alcune delle azioni che vengono abitualmente compiute nell’ambiente grafico di Visual Basic. Si faccia riferimento alla figura 1.
• Sulla finestra denominata Form1, vengono posti gli oggetti prelevati dalla casella
degli strumenti, denominata generale (a sinistra del video).
• Per porre un oggetto su Form1 posizionare il cursore del mouse sull’oggetto nella
casella degli strumenti e fare clic con il tasto sinistro su di esso. Spostare poi il cursore su Form1. Il cursore cambia forma assumendo l’aspetto di una piccola croce.
Tenendo premuto il tasto sinistro spostare il mouse sul piano di lavoro, fino a quando l’oggetto assume le dimensioni desiderate.
• Un qualsiasi oggetto posto su Form1 è selezionato quando sul perimetro che lo
delimita compaiono dei quadratini neri (䡲) (maniglie di trascinamento). Form1
è selezionato quando sul suo perimetro compaiono le maniglie di trascinamento.
• Per selezionare un oggetto si deve fare clic con il pulsante sinistro del mouse sull’oggetto stesso. Se esso è selezionato per togliere la selezione occorre fare clic in un
punto qualsiasi della finestra, non occupato da altri oggetti.
• Per spostare un oggetto si deve selezionarlo e poi, tenendo premuto il pulsante sinistro del mouse, trascinarlo nella posizione desiderata.
• Per variare le dimensioni di oggetti che presentano le maniglie di trascinamento, si
deve porre il cursore su una delle maniglie e, quando esso assume la forma di doppia freccia (↔), si deve tenere premuto il tasto sinistro del mouse e spostarlo sul
piano di lavoro (trascinamento).
• Quando un oggetto posto su Form1 è selezionato, a destra del video, sulla finestra
delle proprietà, compaiono le proprietà che l’oggetto possiede.
La finestra delle proprietà è divisa in due colonne: quella a sinistra contiene tutte le
proprietà dell’oggetto selezionato; quella a destra permette di modificarle.
Se è selezionato Form1 le proprietà visualizzate sono quelle del form.
È possibile visualizzare le proprietà di tutti gli oggetti presenti sul form selezionandoli nell’apposito elenco a discesa, posto sulla parte superiore della finestra delle
proprietà, attivato con il pulsante di scorrimento (), oppure selezionando direttamente gli oggetti posti sul form.
• Facendo clic con il pulsante destro del mouse si ottiene un menu con alcuni comandi. Esso varia a seconda della zona su cui si è fatto clic.
• Gli oggetti posti sul form possono essere cancellati facendo clic su di essi con il tasto
destro del mouse e scegliendo ELIMINA dal menu a tendina che si apre.
Prima di iniziare a scrivere dei programmi è bene esercitarsi a porre sul form i vari
oggetti posti nella casella degli strumenti ed osservare la forma che assumono.
Osservare poi, per ciascun oggetto selezionato, le proprietà fondamentali che compaiono nella finestra delle proprietà.
2.1
Esercitazione: utilizzazione dell’ambiente grafico
– Avviare VB, scegliere NUOVO (EXE standard).
– Ampliare la finestra del Progetto1 (facendo clic sul pulsante di espansione della finestra ( ).
– Con il Form1 selezionato (sono visibili le maniglie di trascinamento) sulla finestra
delle proprietà selezionare per categoria e quindi trascinando la barra verticale rendere visibile le proprietà POSIZIONE e SCALA (fig. 3).
– Fare clic sulla proprietà SCALEMODE e nel menu a scomparsa selezionare PIXEL (per
default la scala per le modalità grafiche è espressa in twip. Un pollice corrisponde a
1440 twip).
– Fare quindi clic su HEIGHT e scrivere sulla destra 2200 e in WIDTH scrivere 4600.
Si ottiene in tal modo una finestra di 2200 pixel in altezza e 4600 in larghezza. Per variare le dimensioni di Form1 si possono anche trascinare le maniglie, ma in questo caso è
più difficile assegnare all’oggetto una dimensione precisa.
Inserimento di oggetti sul Form1
Fig. 3
a) Inserire un controllo Image:
– Fare clic nella casella degli strumenti su Image.
Spostare il cursore sul Form1. Il cursore diviene a
forma di croce.
– Premere il tasto sinistro del mouse e senza rilasciarlo trascinare il cursore facendo assumere al
controllo inserito le dimensioni di circa 120 × 120
pixel (se durante il trascinamento si ferma il mouse,
senza rilasciare il pulsante, compare sul vertice in
basso a sinistra la dimensione dell’oggetto).
b) Cambiare il bordo dell’oggetto:
– Con l’oggetto selezionato, nella finestra delle
proprietà selezionare BORDERSTYLE.
– Fare clic sul triangolino posto sulla riga selezionata e scegliere FIXED SINGLE.
c) Inserire nell’oggetto Image una figura importata:
– Con l’oggetto selezionato impostare la proprietà STRETCH su TRUE.
– Selezionare poi la proprietà PICTURE e fare clic sul
pulsante con i tre puntini.
– Nella finestra che si apre scegliere una cartella e
poi un file di un’immagine (per esempio la cartella Immagini posta in Documenti sul Desktop).
Dopo aver selezionato l’immagine con un clic, il
suo nome compare su Nome file.
– Facendo clic su APRI, l’immagine viene trasferita
nel controllo Image e la sua misura si adatta alle
dimensioni impostate per l’oggetto.
Fig. 4
d) Inserire una Shape sul Form1:
– Clic nella casella degli strumenti su SHAPE. Spostare il cursore sul form. Il cursore
diviene a forma di croce.
– Premere il tasto sinistro del mouse e senza rilasciarlo trascinare il cursore facendo
assumere al controllo inserito le dimensioni di circa 50 × 50 pixel.
e) Cambiare il colore del fondo della Shape:
– Con l’oggetto selezionato, nella finestra delle proprietà selezionare FILLSTYLE.
– Fare clic sul triangolino posto sulla riga selezionata e scegliere SOLID.
– Selezionare poi FILLCOLOR. Fare clic sul triangolino posto sulla riga selezionata e
dalla tavolozza dei colori che si apre scegliere il colore desiderato.
f) Inserire una Shape di forma circolare sul Form1:
– Ripetere tutto il procedimento del punto c).
– Con l’oggetto appena posto selezionato, nella finestra delle proprietà selezionare
SHAPE.
– Fare clic sul triangolino posto sulla riga selezionata e scegliere CIRCLE.
– Colorare il cerchio seguendo il procedimento del punto d).
g) Inserire una Shape di forma ellittica sul Form1:
– Ripetere il procedimento usato per inserire la prima Shape (quadrato), ma in questo caso assegnare all’oggetto una forma di rettangolo (circa 70 × 120).
– Con l’oggetto selezionato, nella finestra delle proprietà selezionare SHAPE e scegliere la forma OVAL.
– Colorare la figura seguendo il procedimento del punto d).
h) Inserire CommandButton (pulsante) sul Form1:
– Selezionare sulla casella degli strumenti il COMMANDBUTTON. Posizionare il cursore
sul Form1 e trascinare come i precedenti casi.
– Selezionare la proprietà CAPTION.
– Selezionare con due clic COMMAND1 (scritto sulla colonna di sinistra).
– Clic con il tasto destro sulla selezione e quindi TAGLIA (o ELIMINA).
– Scrivere sulla riga vuota START.
i) Cambiare le caratteristiche del testo inserito:
– Sempre con pulsante selezionato scegliere la proprietà FONT.
– Fare clic sul pulsante con i tre puntini e nella finestra che si apre scegliere STILE
GRASSETTO e PUNTI 12. Cambia così lo stile di START.
Al termine delle operazioni si deve avere un form come quello rappresentato in
figura 4.
j) Salvare il progetto realizzato ed uscire da VB:
– Sul menu FILE scegliere SALVA FORM1 CON
NOME… e, nella finestra che si apre, scegliere la cartella in cui si vuole salvare il progetto ed il nome del file (per esempio
primo_esercizio) senza estensione (VB inserisce automaticamente l’estensione salvandolo come primo_esercizio.frm).
– Ancora con il menu FILE scegliere SALVA PROGETTO CON NOME… e inserire il nome del progetto senza estensione (è buona norma utilizzare lo stesso nome usato per il form
quindi inserire ancora primo_esercizio; sarà
salvato come primo_esercizio.wbp).
– Si può uscire da VB con FILE ⇒ CHIUDI (oppure con il pulsante
per la chiusura
della finestra).
Tutte le operazioni fin ora effettuate si sono limitate a porre sul form degli oggetti e
variare, a volte, alcune delle loro proprietà.
Se ora si desidera che gli oggetti inseriti svolgano qualche attività sollecitati da eventi
attivati dall’utente, deve essere scritto del codice utilizzando il linguaggio Basic.
In genere, come si vedrà, ad ogni oggetto sono associate una serie di subroutine ognuna delle quali risponde ad un certo tipo di sollecitazione.
Per esempio: se si vuole attivare un qualche metodo, utilizzando il pulsante di START,
con un clic su di esso, il codice va posto in una sub collegata con l’oggetto Command1
che è chiamata Sub Command1_Click. Con il clic sul pulsante START potrebbe essere
attivato un metodo associato per esempio con uno degli oggetti Shape per cambiare
le sue dimensioni o spostarlo sul form (per esempio metodo move).
➜ Programma 1
Si scriva un programma che trasforma in dimensione minore la Shape1 (quadrato) inserita nella precedente esercitazione.
Fig. 5
Fig. 6
Si avvia VB e quando si apre la finestra di Nuovo progetto si sceglie Recente.
1. Selezionare il file primo_esercizio precedentemente salvato. Nel caso che, una volta
avviato VB, non compaia il form con le figure, si selezioni, nella finestra del progetto posta in alto a destra, Form1 (primo_esempio.frm) e si faccia clic sul pulsante
VISUALIZZA OGGETTO (fig. 5).
2. Una volta visualizzato il Form1, si faccia doppio clic su di esso (o in alternativa usare
il pulsante VISUALIZZA CODICE).
Si apre la finestra del codice (fig. 6). La casella con scritto (generale) è denominata casella degli oggetti, mentre quella a destra casella delle routine.
3. Facendo clic sul pulsante con il triangolino nero () della casella degli oggetti, si
apre un menu a discesa.
Se sulla finestra del codice non compare l’intestazione della subroutine relativa al
pulsante (Command1) contenente le righe:
Private Sub Command1_Click()
End Sub
attivare la Sub dal menu a discesa. A seconda della modalità utilizzata per aprire la
finestra del codice potrebbe essere visibile anche la Sub Form_ Load:
Private Sub Form_Load()
End Sub
Questa Sub viene eseguita automaticamente ogni volta che si avvia VB: in questo
esempio, non dovendo essere utilizzata, va lasciata inalterata.
4. Inserire tra le righe della Sub Command1_click() il seguente codice:
Private Sub Command1_Click()
Shape1.Move 150, 20, 15, 15
End Sub
La riga scritta ha il seguente significato:
il metodo Move è applicato all’oggetto Shape1 (ovvero il quadrato).
Il metodo sposta, a partire dall’origine del Form1, il margine sinistro dell’oggetto a
150 pixel lungo l’asse X, il margine superiore di 20 pixel lungo l’asse Y e inoltre ne
riduce la larghezza e l’altezza a 15 pixel.
Poiché il codice è stato scritto all’interno della Sub Command1_click(), esso entra in
esecuzione solamente quando si genera un evento di clic sul pulsante START
(Command1).
5. Si salvi il form e il progetto con il nome primo_programma, e poi se ne avvii l’esecuzione con il pulsante posto sulla barra degli strumenti (). Compare il form con le figure disegnate; se si fa clic sul pulsante START il quadrato diviene più piccolo. Si arresta
il programma con il tasto posto sulla barra degli strumenti (). Se è coperto dalla finestra del form, trascinarla in altra posizione.
6. Prima di chiudere VB eseguire ancora il programma provando ogni volta prima a
cambiare i valori impostati per il metodo Move.
➜
➜ Programma 2
Si scriva un programma che cambia colore al cerchio quando si posiziona il cursore del
mouse sul pulsante START (senza fare clic).
Avviato VB si carichi il programma precedente dalla finestra Recente (file primo_progr).
Con questo programma si cambia una proprietà dell’oggetto Shape2. Si deve innanzitutto cambiare la Sub collegata con il pulsante in quanto in questo esercizio l’evento
che attiva il cambio di colore è un doppio clic. Per fare questo:
1. Si visualizzi il Form1 (se non è presente) con la procedura illustrata nel precedente esercizio.
2. Si visualizzi poi il codice (doppio clic sul form o con il pulsante VISUALIZZA CODICE).
3. Per aprire la Sub relativa al movimento del mouse, nella finestra del codice si deve visualizzare Command1 nel menu a discesa della casella degli oggetti e MouseMove in quello
della casella delle routine (usare il triangolino per aprire i menu a discesa ed effettuare la scelta). Si veda la figura 7. Viene visualizzata la Sub Command1_MouseMove
vuota.
4. L’istruzione da inserire questa volta tra l’inizio della Sub e la fine (End Sub) supponendo di voler colorare di giallo la figura è:
Private Sub Command1_MouseMove(Button As Integer,...)
Shape2.fillcolor = QBColor(14)
End Sub
Dove FILLCOLOR è la proprietà utilizzata per colorare
la figura e il numero 14 è il codice del giallo.
5. Si salvi il form ed il progetto (con il nome secondo_ progr) e si metta in esecuzione il programma.
Non appena con il cursore del mouse si entra nella
zona del pulsante START, il cerchio cambia colore.
6. Prima di uscire dal progetto si provino altri codici di
colore (tra 0 e 15).
Fig. 7
➜
➜ Programma 3
Si inserisca sul Form1 due Label chiamate VERDE ed AZZURRO. Scrivere un programma che cambia colore al cerchio quando si passa con il cursore sulle Label.
Aprire VB e scegliere NUOVO ⇒ EXE STANDARD. Sul Form1 inserire una Shape
quadrata (Shape1) e sotto due Label (Label1 e Label2).
Fig. 8
1. Selezionare la Shape1 e nella finestra Proprietà in FILLSTYLE scegliere SOLID
e in FILLCOLOR dalla tavolozza scegliere un colore qualsiasi che non sia né
verde né azzurro.
2. Selezionare Label1 sul Form1 e nella finestra Proprietà trovare CAPTION e
sulla colonna destra, accanto a Caption, selezionare con doppio clic Label1 e scrivere VERDE.
3. Selezionare Label2 sul Form1 e nella finestra Proprietà trovare CAPTION e sulla colonna destra accanto a Caption selezionare con doppio clic Label2 e scrivere AZZURRO
(fig. 8).
4. Visualizzare la finestra del codice, aprire menu a discesa della casella degli oggetti e
scegliere Label1 e dal menu a discesa della casella delle routine scegliere la Sub
MouseMove. Scegliere poi sempre dal menu a discesa della casella degli oggetti
Label2 e da quello della casella delle routine ancora la Sub MouseMove. Le due Sub
Label1_Click() e Label2_Click() possono essere lasciate vuote o cancellate. In questo
caso cancellare anche le End Sub.
5. Scrivere il codice come segue:
Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, ...)
Shape1.FillColor = QBColor(10)
End Sub
Private Sub Label2_MouseMove(Button As Integer, Shift As Integer, ...)
Shape1.FillColor = QBColor(9)
End Sub
6. Salvare il form ed il progetto con il nome terzo_prog.
7. Avviare il programma. Quando si passa con il cursore sulle due Label il quadrato
cambia colore.
➜
Il codice scritto nei tre programmi di esempio precedentemente esposti è limitato a
semplici cambiamenti delle proprietà degli oggetti o all’attivazione di un loro metodo
senza ricorrere a porre nessuna condizione perché ciò avvenga, tranne l’attivazione di
eventi legati al movimento del mouse. Per strutturare programmi più complessi è necessario acquisire alcune nozioni di base sulla struttura del linguaggio Basic.
3
Alcune caratteristiche di base del linguaggio
Verranno ora esposte brevemente alcune delle caratteristiche di base del linguaggio
relative alla scrittura del codice. È bene che il lettore ponga particolare attenzione alle
nozioni riportate di seguito. Alcuni degli argomenti trattati sono stati esposti anche
nella descrizione di QBasic, anche se a volte essi assumono aspetti diversi.
Per questo il lettore che ha già una conoscenza di base di tali nozioni può proseguire
la lettura del capitolo con il § 4, ritornando poi sui singoli argomenti quando se ne
presenti la necessità durante la scrittura del codice.
3.1
Tipi di dati e dichiarazione delle variabili
Š Si definiscono costanti quei dati il cui valore rimane costante durante lo svolgimento
del programma.
Si definiscono variabili quei dati che normalmente nel corso di un programma possono
assumere valori diversi.
Un dato, costante o variabile, è sempre identificato attraverso un nome (identificatore).
In VB esistono costanti di sistema predefinite e costanti definite dall’utente.
Con la dichiarazione delle variabili o delle costanti si associa all’identificatore della
variabile o della costante un certo tipo di dato. Nella dichiarazione può inoltre essere indicato il campo di visibilità della costante o della variabile. Per campo di visibilità si intendono le parti di codice nelle quali viene riconosciuta la costante o la variabile.
Dichiarazione
Visibilità
Applicazione
in tutti i moduli
Modulo
in tutte le
subroutine del
modulo
nella sola
subroutine
Subroutine
Modalità della dichiarazione
La dichiarazione deve avvenire nella sezione di
chiarazioni di un modulo con la parola public.
La dichiarazione deve avvenire nella sezione
dichiarazioni del modulo con la parola private.
La dichiarazione deve avvenire all’interno della
subroutine stessa.
Per dichiarare una costante definita dall’utente si deve far precedere il nome da assegnare alla costante con la parola chiave Const.
Dichiarazione di costanti
• Public Const nome As Integer = 10 (costante di tipo integer con valore pari
a 10 dichiarata pubblica a livello di applicazione; nome deve essere l’effettivo nome
da assegnare alla costante).
• Private Const nome As String = "mia stringa" (costante di tipo string con
valore pari a "mia stringa" dichiarata privata a livello di modulo; il nome deve essere l’effettivo il nome da assegnare alla costante).
• Const nome As date = #1/3/99# (costante di tipo date con valore pari a “1/3/99”
dichiarata privata a livello di subroutine; il nome deve essere l’effettivo nome da
assegnare alla costante). Per le variabili si utilizza un’analoga struttura, senza utilizzare la parola chiave Const. La dichiarazione della variabile va fatta precedere, a seconda dei casi, da una delle seguenti parole chiave: Public, Private, Dim o Static.
• In VB, se non si associa una variabile con nessun tipo di dato, essa viene considerata
di tipo variant (tipo predefinito di dato).
Esempi di dichiarazione di variabili
• Public nome As Integer (variabile di tipo integer dichiarata pubblica a livello
di applicazione; il nome deve essere l’effettivo nome dell’identificatore della variabile).
• Private nome As String (variabile di tipo string, di lunghezza variabile, dichiarata privata a livello di modulo; il nome deve essere l’effettivo nome dell’identificatore della variabile).
• Private nome As String * 10 (dichiarazione di stringa con lunghezza fissa pari
a 10 caratteri).
• Dim nome1, nome2 As long, nome3 As byte (la variabile nome1 è di tipo
variant non essendo specificato il tipo di dato); le variabili sono da considerare private a livello di modulo, se dichiarate nella sezione dichiarazioni del modulo, o private per una routine se dichiarate all’interno della stessa. Nella sezione dichiarazioni del modulo Dim equivale a Private.
Per alcuni tipi di dati è possibile (ma non consigliabile) sostituire alla dichiarazione
esplicita di una certa variabile l’identificatore della variabile stessa preceduto da un particolare suffisso (per esempio %nome variabile di tipo integer, &nome è una variabile
di tipo long, $nome è una variabile di tipo string).
Anche se in VB non è obbligatorio associare alle variabili i vari tipi dai dati (in tal caso
la variabile viene assunta del tipo variant), è sempre consigliabile, per evitare errori,
effettuare la dichiarazione di tutte le variabili utilizzate. La dichiarazione può essere
resa obbligatoria scegliendo dalla barra del menu STRUMENTI ⇒ OPZIONI e nella cartella
editor contrassegnare la casella dichiarazione di variabili obbligatoria. In tal caso nella
sezione dichiarazioni del modulo verrà inserita automaticamente la dicitura: Option
Explicit.
Dati numerici
Sono costituiti esclusivamente da numeri.
Suffisso N° byte
Da
A
senza virgola
byte
1
0
255
integer
%
2
− 32.768
+32.767
long
&
4
− 2.147.483.648
con virgola fissa
+2.147.483.647
currency
@
8
− 922.337.203.685.477,5808
+922.337.203.685.477,5807
con virgola mobile
Single
Double
!
#
4
8
negativi
− 3,402823E+38
− 1,401298E− 45
positivi
1.401298E− 45
3,402823E+38
negativi − 1,79769313486231D+308
4,940656458412465D− 324
positivi
4,940656458412465D− 324
1,79769313486231D+308
boolean
Boolean
2
true
false
Dati alfanumerici
Sono costituiti da un insieme di caratteri alfabetici e numerici racchiusi tra doppi apici.
Esempi: "12 gennaio" , "1/3/99", "AB12E".
Suffisso
N° byte
Da
$
lunghezza stringa
A
Stringhe
senza
a lunghezza
virgola fissa
string
0
216.caratteri
Stringhe a lunghezza variabile (tipo predefinito)
string
$
10 + lunghezza stringa
0
231.caratteri
1/1/100
31/12/9999
Date
date
#......#
8
Dati di tipo predefinito
Suffisso
N° byte
Da
A
Solo
senza
convirgola
numeri
variant
16
stesso intervallo dei double
Con numeri e lettere
variant
22 + lunghezza stringa
0
I dati in formato esadecimale sono rappresentati con il prefisso &H:
Esempi: &HF, &H1, &H100F.
231.caratteri
3.2
Operatori
Per effettuare l’elaborazione di dati il VB utilizza gli stessi operatori di QBasic.
Di seguito viene data una tabella degli operatori disponibili.
Operatore di assegnazione
Per attribuire al nome di una variabile un certo valore si utilizza l’operatore di assegnazione " = " (segno di uguale).
OPERATORE DI ASSEGNAZIONE
=
Per esempio:
Num = 16
Num = Num + 1
Alla variabile Num viene assegnato il valore 16.
Alla variabile Num viene assegnato il valore che aveva precedentemente
incrementato di 1.
Operatori matematici, relazionali e booleani
TAB. 1
Operatori
Matematici
MOLTIPLICAZIONE
ADDIZIONE
SOTTRAZIONE
DIVISIONE
DIVISIONE TRA INTERI
ELEVAMEN. POTENZA
RESTO DELLA DIVISIONE
Relazionali
*
+
/
\
^
Mod
Booleani bit a bit
=
>
<
<>
<=
>=
UGUALE
MAGGIORE
MINORE
DIVERSO
MIN. UGUALE
MAG. UGUALE
Not
And
Or
Xor
Imp
Eqv
NEGAZIONE
PRODOTTO LOGICO
SOMMA LOGICA
OR ESCLUSIVO
IMPLICAZIONE
EQUIVALENZA
Nella tabella 2 sono riportati i risultati delle funzioni logiche esplicate dagli operatori booleani; in esse con A e B sono state indicate le due espressioni (o variabili) su cui
agiscono gli operatori.
La NOT opera su una sola espressione (o variabile), effettuandone la negazione.
TAB. 2
A
B
AND
OR
XOR
EQV
IMP
A
NOT
F
F
V
V
F
V
F
V
F
F
F
V
F
V
V
V
F
V
V
F
V
F
F
V
V
V
F
V
F
V
V
F
Si tenga presente che un valore è considerato False se è = 0 e True se ≠ 0.
L’operazione logica di equivalenza corrisponde ad una EX-NOR e la implicazione può
essere vista come una funzione logica NAND con l’ingresso B negato (o come una OR
con ingresso A negato), ovvero il risultato dell’operazione è falso solo se l’espressione
A è maggiore di B.
3.3
Alcune funzioni aritmetiche
TAB. 3
Funzioni aritmetiche
Abs(num)
Atn (num)
Cos(alfa)
Exp(num)
Fix(num)
Int(num)
Log(num)
Sgn(num)
Sin(alfa)
Sqr(num)
Tan(alfa)
Rnd
Restituisce il valore assoluto del valore numerico num.
Restituisce l’arcotangente in radianti del valore numerico num.
Restituisce il coseno dell’angolo alfa espresso in radianti.
Restituisce il valore di e (costante di Nepero) elevato a num.
Restituisce la parte intera di num.
Restituisce il numero intero immediatamente più piccolo.
Restituisce il logaritmo in base e di num.
Restituisce 1 se num è positivo, 0 se è zero e -1 se num è negativo.
Restituisce il seno dell’angolo alfa espresso in radianti.
Restituisce la radice quadrata di num (num deve essere > = 0).
Restituisce la tangente dell’angolo alfa espresso in radianti.
Ritorna un numero casuale compreso tra 0 e 1.
TAB. 4
Funzioni che operano sulla stringa
Asc(string)
Ritorna un integer che corrisponde al codice ASCII del primo carattere della
stringa string.
Chr(cod_ascii) Effettua la conversione di un codice ASCII cod_ascii, compreso tra 0 e 255, nel
relativo carattere.
Hex(num)
Converte num in una stringa equivalente al suo valore esadecimale.
L’argomento num può essere anche una stringa numerica.
Len(string1)
Restituisce il numero di caratteri di cui è formata la stringa string1.
LTrim(string1) Toglie gli spazi iniziali alla stringa string1.
Str(num)
Converte in stringa il valore numerico num.
Trim(string1)
Toglie gli spazi iniziali e finali alla stringa string1.
UCase(string1) Converte la stringa string1 tutta in caratteri maiuscoli.
Val(string1)
Converte in valore numerico string1.
➜ Programma 4
Si voglia realizzare un programma che visualizza su una finestra l’incremento di un contatore ogni volta che viene premuto un pulsante.
Si seguano passo passo le indicazioni seguenti tenendo presente la figura 9.
1. Lanciare Visual Basic aprendo un nuovo progetto.
2. Nella casella strumenti si faccia clic sul pulsante COMMANDBUTTON.
3. Spostare il puntatore del mouse, che assume la forma di croce, sulla finestra Form1
e tenendo premuto il tasto sinistro (del mouse); trascinare in diagonale. Si disegna
sul form il pulsante con scritto al centro Command1. Rilasciare il tasto del mouse
quando il pulsante ha assunto la grandezza desiderata (lunghezza circa cinque centimetri e larghezza circa un centimetro). Le sue dimensioni possono comunque essere variate trascinando uno degli otto quadratini neri presenti sul perimetro del pulsante disegnato. Il pulsante deve rimanere selezionato, ovvero debbono comparire
lungo il suo perimetro dei quadratini neri. Se per caso non fosse selezionato basta
fare clic con il pulsante sinistro del mouse su di esso.
4. Con il pulsante appena inserito e selezionato nella finestra proprietà, a destra dello
schermo, selezionare (se non già selezionata) la casella CAPTION. Spostare il cursore
del mouse sulla casella a destra, in corrispondenza di Caption, cancellare Command1.
Fig. 9
Per cancellare Command1 fare clic con il pulsante destro del mouse sulla casella, scegliere dal menu che si apre SELEZIONA TUTTO, fare di nuovo clic con il pulsante destro
sulla stessa casella e scegliere dal menu che si apre ELIMINA. Scrivere nella casella
Premere il pulsante. La nuova scritta comparirà anche al centro del pulsante sul
form.
5. Nella casella strumenti si faccia clic sul pulsante TEXTBOX.
6. Spostando il puntatore del mouse sulla finestra Form1, in posizione non occupata
dal pulsante, premere il tasto sinistro (del mouse) e, tenendolo premuto trascinare
in diagonale. Si disegna sul form una nuova finestra con scritto al centro Text1.
Rilasciare il tasto del mouse quando la finestra ha assunto una grandezza simile a
quella del pulsante precedentemente disegnato.
7. Si scriva ora il codice.
Sulla Barra dei menu scegliere VISUALIZZA e poi CODICE (oppure usare l’apposito pulsante sulla finestra del progetto o fare due volte clic sul form). Si apre la finestra
relativa al codice (fig. 6). Selezionare Command1 sul menu a discesa della casella
degli oggetti. Sulla finestra del codice viene inizializzata la subroutine relativa al
pulsante Command1:
Private Sub Command1_Click()
End Sub
Selezionando poi dal menu a discesa Text1 si ottiene l’inizializzazione della nuova subroutine collegata con l’oggetto TextBox:
Private Sub Text1_Change()
End Sub
Infine, selezionando form, si ottiene la terza subroutine relativa all’oggetto form:
Private Sub Form_Load()
End Sub
Il codice per ciascuna subroutine, va posto, come detto, inserendolo nello spazio libero
tra Private ... ed End Sub.
Siccome si desidera incrementare un contatore ogni volta che si preme il pulsante, se la
variabile che referenzia il contatore è conta (identificatore scelto arbitrariamente), si
scriverà nella subroutine Command1_Click():
conta = conta+1
e poi la chiamata alla subroutine Text1_Change() (il cui codice non è ancora scritto)
che visualizza il valore raggiunto dal contatore ogni volta che viene premuto un tasto.
Si ottiene quindi:
Private Sub Command1_Click()
conta= conta +1
Text1_Change
End Sub
La subroutine Command1_Click() è una classica procedura di evento richiamata dal
clic effettuato con il mouse sul pulsante.
Il codice della subroutine Text1_Change() consiste solo nel porre Text1 uguale alla
variabile conta. Si ottiene:
Private Sub Text1_Change()
Text1 = conta
End Sub
Nella terza subroutine, quella relativa all’oggetto form, si provvederà ad azzerare la
variabile conta e ad assegnarla a Text1. Si ottiene:
Private Sub Form_Load()
conta = 0
Text1 = conta
End Sub
Rimane ora solamente da dimensionare la variabile conta come intero. Dal menu a
discesa, posto sotto la casella degli oggetti, si seleziona (generale) e si scrive:
Dim conta As Integer
Il programma completo avrà il seguente codice:
Prog. 4
Dim conta As Integer
Private Sub Command1_Click()
conta= conta +1
Text1_Change
End Sub
Private Sub Text1_Change()
Text1 = conta
End Sub
Private Sub Form_Load()
conta = 0
Text1 = conta
End Sub
Il programma ora può essere posto in esecuzione usando il tasto specifico posto sulla
barra degli strumenti (). Ogni volta che si fa clic sul pulsante il contatore viene incrementato di uno. Si arresta il programma con il tasto posto sulla barra degli strumenti ().
N.B. La variabile Text1 ha le dimensioni di una stringa. Quindi il valore visualizzato non
è un valore numerico, ma una stringa.
Per maggiore precisione si sarebbe dovuta usare la funzione str() (che trasforma un
intero in stringa) e scrivere: text1 = str(conta).
Prima di uscire da VB il progetto può essere salvato utilizzando il menu file e usando il
comando salva progetto con nome… Viene prima richiesto di effettuare il salvataggio
del file .frm e poi quello del progetto .vbp. Scegliere la cartella per il salvataggio ed il
nome desiderato sia per il progetto che per il form (sostituendoli a quelli di default). Si
esce da VB con FILE ⇒ ESCI.
➜
➜ Programma 5
Si scriva un programma che calcoli la potenza dissipata su un resistore, dopo aver introdotto su due TextBox il valore della resistenza e quello della corrente.
Il valore calcolato è visualizzato su un PictureBox. Il calcolo viene eseguito ogni volta
che si preme un pulsante.
1. Si introducono sul Form1 un PictureBox (Picture1) due
TextBox (text1 e text2) e un CommandButton (Command1)
e due Label (Label1 e Label2) ponendoli nella posizione
indicata nella figura 10.
2. Dalle finestre Proprietà per i singoli oggetti si eseguano
le seguenti impostazioni:
a) Picture1: AUTOREDRAW ⇒ TRUE; BACKCOLOR ⇒
TAVOLOZZA ⇒ scegliere colore bianco.
b) LABEL1 ⇒ CAPTION ⇒ R [ohm]
c) LABEL2 ⇒ CAPTION ⇒ I [A]
d) COMMAND1 ⇒ CAPTION ⇒ calcola P [W]
3. Visualizzare la finestra del codice e dal menu a discesa a
sinistra scegliere Command1; viene automaticamente
visualizzata la Sub Command1_clic.
4. Scrivere il codice e fare la dichiarazione delle variabili in
GENERALE, DICHIARAZIONI (fig. 11) come riportato di seguito.
Fig. 10
Fig. 11
Prog. 5
Dim R As Single, I As Single, P As Single
Private Sub Command1_Click()
R = Val(Text1.Text)
I = Val(Text2.Text)
P = R * I ^ 2
Picture1.Print "P = "; P; " [W]"
End Sub
Private Sub Form_Load()
Print "CALCOLO POTENZA DISSIPATA SU UN RESISTORE"
Text1.Text = 0
Text2.Text = 0
End Sub
Nota. La funzione Val() converte i valori letti nelle finestre Text1 e Text2 in valori numerici (i valori acquisiti sono stringhe).
Mettendo in esecuzione il programma, inserendo i valori del resistore e la corrente,
quando si preme il pulsante è calcolato e visualizzato il valore della potenza dissipata
sul resistore. È possibile visualizzare più valori della potenza dissipata, cambiando di
volta in volta le grandezze in input e premendo il tasto.
➜
3.4
Strutture di controllo
Nell’esecuzione di un programma normalmente le istruzioni vengono eseguite una
dopo l’altra. Esistono però particolari istruzioni che permettono di alterare il flusso con
cui il programma viene svolto facendo eseguire un’istruzione piuttosto che un’altra.
La struttura condizionale (selettiva) if ... then
La struttura if ... then svolge il seguente compito:
se (if) si verifica una particolare condizione allora (then) svolge l’istruzione che la
segue (o blocco di istruzioni seguenti).
In caso contrario, se la condizione non è verificata, il programma prosegue con l’istruzione successiva a quella posta dopo then o, nel caso di più istruzioni, con quella posta
dopo end if; in questo secondo caso, se è verificata la condizione dopo l’if , vengono eseguite tutte le istruzioni comprese tra then ed end if.
Nella figura 12 è illustrato con dei diagrammi a blocchi il funzionamento della precedente struttura.
VERA
CONDIZIONE
ISTRUZIONE
O BLOCCO
ISTRUZIONI
VERA
FALSA
CONDIZIONE
FALSA
ISTRUZIONE 1
O BLOCCO
ISTRUZIONI
Fig. 12
IF .... THEN
ISTRUZIONE 2
O BLOCCO
ISTRUZIONI
IF .... THEN ....ELSE
La struttura condizionale if ... then ... else
La struttura condizionale if ... then ... else permette al programmatore di operare
una doppia scelta:
se (if) è verificata la condizione allora (then) viene svolta l’istruzione posta dopo il
then, altrimenti (else) viene eseguita l’istruzione dopo l’else. Vedere la figura 12
per il diagramma a blocchi della struttura.
La struttura condizionale if ... then ... elseif ... else ... end if
Rappresenta una variante della struttura if ... then ... else.
Nella tabella 5 è sintetizzata la sintassi usata per le tre strutture.
TAB. 5
if ... then
if ... then ... else
if ... then ... elseif ... else ...
end if
if condizione then if condizione1 then
istruzione
istruzione
if condizione then istruzione
...............
...............
else
elseif condizione2
Con più istruzioni:
istruzione
istruzione
...............
...............
if condizione then
end if.
else
istruzione
istruzione
...............
...............
end if.
end if.
Con una sola istruzione:
La struttura condizionale select case
A volte quando occorre effettuare una scelta multipla tra diverse possibilità può essere
utilizzata la struttura select case che sostituisce l’utilizzazione di una serie di if ...
then.
TAB. 6
Select Case espressione Select Case espressione
Case val_esp1
Case val_esp1 To val_esp2
Istruzioni
Istruzioni
.............
.................
Case val_esp2
Case val_esp3 To val_esp4
istruzioni
istruzioni
..............
................
Case Else
Case Else
istruzioni
istruzioni
End Select
End Select
Select Case espressione
Case Is operatore relaz. val_esp1
Istruzioni
..................
Case Is operatore relaz. val_esp2
istruzioni
.................
Case Else
istruzioni
End Select
Con espressione si è indicata una espressione numerica o una stringa.
Con val_esp una espressione dello stesso tipo di espressione.
Con case else (che può anche essere omesso), vengono eseguite le istruzioni che
seguono se non viene trovata nessuna coincidenza nei case precedenti.
Sono possibili alcune varianti nella struttura sopra descritta:
1. dopo il case possono essere presenti più di una Val_esp, in tal caso esse debbono
essere separate dalla virgola;
2. dopo il case può essere presente un intervallo racchiuso tra due Val_esp;
3. dopo il case può essere presente un operatore relazionale (maggiore, minore,
uguale, ecc.);
4. dopo il case può essere presente anche una combinazione dei casi precedenti, in tal
caso ognuno di essi deve essere separato da una virgola.
La struttura iterativa while ... wend
VERA
FALSA
CONDIZIONE
CONDIZIONE
FALSA
VERA
ISTRUZIONE
O BLOCCO
ISTRUZIONI
ISTRUZIONE
O BLOCCO
ISTRUZIONI
DO WHILE .... LOOP
O
WHILE ... WEND
DO UNTIL .... LOOP
ISTRUZIONE
O BLOCCO
ISTRUZIONI
ISTRUZIONE
O BLOCCO
ISTRUZIONI
Con tale struttura si esegue un determinato blocco di istruzioni, al limite anche una sola, fino a che (while) una certa
condizione risulta vera. Il controllo della condizione avviene all’entrata del ciclo, pertanto, se essa inizialmente non
risulta vera, il blocco di istruzioni, compreso tra while e
wend, non viene eseguito neanche una volta.
In figura 13 è riportato il diagramma di flusso che illustra
il funzionamento della struttura.
La sintassi della struttura è la seguente:
while condizione
istruzione
istruzione
...............
wend
La struttura iterativa do ... loop
CONDIZIONE
CONDIZIONE
VERA
FALSA
DO .... LOOP WHILE
Fig. 13
FALSA
VERA
DO .... LOOP UNTIL
Tale struttura è una variante rispetto alla while ... wend e
permette di strutturare i programmi in modo più razionale.
Al ciclo do ... loop vengono associate le condizioni while
(mentre) o until (fino a che). Tale struttura può assumere
quattro forme diverse (fig. 13 e tab. 7):
TAB. 7
do while ... loop
do until ... loop
do ... loop while
do ... loop until
do while condizione
istruzione
...............
loop
do until
istruzione
...............
loop condizione
do
istruzione
...............
loop while condizione
do
istruzione
...............
loop until condizione
Le istruzioni comprese tra
do e loop vengono
eseguite in continuazione
mentre la condizione
rimane vera. La
condizione deve essere
già vera all’entrata del
ciclo perché esso venga
eseguito almeno una
volta. Si rimane nel ciclo
se la condizione posta
rimane vera.
Le istruzioni comprese tra
do e loop vengono eseguite in continuazione
fino a che la condizione
diventa vera. La condizione deve essere falsa
all’entrata del ciclo perché esso venga eseguito
almeno una volta. Si
rimane nel ciclo se la condizione posta seguita ad
essere falsa.
Le istruzioni comprese tra
do e loop vengono eseguite in continuazione
mentre la condizione
rimane vera. Il ciclo viene
eseguito almeno una
volta, anche se la condizione è falsa quando si
entra in esso. Infatti il
controllo della condizione avviene alla fine del
ciclo.
Le istruzioni comprese tra
do e loop vengono eseguite in continuazione
fino a che la condizione
non diventa vera. Il ciclo
viene eseguito almeno
una volta, anche se la
condizione è vera quando si entra in esso. Infatti
il controllo della condizione avviene alla fine
del ciclo.
exit do
per uscire anticipatamente da un ciclo do ... loop.
La struttura iterativa for ... next
Con questa struttura vengono ripetute un certo numero di volte, in base all’impostazione di un contatore, le istruzioni incluse tra for ... next (tab. 8).
TAB. 8
for ... to
for ... to ... step
for contatore = val_iniz to val_fin
istruzione
...............
next.
for contatore = val_iniz to val_fin step incremento
istruzione
...............
next.
exit for
per uscire anticipatamente da un ciclo for ... next
Alla variabile contatore viene assegnato un certo val_iniz (valore iniziale). Dopo il to
viene posto il val_fin (valore finale) che deve essere raggiunto dal contatore. Il ciclo
viene eseguito tante volte fino a quando il contatore, incrementato ogni volta di uno,
non diviene maggiore del val_ fin.
Come variante al precedente ciclo può essere impostato il valore di incremento del contatore, se si vuole che esso sia diverso da uno, usando step. Assegnando ad incremento
un valore diverso da uno ad ogni ciclo il contatore viene aumentato del valore indicato dopo step (passo).
Il valore iniziale, quello finale, l’incremento possono essere anche numeri negativi.
Perché il ciclo venga eseguito i valori ad essi assegnati debbono essere congruenti tra
loro.
➜ Programma 6
Si voglia ora preparare un secondo programma che imposta in modo diverso da quello
di default alcune proprietà degli oggetti utilizzati. Questo programma utilizza la struttura condizionale if ... then ... else.
Si voglia realizzare un programma che visualizza su una finestra un piccolo disco colorato di giallo ed un pulsante. Ogni volta che viene premuto il pulsante il disco cambia
colore passando dal giallo al rosso e viceversa.
1. Aperto il nuovo progetto si inserisce il pulsante usando (come per il precedente programma) l’oggetto COMMANDBUTTON.
2. Nella finestra proprietà, selezionare la casella CAPTION. Spostare il cursore del mouse
sulla casella a destra, in corrispondenza di Caption, cancellare Command e scrivere
nella casella Premere il pulsante. La nuova scritta comparirà anche al centro del pulsante sul form.
3. Per inserire il disco rosso fare clic sull’oggetto SHAPE della casella degli strumenti.
Posizionare poi il cursore sul form e, trascinando, tracciare un piccolo quadrato (o
rettangolo).
4. Si modificano ora alcune proprietà dell’oggetto Shape inserito. Si seleziona (se già
non selezionato) il quadrato appena disegnato:
a. Modifica della forma: si seleziona sulla finestra delle proprietà la casella Shape
(forma); facendo clic sul pulsante con il triangolino nero () nella casella a destra
in corrispondenza di Shape, si sceglie sul menu che si apre CIRCLE.
b. Modifica del metodo di riempimento: si seleziona la casella FILLSTYLE (modo di
riempimento); facendo clic sul pulsante con il triangolino nero () nella casella a
destra in corrispondenza di FillStyle, si sceglie sul menu che si apre SOLID.
c. Modifica del colore di riempimento: si seleziona la casella FILLCOLOR; dalla tavolozza
di colori che compare si sceglie il giallo. Annotare il codice del colore (&H80FFFF).
Scrittura del codice:
1. Sulla barra dei menu scegliere VISUALIZZA e poi CODICE. Si apre la finestra relativa al
codice. Facendo clic sul pulsante con il triangolino nero della casella degli oggetti si
apre il menu a discesa.
2. Selezionare Command1. Sulla finestra del codice viene inizializzata la subroutine
relativa al pulsante Command1.
3. Selezionando Form, si ottiene la subroutine relativa all’oggetto Form:
4. Dichiarare in (generale) la variabile conta e poi scrivere il codice delle due subroutine.
Prog. 6
Dim conta As Integer
Private Sub Command1_Click()
conta = conta + 1
If (conta And 1) = 1 Then
Shape1.FillColor = &H80FFFF
Else
Shape1.FillColor = &H808FFF
End If
End Sub
Private Sub Form_Load()
conta = 1
End Sub
Spiegazione del funzionamento del programma
Viene inizialmente eseguita la routine Form_Load(). In essa la variabile conta è posta uguale ad uno. Ogni volta che si preme il pulsante si entra nella routine
Command1_Click(). In essa si incrementa il contatore e si fa quindi l’operazione logica AND tra 1 e il valore assunto dal contatore: il risultato di tale operazione restituisce
1 se il valore del contatore è dispari o 0 se esso è pari. Nel primo caso viene attribuita
alla proprietà FILLCOLOR dell’oggetto SHAPE il codice del colore giallo (&H80FFFF) nel
secondo caso del colore rosso (&HFF).
➜
➜ Programma 7
Si inserisca da tastiera numeri compresi tra 0 e 3 e si visualizzi su due LED disegnati su un form il valore corrispondente del numero introdotto in formato
binario.
Il programma usa le strutture condizionali if ... then e select ... case.
Fig. 14
1. Aprire il progetto ed inserire sul form due oggetti di tipo Shape.
2. Selezionando prima l’uno e poi l’altro modificarne le proprietà FILLSTYLE
(solid), FILLCOLOR (verde) e SHAPE (Circle).
3. Inserire un oggetto Label, sul form nella parte alta a sinistra (fig. 14).
Selezionare la casella CAPTION delle proprietà e sostituire Label (sulla casella a
destra di Caption) con il testo: “Introdurre un numero tra 0 e 3. Poi dare invio.”
4. Sul form, accanto all’oggetto Label contenente il testo appena scritto, inserire l’oggetto TextBox.
Si passa ora a scrivere il codice.
Dalla barra dei menu si attiva VISUALIZZA ⇒ CODICE. Si fa clic sul pulsante
con il triangolino nero della casella degli oggetti e si apre la lista delle
subroutine.
Facendo clic su Form e Text1 si inizializzano le singole sub. Il codice relativo
alla sub Label1 non va scritto e quindi non occorre fare clic su tale variabile.
(generale)
Form
Label1
Text1
Fig. 15
Quando si fa clic su Text1, si inizializza per default la routine Private Sub
Text1_Change().
Poiché nell’esempio si vuole acquisire il testo presente nel TextBox solo dopo aver premuto
il tasto ENTER (↵), si deve cambiare il tipo di routine facendo scorrere i nomi delle varie sub
associate con Text1, usando il pulsante con il triangolino () della casella delle routine, e scegliendo poi KeyDown() (fig. 15). Viene inizializzata la subroutine Text1_ KeyDown(). La
sub Text1_Change() può essere cancellata o lasciata così senza essere utilizzata.
Terminate le inizializzazioni debbono essere presenti le seguenti sub:
Private Sub Form_Load()
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
End Sub
Si scrive quindi il codice per le subroutine Form e Text1.
Nella sub Form_Load() si assegna alla proprietà TEXT dell’oggetto textbox, identificato con la variabile Text1, una stringa vuota (aprendo e chiudendo le virgolette), in
modo da cancellare la visualizzazione del testo presente nel TextBox, posto sul form,
quando si avvia il programma.
La sub Text1_KeyDown() controlla attraverso l’evento KEYDOWN (tasto premuto) se è
stato premuto un tasto e ritorna l’argomento KEYCODE contenente il codice del tasto
premuto. KEYCODE viene confrontato con la costante predefinita VBKEYRETURN che contiene il codice del tasto RETURN (invio).
Nelle tabelle riassuntive (tab. 13) sono riportate le costanti per altri tasti.
Se quindi il tasto premuto dopo le cifre numeriche (0 ÷ 3) è RETURN, si acquisisce il valore numerico digitato e lo si assegna alla variabile numero dopo averlo trasformato da
stringa in valore numerico con la funzione Val().
Si apre quindi una struttura del tipo SELECT CASE che, in base al valore numerico acquisito, colora in modo diverso i due LED. Al termine della sub si provvede a cancellare il
valore numerico precedentemente digitato.
Prog. 7
Dim numero As Integer
Private Sub Form_Load()
Text1.Text = ""
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
numero = Val(Text1.Text)
End If
Select Case numero
' Valuta Numero
Case 0
' Numero = 0.
Shape1.FillColor = &H80FF80
' Verde
Shape2.FillColor = &H80FF80
' Verde
Case 1
' Numero = 1.
Shape1.FillColor = &H80FF80
' Verde
Shape2.FillColor = &HFF
' Rosso
Case 2
' Numero = 2.
Shape1.FillColor = &HFF
' Rosso
Shape2.FillColor = &H80FF80
' Verde
Case 3
' Numero = 3.
Shape1.FillColor = &HFF
' Rosso
Shape2.FillColor = &HFF
' Rosso
End Select
Text1.Text = ""
End Sub
Gli esempi proposti vanno analizzati con attenzione per capirne il funzionamento. Il
lettore, dopo averli messi in esecuzione, può provare ad effettuare su di essi delle variazioni agendo sulle proprietà degli oggetti per osservare i nuovi comportamenti.
Gli esempi illustrati sono alla base dello sviluppo di numerosi altri programmi che il lettore può implementare apportando ad essi le opportune modifiche.
➜
3.5
Matrici
Š Le matrici permettono di memorizzare diversi dati (dello stesso tipo) utilizzando un unico identificatore ed uno o più indici per distinguere i vari valori. Quando una matrice
ha una sola dimensione (un solo indice) prende anche nome di vettore.
In VB le matrici possono avere dimensione fissa o variabile (matrici dinamiche). Per
dichiarare una matrice con dimensioni fisse occorre indicare tra parentesi, dopo l’identificatore, il valore massimo che assumerà l’indice ed il tipo di dato che verrà in essa
memorizzato. Il valore minimo dell’indice, se non esplicitamente indicato, è 0. La sintassi per la dichiarazione è la seguente:
Dim nome(indice_max) As tipo_degli_elementi
oppure:
Dim nome(indice_min To indice_max) As tipo_degli_elementi
Valgono per le matrici le stesse regole di dichiarazione delle variabili e quindi possono
essere pubbliche o private.
Esempi di dichiarazione di matrici con dimensione fissa:
Dim nome (9) As Integer (matrice di 10 elementi di tipo integer)
Private nome (14) As String (matrice di 15 elementi di tipo string)
Public nome (5 To 10) As Double (matrice di 6 elementi con indice minimo che parte da 5)
Dim nome (4 , 9) As Integer (matrice a due dimensioni con 5 × 10 = 50 elementi di tipo
integer)
Non indicando nella dichiarazione di una matrice il tipo di dati (o dichiarandoli esplicitamente Variant) si ottiene una matrice che può contenere elementi di tipo diverso.
Per dichiarare una matrice dinamica, tra le parentesi non deve essere posto alcun valore. È possibile fissare in un secondo momento il numero di elementi da utilizzare con la
matrice dinamica per mezzo dell’istruzione ReDim.
Esempio di dichiarazione di una matrice dinamica:
Dim nome ( ) As Integer
Successivamente si può fissare il numero di elementi della matrice:
ReDim nome (14)
➜ Programma 8
In un vettore (matrice ad una sola dimensione) sono memorizzati tipi diversi di dati. Il programma visualizza sul form, quando si fa clic su di esso, i dati memorizzati nel vettore.
Il codice del programma 8 deve essere inserito nella routine Form_Click().
Prima della dichiarazione dei dati, si trova l’istruzione Option Explicit che obbliga alla
dichiarazione obbligatoria delle variabili usate nel programma. Tale procedura viene inserita se dal menu dei comandi si sceglie Strumenti e poi dal menu a tendina Opzioni e nella
cartella Editor si contrassegna la casella relativa a Dichiarazioni variabili obbligatoria.
Prog. 8
Option Explicit
Dim I As Integer
Private vettore(4)
Private Sub Form_Click()
vettore(0) = "mia stringa"
vettore(1) = 5
vettore(2) = 3.14
vettore(3) = 4E+21
vettore(4) = #2/3/99#
For I = 0 To 4
Print vettore(I)
Next
End Sub
➜
3.6
Routine Sub e Function
Come per altri linguaggi le routine sono blocchi di programma che possono essere
richiamati e quindi eseguiti da altre parti di un programma.
In VB sono presenti routine Sub e routine Function (oltre alle routine Property).
Le routine Sub non restituiscono alcun valore mentre le routine Function restituiscono un valore.
TAB. 9
Sub
Function
tipo Sub nome (parametri)
istruzione
..............
End Sub
tipo Function nome (parametri) As tipo_dati
istruzione
..............
End Function
Con tipo si indica se la Sub o la Function sono Private, Public, Static.
a) Sono Private le Sub (o le Function) che possono essere richiamate solo all’interno
di un modulo.
b) Sono Public quelle richiamabili da tutti i moduli. Con Static si ottiene la conservazione dei valori delle variabili locali delle Sub e delle Function tra le varie chiamate.
Con tipo_dati si indica il tipo di dati restituito dalla Function.
I parametri sono i valori passati alla Sub e alla Function all’atto della chiamata.
La chiamata di una Sub (o di una Function) può avvenire nei seguenti modi:
Call nome (parametri)
4
oppure
nome parametri
L’oggetto form
Come si è visto dagli esempi precedenti, quando si inizia a lavorare con un nuovo progetto, VB inserisce automaticamente un form che denomina Form1. Questo oggetto può
essere considerato il contenitore di altri oggetti. Esso, come gli oggetti presenti sulla casella degli strumenti, possiede sue proprietà e metodi. Come visto negli esempi, è possibile impostare alcune delle proprietà servendosi del menu denominato appunto proprietà. Si descrivono qui brevemente alcune delle proprietà possedute da un form (tab. 10).
TAB. 10
Alcune proprietà dell’oggetto FORM
CAPTION
Imposta il testo presente sulla barra del titolo del form.
NAME
Imposta il nome del form che dovrà essere usato nel codice per fare riferimento ad esso. È buona norma variare il nome di default Form1, assegnandone all’oggetto uno più significativo.
AUTOREDRAW
Impostata su true permette di conservare in memoria l’immagine presente
nel PictureBox. Inoltre l’impostazione su true serve per inviare sulla casella
immagine i risultati del metodo print o dei metodi grafici line, circle, ecc.
Esempio:
Form1.AutoRedraw = true
Form1.Print “Prova scrittura”
AUTOSISE
Impostata su true permette di adattare automaticamente le dimensioni del
form all’immagine.
HEIGHT
Imposta l’altezza del form.
WHIDT
Imposta la larghezza del form.
➜ Programma 9
Per scrivere del testo su un form può essere usato il metodo print. Affinché però tale
metodo abbia effetto quando il form è nascosto, o all’atto del caricamento del form
stesso, occorre impostare la proprietà AUTOREDRAW su TRUE. Nel programma 2.9 il codice
è scritto nella Sub relativa al form stesso, ma potrebbe trovarsi in qualsiasi altra Sub.
Prog. 9
Private
Print
Print
Print
End Sub
Sub Form_Load()
"prova di scrittura su form"
"nuova riga, scrivo ancora sulla";
"seconda riga",
Ogni print scrive su una nuova riga a meno che non sia posto un punto e virgola o una
virgola al termine della stringa da scrivere. Con il punto e virgola il testo successivo
viene unito a quello della precedente riga, mentre con la virgola viene stampato sulla
stessa riga ma staccato dal testo precedente.
➜
5
Controlli della casella degli strumenti
Alcuni dei controlli presenti nella casella degli strumenti sono già stati utilizzati negli
esempi precedenti. Ne vengono ora presi in esame altri che hanno frequente applicazione.
ComboBox
L’oggetto ComboBox permette di scegliere tra una lista di elementi, visualizzando l’elemento prescelto in una casella di
riepilogo (posta in alto sopra l’elenco). Gli elementi da visualizzare nell’elenco possono essere:
1. Introdotti in fase di progettazione scegliendo la proprietà
LIST (fig. 16) ed aprendo con la freccia () la finestra
sotto (elenco). Si va a capo dopo ogni elemento introdotto nell’elenco con CTRL-INVIO.
2. Introdotti con il codice usando il metodo ADDITEM, scrivendo Combo1.AddItem “elemento da inserire” per ogni elemento. Normalmente tale inserzione di elementi avviene
nella Sub Form_load.
È possibile utilizzare la proprietà TEXT per immettere del testo
da visualizzare.
Il programma riportato offre un esempio di utilizzazione dell’oggetto ComboBox.
Fig. 16
➜ Programma 10
Gli elementi di un elenco (PRIMO, SECONDO, ...) sono introdotti con il codice (2° metodo).
Con l’evento click e per mezzo della proprietà LISTINDEX si ottiene il numero dell’elemento su cui si fa clic. Tale elemento viene poi visualizzato sulla prima linea del form.
Per scrivere gli elementi selezionati sempre sulla stessa linea senza sovrapposizione si
usa Cls.
1. Aperto un nuovo progetto si pone al centro del form un oggetto ComboBox.
2. Si scrive poi il codice riportato di seguito.
La figura 17 mostra il risultato del programma una volta messo in
esecuzione.
Un’altra importante proprietà dell’oggetto ComboBox è LIST che
assume la seguente sintassi: Combo1.List(num_elemento). Con
essa è possibile accedere all’elemento indicato da num_elemento (il
primo è zero). Per esempio l’istruzione Print Combo1.List(2)
visualizza sul form corrente il terzo elemento.
Fig. 17
Prog. 10
Private Sub Form_Load()
Combo1.AddItem "PRIMO"
Combo1.AddItem "SECONDO"
Combo1.AddItem "TERZO"
Combo1.AddItem "QUARTO"
End Sub
Private Sub Combo1_Click()
Cls
numero = Combo1.ListIndex
Select Case numero
Case 0
Print "Hai scelto PRIMO"
Case 1
Print "Hai scelto SECONDO"
Case 2
Print "Hai scelto TERZO"
Case 3
Print "Hai scelto QUARTO"
End Select
End Sub
'cancella form e pone cursore all'origine
'selezionato 1° elemento
'selezionato 2° elemento
'selezionato 3° elemento
'selezionato 4° elemento
➜
ListBox
L’oggetto ListBox è simile al ComboBox ma manca della casella di riepilogo. Quando l’elenco di elementi eccede le dimensioni della finestra, viene inserita automaticamente
una barra di scorrimento. Anche ora gli elementi dell’elenco possono essere introdotti
con due modalità:
1. In fase di progettazione scegliendo la proprietà LIST ed aprendo con la freccia () la
finestra sotto (elenco). Si va a capo dopo ogni elemento introdotto nell’elenco con
CTRL-INVIO.
2. Con il codice usando il metodo ADDITEM, scrivendo List1.AddItem “elemento da
inserire” per ogni elemento. Normalmente tale inserzione di elementi avviene nella
Sub Form_load.
Fig. 18
Nella figura 18 è riportata una ListBox in cui è visibile la barra di
scorrimento verticale inserita perché l’elenco dei nomi (introdotti in
fase di progettazione), eccede la lunghezza della casella.
Con List1.RemoveItem num_elemento si rimuove l’elemento
indicato da num_elemento.
Con List1.Clear si rimuovono tutti gli elementi.
Anche per ListBox è valida la proprietà LIST1.LIST (num_elemento)
che permette di accedere ad un certo elemento dell’elenco.
OptionButton
L’oggetto OptionButton permette di inserire dei pulsanti per effettuare delle scelte. Del
gruppo di pulsanti inseriti può essere attivo uno solo. Il programma riportato illustra un
semplice metodo di utilizzazione dei pulsanti.
➜ Programma 11
Su un form sono posti tre pulsanti. Premendo uno dei tre viene visualizzato su una
casella di testo un messaggio che indica quale di essi è stato premuto.
1. Aperto un nuovo progetto si inseriscono sul form tre OptionButton.
2. Selezionandone uno per volta si scrive sulla finestra
delle proprietà, accanto alla casella caption, il testo da
visualizzare in corrispondenza del pulsante (sostituendolo a quello esistente Option1, Option2, ...). In questo
caso, scrivere semplicemente 1, 2 e 3.
3. Si prepara il codice delle tre Sub Optionx_Click ( ).
Nella figura 19 è visualizzato il form che si ottiene una
volta messo in esecuzione il programma.
Fig. 19
Prog. 11
Private Sub Option1_Click()
Text1.Text = "PREMUTO IL PULSANTE 1"
End Sub
Private Sub Option2_Click()
Text1.Text = "PREMUTO IL PULSANTE 2"
End Sub
Private Sub Option3_Click()
Text1.Text = "PREMUTO IL PULSANTE 3"
End Sub
➜
CheckBox
L’oggetto CheckBox svolge funzioni analoghe all’OptionButton. La differenza sostanziale è
che con il CheckBox è possibile selezionare contemporaneamente più di un pulsante effettuando quindi una scelta multipla. Un programma illustra un’utilizzazione dei tre pulsanti.
➜ Programma 12
Alle tre caselle di controllo sono associati tre resistori, R1, R2 e R3. Il programma, premendo
il tasto OK, calcola il valore della resistenza totale di tre resistori posti in serie. Ciascun resistore è inserito nella serie solo se è selezionata la corrispondente casella di controllo.
1. Aperto un nuovo progetto si inseriscono sul form tre CheckBox, un CommandButton
e un TextBox.
2. Selezionando il COMMANDBUTTON nella finestra delle proprietà si scrive accanto alla
casella caption OK.
3. Si inizializzano poi le sole routine del form, del TextBox e del CommandButton.
4. Si scrive il codice.
5. Nella sub Form_Load si provvede a scrivere accanto a ciascuna casella di controllo il
nome del resistore ad essa associato con il relativo valore. Si utilizza per questo la
proprietà caption.
6. Si pone poi nella casella di testo il valore iniziale della serie dei tre resistori
(R1+R2+R3= 0).
Prog. 12
Dim R As Integer, R1 As Integer, R2 As Integer, R3 As Integer
Private Sub Form_Load()
Check1.Caption = "R1= 100"
Check2.Caption = "R2= 200"
Check3.Caption = "R3= 300"
Text1.Text = "R1+R2+R3= 0"
End Sub
Private Sub Text1_Change()
If Check1.Value = 1 Then
R1 = 100
Else
R1 = 0
End If
If Check2.Value = 1 Then
R2 = 200
Else
R2 = 0
End If
If Check3.Value = 1 Then
R3 = 300
Else
R3 = 0
End If
R = R1 + R2 + R3
Text1.Text = "R1+R2+R3= " + Str(R)
End Sub
Private Sub Command1_Click()
Text1_Change
End Sub
7. Nella sub Text1_Change, utilizzando la proprietà VALUE
dell’oggetto CheckBox, si provvede ad impostare a
zero o all’effettivo valore ciascuno dei tre resistori. Si
ha Value = 1 se la casella di controllo è selezionata e
Value = 0 se è non selezionata.
8. Viene quindi calcolata la resistenza totale ed il valore
ricavato, trasformato in stringa con la funzione STR ( ),
è visualizzato nella casella di testo (fig. 20).
Fig. 20
Con la Sub Command1_Click() si richiama ogni volta che
si preme il tasto OK la subroutine Text1_Change().
➜
PictureBox
Il PictureBox funge da contenitore per le immagini e per altri controlli. In esso è possibile visualizzare immagini di vari formati grafici come bitmap (*.bmp), metafile
(*.wmf), file di icone (*.ico) e file con formato *.gif, *.jpg. L’oggetto supporta numerose proprietà e metodi, permettendo una potente elaborazione grafica. Alcune delle
principali proprietà (molte uguali a quelle dei form) sono presenti nella tabella 11.
Per scrivere del testo o disegnare elementi grafici su una PictureBox è necessario utilizzare i metodi grafici PRINT (scrive del testo), LINE (disegna una linea), CIRCLE (disegna un
cerchio), POINT (traccia un punto). Con le proprietà CURRENTX e CURRENTY possono essere
impostate le coordinate in cui verranno inseriti gli elementi grafici o il testo. Una descrizione più dettagliata di questi metodi è fatta più avanti nella sezione metodi grafici.
Esempi di applicazione del PictureBox con vari metodi grafici sono riportati più avanti.
TAB. 11
Alcune proprietà di PICTUREBOX
PICTURE
AUTOREDRAW
AUTOSIZE
HEIGHT
WHIDT
SCALEMODE
SCALELEFT
SCALETOP
SCALEWIDTH
SCALEHEIGHT
È utilizzata per caricare immagini. Esempio:
Picture1.Picture = LoadPicture (“percorso e nome immagine”).
Impostata su true permette di conservare in memoria l’immagine presente
nel PictureBox. Inoltre l’impostazione su true serve per inviare sulla casella
immagine i risultati del metodo print o dei metodi grafici line, circle, ecc.
Esempio:
Picture1.AutoRedraw = true
Picture1.Print “Prova scrittura”.
Impostata su true permette di adattare automaticamente le dimensioni del
PictureBox all’immagine.
Imposta l’altezza della casella immagine (nell’unità impostata con
Scalemode).
Imposta la larghezza della casella immagine (nell’unità impostata con
Scalemode).
Sceglie le unità di misura che sono utilizzate nelle rappresentazioni grafiche
(pixel, punti, twip, inch, mm).
Coordinata dell’angolo sinistro (X1 ).
Coordinata dell’angolo superiore (Y1 ).
Scala per la larghezza della casella immagine.
Scala per l’altezza della casella immagine.
Image
Il controllo immagine (Image) offre al programmatore un numero inferiore di proprietà
e metodi rispetto al PictureBox; tuttavia, esso impegna meno risorse del sistema e permette un più rapido aggiornamento dell’immagine in esso rappresentata. I formati grafici supportati dall’oggetto Image sono gli stessi di PictureBox. Inoltre l’Image permette
un ridimensionamento dell’immagine in essa contenuta anche se a scapito di una perdita di definizione. Perché possa avvenire l’adeguamento del formato dell’immagine alle
dimensioni del controllo immagine la proprietà STRETCH deve essere impostata su True.
➜ Programma 13
Il programma 13 fornisce un esempio di ridimensionamento dell’immagine. Sul Form1
(opportunamente ridimensionato) vengono aperte due Image (Image1 e Image2) di
dimensione diversa.
Nelle proprietà di Image1 STRETCH viene impostato su FALSE, mentre per Image2 su TRUE.
Per poter osservare i bordi delle due Image si deve impostare la proprietà BORDERSTYLE
su FIXED SINGLE.
Il codice scritto per le due Sub inserisce una piccola immagine precedentemente disegnata con il programma Paint (a cui sono state attribuite le dimensioni di 4 × 3 cm), salvata su disco con il nome buffer.bmp.
Prog. 13
Private Sub Image1_Click()
Image1.Picture = LoadPicture("E:\disegni\buffer.bmp")
End Sub
Private Sub Image2_Click()
Image2.Picture = LoadPicture("E:\disegni\buffer.bmp")
End Sub
Fig. 22
Fig. 21
Nella figura 21 è mostrato il form
prima dell’avvio del programma, mentre nella figura 22 l’aspetto che assume dopo l’esecuzione del programma e
l’inserimento dell’immagine.
Per inserire l’immagine sulla rispettiva
Image, deve essere fatto clic su di essa.
Come è possibile osservare dalla figura 22, le dimensioni della prima
casella (con Stretch impostato su false)
si sono adeguate a quelle dell’immagine, mentre nel secondo caso (Stretch
impostato su true), le dimensioni dell’immagine sono state adeguate alla
casella e la definizione è diventata più
scadente.
➜
Timer
L’oggetto Timer permette di inserire nei programmi delle temporizzazioni. Esso viene
posto sul form ma non compare poi durante il funzionamento del programma. Possono
essere utilizzati più Timer contemporaneamente.
Le proprietà fondamentali per l’oggetto Timer sono qui di seguito illustrate.
ALCUNE PROPRIETÀ DI TIMER
Alcune proprietà di TIMER
ENABLED
Impostata su true abilita il Timer e su false lo blocca.
INTERVAL
Deve essere inizializzato con un valore in millisecondi (max. 64767) che indica la durata della temporizzazione.
Al Timer è associata la Sub Timer1_Timer() che viene richiamata, se la proprietà
ENABLED è su True, ciclicamente allo scadere di ogni intervallo di temporizzazione.
➜ Programma 14
Due Timer colorano due Shape di forma circolare posti sul form; il primo ad un
intervallo di tempo di 3 s (dall’avvio del programma) e il secondo dopo altri 2 s.
Fig. 23
Gli oggetti posti sul form sono rappresentati nella figura 23. Si debbono impostare le proprietà delle due Shape in modo che abbiano colore bianco e siano circolari (modificare FILLCOLOR per il colore, FILLSTYLE ⇒ SOLID, SHAPE ⇒ CIRCLE).
Per il Timer1 si deve porre solamente INTERVAL ⇒ 3000 e per Timer2 INTERVAL ⇒ 2000.
I due oggetti vengono attivati da programma.
Il codice del programma è il seguente:
Prog. 14
Private Sub Form_Load()
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Shape1.FillColor = &HFF&
Timer2.Enabled = True
End Sub
Private Sub Timer2_Timer()
Shape2.FillColor = &HFF&
End Sub
➜
➜ Programma 15
Sul form sono posti una Shape di forma circolare e un Timer. La Shape ogni
secondo cambia colore assumendo 6 colori diversi.
Fig. 24
Si ponga sul form una Shape quadrata e un Timer (fig. 24).
Si debbono impostare le proprietà della Shape in modo che abbia colore bianco
e sia circolare (modificare FILLCOLOR per il colore, FILLSTYLE ⇒ SOLID, SHAPE ⇒ CIRCLE).
Per il Timer1 si deve porre ENABLED ⇒ True e INTERVAL ⇒ 1000.
All’avvio viene attivato Timer1 ed ogni secondo è cambiato il colore del cerchio.
Prog. 15
Dim numero As Byte
Private Sub Form_Load()
Shape1.FillColor = &HFFFFFF
numero = 0
End Sub
Private Sub Timer1_Timer()
If numero = 0 Then Shape1.FillColor
If numero = 1 Then Shape1.FillColor
If numero = 2 Then Shape1.FillColor
If numero = 3 Then Shape1.FillColor
If numero = 4 Then Shape1.FillColor
If numero = 5 Then Shape1.FillColor
numero = numero + 1
If numero = 6 Then numero = 0
End Sub
'Bianco
=
=
=
=
=
=
&H80FF80
&HFF
&HFF0000
&HFFFF&
&HC0C0FF
&HFFFFC0
'
'
'
'
'
'
Verde
Rosso
Blu
giallo
rosa
celeste
➜
6
Metodi grafici
Normalmente per ricevere elementi grafici viene utilizzato un oggetto PictureBox o
anche un oggetto Image anche se, come si è visto, possono essere disegnati elementi
grafici su un form.
Metodo Print
Come si è precedentemente accennato con il metodo Print è possibile scrivere testo su
Form, Image e PictureBox. È possibile utilizzare il metodo Print anche con l’oggetto
printer (la stampante al momento selezionata). La sintassi per applicare il metodo Print
sui vari oggetti è la seguente:
oggetto.print “testo_da_visualizzare”
se viene omesso oggetto il metodo Print è applicato normalmente al form corrente.
Metodo Cls
Con il metodo Cls viene cancellato tutto il contenuto dell’oggetto a cui il metodo è
applicato. Le coordinate vengono rimpostate al valore 0,0.
Presentiamo di seguito alcuni casi esemplificativi:
– Image1.Cls: viene cancellato il contenuto della casella Image1.
– Picture1.Cls: viene cancellato il contenuto della casella Picture1.
– Form1.Cls: viene cancellato il contenuto di Form1.
Al solito, se viene omesso l’oggetto, Cls agisce sul form corrente.
Il sistema di coordinate
Sullo schermo le coordinate con l’ascissa x = 0 e y = 0 si trova nell’angolo in alto a sinistra. La scala predefinita usa come unità di misura il twip (1 pollice = 1440 twip, 1cm ≅
567 twip). È possibile impostare la scala in unità diverse da quelle standard con la proprietà SCALEMODE (oggetto.ScaleMode = 0 scala definita dall’utente, 1 scala predefinita
in twip, 2 scala in punti, 3 scala in pixel, 4 scala in caratteri, 5 scala in pollici, 6 scala in
millimetri, 7 scala in centimetri).
I form e i PictureBox dispongono di proprietà atte ad impostare sia la grandezza che la
scala con cui si opera con la grafica.
Per questi oggetti per impostare una scala utente si usano le proprietà SCALELEFT (corrisponde ad x) e SCALETOP (corrisponde a y) per assegnare le coordinate dell’angolo in alto
(top) a sinistra (left) dell’oggetto. Le coordinate impostate si riferiscono sempre al contenitore dell’oggetto. Quindi in genere il video per un form o il form stesso per un
oggetto contenuto nel form.
Assegnate quindi le coordinate dell’angolo in alto a sinistra dell’oggetto, con le proprietà SCALEWIDTH e SCALEHEIGTH si assegnano le unità di larghezza (SCALEWIDTH) e l’altezza (SCALEHEIGTH) dell’oggetto. Con tale impostazione viene fissata la scala dell’oggetto.
Con le proprietà WIDTH e HEIGTH si fissano invece le dimensioni dell’oggetto (larghezza
ed altezza) rispetto a quelle del contenitore.
Per esempio:
Si supponga di porre all’interno del Form1 l’oggetto Picture1. Se si scrive nel codice
(o si impostano direttamente le proprietà dell’oggetto):
Picture1.ScaleLeft = 100
Picture1.ScaleTop = 200
Picture1.Width = 1500
Picture1.Height = 1000
Picture1.ScaleWidth = 2000
Picture1.ScaleHeight = 3000
si ottiene una casella PictureBox che ha:
–
–
–
–
–
coordinate dell’angolo in alto a sinistra (rispetto a Form1) x = 100, y = 200;
larghezza 1500 twip;
altezza 500 twip;
fattore di scala orizzontale 1/2000 della larghezza;
fattore di scala verticale 1/3000 dell’altezza.
Per l’oggetto Image le proprietà che possono essere utilizzate sono ridotte: LEFT e TOP
per le coordinate dell’angolo in alto a sinistra e WIDTH e HEIGTH per la larghezza e l’altezza.
Metodo Scale
Un sistema più sintetico per fissare le coordinate e la scala di un oggetto è l’utilizzazione del metodo Scale con la seguente sintassi:
oggetto. Scale(x0 ,y0) – (x1,y1)
dove con x0 ,y0 si sono indicate le coordinate dell’oggetto in alto a sinistra e con x1,y1
quelle in basso a destra.
Per ribaltare l’asse y del sistema basta assegnare a y0 un valore maggiore di y1.
TAB. 12
Disegno di elementi grafici
Oggetto.Pset(x,y), color
Disegno di un punto alle coordinate x,y con il
colore color. Può essere omesso color.
Disegno di una linea dal punto x1,y1 al punto
Oggetto.Line(x1,y1) - (x2,y2), color
x2,y2 di colore color; color può essere omesso.
Oggetto.Line(x1,y1) – step (dx,dy), color
Disegno di una linea dal punto x1,y1 al punto
x1+dx, y1+dy di colore color; color può essere
omesso.
Disegno di un rettangolo con angoli opposti
Oggetto.Line(x1,y1) - (x2,y2), ,B
x1,y1 e x2,y2.
Oggetto.Circle(x,y), rag, color
Disegno di cerchi di centro x,y, con raggio rag
e colore color; color può essere omesso.
Oggetto.Circle(x,y), rag, color, ang_in, ang_fin Disegno di archi di cerchio di centro x,y, con
raggio rag e colore color; ang_in, ang_fin sono
l’angolo iniziale e finale espressi in radianti;
color può essere omesso.
Oggetto.Circle(x,y), rag, color, , ,vert_oriz
Disegno di ellissi di centro x,y, con raggio rag e
colore color; vert_oriz è il rapporto tra le
dimensioni verticali ed orizzontali; color può
essere omesso.
Proprietà FillColor
Con la proprietà FILLCOLOR si può scegliere un codice per il colore di riempimento di un
oggetto chiuso. Per scegliere il colore e quindi il codice conviene utilizzare direttamente la finestra proprietà dell’oggetto PictureBox (o del form), selezionando FILLCOLOR e
scegliendo poi nella casella di destra, per mezzo del pulsante con il triangolino, il colore desiderato e prendendo nota del codice del colore.
Proprietà FillStyle
Con la proprietà FILLSTYLE si selezionano le modalità con cui vengono colorati gli elementi grafici chiusi: con FILLSTYLE = 0 l’elemento è pieno, FILLSTYLE = 1 l’elemento è trasparente. Si vedano nella finestra proprietà il significato degli altri codici.
➜ Programma 16
Con il codice del programma 16 si disegna su un PictureBox un’ellisse con asse maggiore orizzontale riempita con il colore giallo.
Prog. 16
Private Sub Picture1_Click()
Picture1.FillStyle = 0
Picture1.FillColor = &H80FFFF
Picture1.Circle (600, 600), 400, , , , 0.5
End
➜
Proprietà DrawWidth
Con la proprietà DRAWWIDTH si imposta lo spessore delle linee per gli elementi grafici
tracciati. I valori che può assumere DrawWidth sono in pixel e vanno da 1 a 32677.
Proprietà DrawStyle
Con la proprietà DRAWSTYLE si imposta le modalità di tracciamento delle linee dei componenti grafici. I valori che può assumere DRAWSTYLE vanno da 0 a 6 che rappresentano
linee piene (0) e tratteggiate in vario modo.
➜ Programma 17
Con il codice del programma 2.17 si disegna su un PictureBox una serie di cerchi disegnati con linee di diversa forma.
Prog. 17
Option Explicit
Dim r As Integer, i As Byte, dr As Integer
Private Sub Picture1_Click()
r = 300
dr = 100
For i = 0 To 6
Picture1.DrawStyle = i
Picture1.Circle (1200, 1000), r
r = r + dr
Next
End Sub
➜
7
File
In VB l’accesso ai file può avvenire con tre modalità diverse:
1. Sequenziale: il file viene aperto con la sintassi:
Open nome_file For modo As numero_file Len = num
• Modo può essere:
Input (lettura del file). Il file deve esistere.
Output (scrittura sul file). Se il file non esiste viene creato.
Append (aggiunta di dati). Se il file non esiste viene creato.
• Numero_file è un numero che si attribuisce al file che deve essere diverso da quello di un file già aperto precedentemente.
• Len = num serve per fissare il numero di caratteri da inserire nel buffer e può essere omesso.
L’accesso ai dati nei file sequenziali avviene con le istruzioni Input#, Input() o
Line Input (lettura dei dati) Print# o Write# (scrittura dei dati).
2. Casuale (random): il file viene aperto con la sintassi:
Open nome_file For Random As numero_file Len = lung_record
Con Len = lung_record si indica la lunghezza dei record che vengono inseriti nel file.
L’accesso ai dati nei file casuali avviene con le istruzioni Get (lettura dei dati) Put
(scrittura dei dati).
3. Binario: il file viene aperto con la sintassi:
Open nome_file For Binary As numero_file
L’accesso ai dati nei file casuali avviene con le istruzioni Get (lettura dei dati) Put
(scrittura dei dati).
Con la funzione EOF(numero_file) si può controllare che non sia stata raggiunta la
fine del file.
La funzione LOF(numero_file) restituisce la lunghezza in byte del file.
In tutte e tre le modalità i file dopo l’uso vanno chiusi con l’istruzione Close(numero_file); possono essere chiusi anche più file contemporaneamente.
Controlli per la gestione di unità, cartelle e file
Sono tre i controlli che permettono di visualizzare e selezionare le unità di memorizzazione presenti nel PC, le cartella e i file:
• DriveListBox: visualizza le unità presenti nel sistema e permette di selezionare
quella desiderata.
• DirListBox: visualizza le cartelle presenti in un’unità e permette di scegliere quella desiderata.
• FileListBox: visualizza un elenco di file e permette di effettuare la selezione di
uno di essi.
➜ Programma 18
Si inseriscano sul form i controlli DriveListBox, DirListBox e FilelistBox e si
scriva un programma che permetta di selezionare un’unità, una cartella ed un file.
Inseriti sul Form1 i tre oggetti prelevati dalla casella degli strumenti, si assegni loro una
dimensione adeguata (fig. 25). Si scriva poi il codice del programma 18.
La Sub File1_Click() lasciata vuota, potrebbe servire per aprire il file selezionato.
Fig. 25
Prog. 18
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
ChDrive Drive1.Drive
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
End Sub
➜
8
Programmi d’esempio
Vengono ora proposti alcuni programmi applicativi che utilizzano, tra l’altro, alcuni dei
metodi grafici di VB.
➜ Programma 19
Rappresentazione grafica di assi cartesiani e grafico di un segnale sinusoidale. È possibile inserire su caselle di testo i valori minimi e massimi delle ascisse e il valore Vmax
della tensione v (t ) = Vmax ⋅ sin (6, 28 ⋅ t ) .
Il grafico è quello di un segnale sinusoidale con frequenza di 1 Hz (infatti essendo
ω = 2 π f = 6,28 rad/s è quindi f =
6, 28
ω
=
= 1Hz ).
2⋅ π 2⋅ π
Il codice è posto in due routine:
Command1_Click(), in cui si leggono i
valori inseriti nei TextBox, e Form_Load ( )
dove vengono fissati i valori iniziali e finale per l’asse dei tempi e il valore massimo
della tensione. Con un CommandButton,
nella proprietà caption del quale è stata
inserita la dicitura “Disegna grafico”,
viene attivato il disegno del grafico. In tre
Label distinte sono posti, preimpostando
al solito la proprietà caption, i messaggi
per l’introduzione dei valori massimi e
minimi. Le diciture (t minimo, ecc.) sono
centrate nelle caselle utilizzando la proprietà ALIGNEMENT ⇒ CENTER. L’introduzione
vera e propria dei valori avviene poi in tre
TextBox (Text1, Text2 e Text3).
Fig. 26
Il grafico è disegnato per punti con il metodo PSET (X,Y) in un PictureBox. Con
Picture1.Scale viene fissata la scala per la rappresentazione. Nella figura 26 è
riportata la disposizione dei vari oggetti sul form. Ogni volta che si preme il pulsante
viene pulita la casella immagine con il metodo Cls ed è ridisegnato il grafico. È possibile, di volta in volta, prima di azionare il pulsante per il disegno del grafico, variare il
valore di t minimo, di t massimo e di Vmax.
Prog. 19
Private Sub Command1_Click()
tmin = Val(Text1.Text)
tmax = Val(Text2.Text)
Vmax = Val(Text3.Text)
Picture1.Cls
Picture1.Scale (-3, 5)-(3, -5)
Picture1.Line (-3, 0)-(3, 0)
'ASSE t
Picture1.Line (0, -5)-(0, 5)
'ASSE V
For t = Val(Text1.Text) To Val(Text2.Text) Step 0.002
v = Vmax * Sin(6.28 * t)
Picture1.PSet (t, v)
Next
End Sub
Private Sub Form_Load()
Text1.Text = -3
Text2.Text = 3
Text3.Text = 5
End Sub
➜
➜ Programma 20
Si voglia disegnare il diagramma di una tensione sinusoidale raddrizzata a doppia semionda espressa dalla relazione v ( t ) = Vmax ⋅ sin( t ) . La tensione è rappresentata nel solo 1°
quadrante.
1
ω
=
≅ 0.159 Hz.
Questa volta essendo ω = 1 il segnale sinusoidale ha una frequenza f =
2⋅ π 2⋅ π
Come è noto, per ottenere un segnale raddrizzato a doppia semionda, basta prendere il valore assoluto del segnale sinusoidale. Come è
possibile osservare, il codice è simile a quello
del programma 19. È usata una scala diversa
e gli assi sono disegnati solo per valori positivi
di t e di v(t). Il valore assoluto si ottiene con la
funzione Abs().
Nella figura 27 è visualizzata la finestra
come appare dopo che è stato avviato il programma e premuto il pulsante per disegnare
il grafico.
Fig. 27
Prog. 20
Private Sub Command1_Click()
tmin = Val(Text1.Text)
tmax = Val(Text2.Text)
Vmax = Val(Text3.Text)
t0 = 1
V0 = 1
Picture1.Cls
Picture1.Scale (0, 10)-(20, 0)
Picture1.Line (0, V0)-(20, V0)
Picture1.Line (t0, 0)-(t0, 10)
For t = Val(Text1.Text) To Val(Text2.Text) Step 0.01
V = Abs(Vmax * Sin(t))
Picture1.PSet (t + t0, V + V0)
Next
End Sub
Private Sub Form_Load()
Text1.Text = 0
Text2.Text = 20
Text3.Text = 5
End Sub
'ASSE t
'ASSE V
➜
➜ Programma 21
Si visualizzi l’andamento della tensione con cui si carica un condensatore in un circuito
R-C assegnata la costante di tempo τ = R ⋅ C e la tensione della batteria che alimenta il
circuito (circuito R-C sollecitato da una tensione a gradino).
Come è noto, la relazione che lega la tensione presente ai capi del condensatore con i
parametri del circuito è la seguente:
v C (t ) = Vbb ⋅ (1 − e
−
t
τ
)
Questa relazione viene utilizzata nel programma. È possibile tracciare più grafici
variando di volta in volta il valore della τ e
della tensione Vbb. Non è consentito variare
invece il valore del tempo (minimo e massimo) a meno di non intervenire sul codice. Il
grafico è disegnato per punti con il colore
rosso assegnato con il metodo RGB(255, 0, 0)
(fig. 28).
Fig. 28
Prog. 21
Private Sub Command1_Click()
tmin = 0
tmax = 20
Vbb = Val(Text3.Text)
tau1 = Val(Text4.Text)
t0 = 1
V0 = 1
Picture1.Cls
Picture1.Scale (0, 10)-(20, 0)
Picture1.Line (0, V0)-(20, V0)
Picture1.Line (t0, 0)-(t0, 10)
Picture1.Line (t0, Vbb + V0)-(20, Vbb + V0)
For t = Val(tmin) To Val(tmax) Step 0.01
V = Vbb * (1 - Exp(-t / tau1))
Picture1.PSet (t + t0, V + V0), RGB(255, 0, 0)
Next
End Sub
Private Sub Form_Load()
Text3.Text = 5
Text4.Text = 4
End Sub
'ASSE t
'ASSE V
'Vbb
➜
➜ Programma 22
Il programma 22 può essere facilmente trasformato per poter visualizzare più grafici
in successione, di diversi colori, cambiando di volta in volta la τ e/o Vbb.
Nella Sub Command1_Click() bisogna togliere la riga Picture1.Cls, sostituire nella
riga di codice Picture1.PSet (t + t0, V + V0), RGB(255, 0, 0) la funzione del
colore RGB(255, 0, 0) con QBColor(color), aggiungere dopo il Next color = color − 1.
Nella Sub Form_Load() aggiungere color = 14. Il codice con le parti da modificare è
riportato di seguito. Con la funzione QBColor si possono assegnare 16 colori diversi
facendo assumere alla variabile color valori tra 0 e 15. Essendo 15 il bianco si è partiti
dal colore 14 (giallo). La scelta di partire dal colore 14 è stata effettuata per avere colori più chiari. Si ottiene il nuovo codice (programma 22).
Prog. 22
Dim color As Byte
Private Sub Command1_Click()
tmin = 0
tmax = 20
Vbb = Val(Text3.Text)
tau1 = Val(Text4.Text)
t0 = 1
V0 = 1
Picture1.Scale (0, 10)-(20, 0)
Picture1.Line (0, V0)-(20, V0)
'ASSE t
Picture1.Line (t0, 0)-(t0, 10)
'ASSE V
Picture1.Line (t0, Vbb + V0)-(20, Vbb + V0)
'Vbb
For t = Val(tmin) To Val(tmax) Step 0.01
V = Vbb * (1 - Exp(-t / tau1))
Picture1.PSet (t + t0, V + V0), QBColor(color)
Next
color = color - 1
End Sub
Private Sub Form_Load()
color = 14
Text3.Text = 5
Text4.Text = 4
End Sub
➜
➜ Programma 23
Si vogliano ora rappresentare contemporaneamente le tre tensioni di carica di tre
distinti circuiti R-C per cui sono assegnate le tre costanti di tempo e il valore della tensione della batteria (Vmax). I grafici debbono essere di colore diverso. Sul grafico, premendo un pulsante, può essere disegnato anche un reticolo.
Il codice può essere scritto seguendo quello dell’esempio precedente, anche se ora esso
è più complesso. Nel programma sono utilizzati nuovi elementi grafici che possono servire da esempio per la stesura di altri programmi.
Sono presenti tre subroutine: la prima, attivata con il pulsante Disegna grafico, provvede a tracciare gli assi cartesiani e disegna i grafici; la seconda, attivata dal pulsante
Inserisci Reticolo, provvede a disegnare appunto il reticolo ed a scrivere i valori massimi della tensione e dei tempi sugli assi v(t) e t; e la terza acquisisce i valori delle costanti di tempo e di Vmax.
Fig. 29
Sul form vanno posti (fig. 29) un PictureBox (per il disegno del grafico), due
CommandButton (disegna grafico e Inserisci Reticolo), quattro Label (Vmax, tau1, tau2,
tau3) e quattro TextBox.
In fase di inserimento dei pulsanti vanno preimpostate le caption con i messaggi scritti
sui pulsanti stessi.
Con la proprietà font, facendo clic sul pulsante con tre puntini è stata impostata la
grandezza del testo (12 punti per il primo e 10 punti per il secondo lasciando invariato
il tipo di carattere).
I messaggi sulle label sono stati impostati ancora con la proprietà caption e sono stati
posti al centro della casella con ALIGNEMENT ⇒ CENTER.
Analisi del codice
1. Nella Sub Command1_Click() vengono letti i valori delle costanti di tempo e della
Vmax.
2. Il valore di questa tensione è moltiplicato per 10 per adattarlo alla scala di disegno
scelta.
3. Si fissa poi il valore di scala della picture1 (coordinate in alto a sinistra x0 = 0, y0 =
200, in basso a destra x1 = 200, y1 = 0). Con tale scelta delle coordinate si pone il
punto di coordinate 0,0 in basso a sinistra.
4. Si disegnano quindi gli assi cartesiani scegliendo per essi uno spessore pari a 2 pixel
(Picture1.DrawWidth = 2).
5. Si traccia poi la linea orizzontale che rappresenta la tensione Vmax, scegliendo una
rappresentazione tratteggiata. Per ottenere ciò deve essere prima reimpostato il
valore dello spessore della linea ad un pixel (Picture1.DrawWidth = 1) e poi
usare la funzione per il tratteggio Picture1.DrawStyle = 2.
Il disegno delle curve avviene per punti attribuendo ad ogni grafico colore diverso con
la funzione RGB (Rosso, Verde, Blu).
Nella Sub Command2_Click() usando un ciclo for per incrementare di volta in volta
le coordinate, vengono tracciate una serie di linee verticali e poi orizzontali.
Con Picture1.CurrentX e Picture1.CurrentY si posiziona il cursore per scrivere i
valori della tensione e del tempo in prossimità degli assi.
Prog. 23
'DISEGNA ASSI E GRAFICI
Private Sub Command1_Click()
tmin = 0
tmax = 180
vmax = Val(Text1.Text) * 10
tau1 = Val(Text2.Text)
tau2 = Val(Text3.Text)
tau3 = Val(Text4.Text)
t0 = 10
V0 = 20
Picture1.Cls
Picture1.Scale (0, 200)-(200, 0)
Picture1.DrawWidth = 2
'spessore linea 2 pixel
Picture1.Line (0, v0)-(200, V0)
'ASSE t
Picture1.Line (t0, 0)-(t0, 200)
'ASSE v
Picture1.DrawWidth = 1
Picture1.DrawStyle = 2
'linea tratteggiata
Picture1.Line (t0, Vmax + V0)-(200, Vmax + V0)
'Vmax
For t = tmin To tmax Step 0.1
v = Vmax * (1 - Exp(-t / tau1))
Picture1.PSet (t + t0, v + V0), RGB(255, 0, 0)
v = Vmax * (1 - Exp(-t / tau2))
Picture1.PSet (t + t0, v + V0), RGB(0, 255, 0)
v = Vmax * (1 - Exp(-t / tau3))
Picture1.PSet (t + t0, v + V0), RGB(0, 0, 255)
Next
End Sub
'DISEGNA IL RETICOLO
Private Sub Command2_Click()
Picture1.Scale (0, 200)-(200, 0)
Picture1.DrawStyle = 0
'linea piena
For I = 20 To 200 Step 20
Picture1.Line (10 + I, 20)-(10 + I, 200), RGB(10, 150, 50)
'Reticolo vert.
Picture1.Line (10, 200 - I)-(200, 200 - I), RGB(10, 150, 50) 'Reticolo oriz.
Next
Picture1.CurrentX = 1
Picture1.CurrentY = 186
Picture1.Print "16"
Picture1.CurrentX = 185
Picture1.CurrentY = 15
Picture1.Print "180"
End Sub
'LEGGE VALORI COSTANTI DI TEMPO E Vmax
Private Sub Form_Load()
Text1.Text = 15
Text2.Text = 40
Text3.Text = 30
Text4.Text = 20
End Sub
➜
Tabelle riassuntive
TAB. 13
Costanti dei tasti del mouse e tasti speciali della tastiera
Costante
vbKeyLButton
vbKeyRButton
vbKeyBack
vbKeyTab
vbKeyReturn
vbKeyShift
vbKeyControl
vbKeyEscape
vbKeySpace
vbKeyPageUp
vbKeyPageDown
vbKeyLeft
vbKeyUp
vbKeyRight
vbKeyDown
vbKeyDelete
Valore
1
2
8
9
13
16
17
27
32
33
34
37
38
39
40
46
Descrizione
Pulsante sinistro del mouse
Pulsante destro del mouse
Tasto BACKSPACE
Tasto TAB
Tasto INVIO
Tasto MAIUSC
Tasto CTRL
Tasto ESC
BARRA SPAZIATRICE
Tasto PGSU
Tasto PGGIÙ
Tasto freccia SINISTRA
Tasto freccia SU
Tasto freccia DESTRA
Tasto freccia GIÙ
Tasto CANC
Costanti dei tasti lettere maiuscole “A” ... “Z”
vbKeyA
.............................
vbKeyZ
65
...............
90
A
............
Z
Costanti dei tasti numerici “0” ... “9”
vbKey0
....................
vbKey9
COSTANT
vbKeyF1
..................
vbKeyF12
48
0
57
9
Costanti dei tasti funzione F1 ... F12
112
F1
123
F12
TAB. 14
Funzioni aritmetriche
Abs(num)
Atn(num)
Cdbl(num)
Cint(num)
Clng(num)
Cos(alfa)
Csng(num)
Exp(num)
Fix(num)
Int(num)
Log(num)
Sgn(num)
Sin(alfa)
Sqr(num)
Tan(alfa)
Rnd
Restituisce il valore assoluto del valore numerico num.
Restituisce l’arcotangente in radianti del valore numerico num.
Converte in doppia precisione num.
Restituisce un numero intero effettuando l’arrotondamento di num.
Restituisce un numero intero effettuando l’arrotond. di num di tipo LONG.
Restituisce il coseno dell’angolo alfa espresso in radianti.
Converte in singola precisione num.
Restituisce il valore di e (costante di Nepero) elevato a num.
Restituisce la parte intera di num.
Restituisce il numero intero immediatamente più piccolo.
Restituisce il logaritmo in base e di num.
Restituisce 1 se num è positivo, 0 se è zero e − 1 se num è negativo.
Restituisce il seno dell’angolo alfa espresso in radianti.
Restituisce la radice quadrata di num (num deve essere > = 0).
Restituisce la tangente dell’angolo alfa espresso in radianti.
Ritorna un numero casuale compreso tra 0 e 1.
TAB. 15
Funzioni che operano sulle stringhe
Asc(string)
Ritorna un integer che corrisponde al codice ASCII del primo carattere della
stringa string.
Chr(cod_ascii)
Effettua la conversione di un codice ASCII cod_ascii, compreso tra 0 e 255, nel
relativo carattere.
Hex(num)
Converte num in una stringa equivalente al suo valore esadecimale.
L’argomento num può essere anche una stringa numerica.
InStr(iniz, string1, string2) Ricerca se la stringa string2 è presente nella stringa string1 e, in caso affermativo restituisce la posizione del primo carattere in cui essa inizia. La ricerca ha
inizio a partire dal carattere che occupa la posizione iniz.
InStr(string1, string2)
Ricerca se la stringa string2 è presente nella stringa string1, e in caso affermativo, restituisce la posizione del primo carattere in cui essa inizia.
LCase(string1)
Converte la stringa string1 tutta in caratteri minuscoli.
Left(string1, num_car)
Restituisce un numero di caratteri pari a num_car, a partire dal primo a sinistra,
della stringa string1.
Len(string1)
Restituisce il numero di caratteri di cui è formata la stringa string1.
LTrim(string1)
Toglie gli spazi iniziali alla stringa string1.
Mid(string1, posiz, num_car)
Restituisce un numero di caratteri, della stringa string1, pari a num_car, a partire dal carattere che occupa la posizione posiz dall’inizio della stringa.
Right(string1, num_car)
Restituisce un numero di caratteri pari a num_car, a partire dall’ultimo a destra,
della stringa string1.
Rtrim(string1)
Toglie gli spazi finali alla stringa string1.
Space(num)
Ritorna una stringa di num spazi.
Str(num)
Converte in stringa il valore numerico num.
String(lung, cod_ascii)
Restituisce una stringa la cui lunghezza è pari a lung, formata di caratteri ripetuti con codice ASCII uguale a cod_ascii.
Trim(string1)
Toglie gli spazi iniziali e finali alla stringa string1.
UCase(string1)
Converte la stringa string1 tutta in caratteri maiuscoli.
Val(string1)
Converte in valore numerico string1.
StrComp(string1, string2)
Ritorna 0 se le stringhe string1 e string2, confrontate carattere per carattere,
sono uguali.
StrConv(string1, const)
Restituisce string1 convertita secondo il valore di const:
1
Trasforma in maiuscole la stringa.
2
Trasforma in minuscole la stringa.
3
Trasforma in maiuscolo la prima lettera di ogni parola della stringa.
64 Trasforma la stringa in Unicode secondo la tabella codici del sistema.
128 Trasforma la stringa da Unicode secondo la tabella codici del sistema.
Unicode è uno standard per i caratteri definito dalla ISO. Unicode utilizza 16 bit
(2 byte) per definire 65536 caratteri. In essi sono compresi segni di punteggiatura, simboli matematici, ecc.
Esercizi proposti
1
Sulla base del programma 4 si scriva un
programma che, per mezzo di un secondo
pulsante, permetta anche di decrementare
il contatore.
2
Sulla base del programma 6 si scriva un
programma che permetta di variare il colore del disco, ogni volta che si preme il pulsante, con tre o più colori.
3
Sulla base del programma 7 si scriva un
programma che permetta di visualizzare il
conteggio binario sui LED per numeri
superiori a tre.
4
Si visualizzi sul form i numeri interi da 1 a 15,
tranne il numero 10, uno per ciascuna riga ed
ognuno preceduto dal messaggio “numero”.
5
Si acquisisca da un TextBox, con doppio
clic, un numero in singola precisione, se
esso è inferiore a 1000 lo si divida per 2 e
si visualizzi sul form il quoziente, altrimenti lo si moltiplichi per 2 e si visualizzi il risultato dell’operazione. Ogni visualizzazione
deve essere preceduta da opportuno messaggio (per esempio “quoziente”, ecc.).
132
6
Si acquisiscano da due TextBox, con doppio clic, due numeri interi positivi, si trovi il
maggiore dei due e lo si visualizzi sul form
preceduto dal messaggio “il maggiore dei
due è”.
7
Si inseriscano sul form due pulsanti denominati CONTA e STOP. Il programma deve
contare quante volte viene fatto clic sul pulsante CONTA e, quando si fa clic sul pulsante STOP, visualizzare sul form il messaggio
“il pulsante è stato premuto”; numero di
volte; “volte” ed azzerare il contatore. Se il
pulsante CONTA viene premuto per sei volte,
alla settima volta, se non si è premuto il
pulsante di STOP, bisogna visualizzare il
messaggio “raggiunto conteggio massimo
(7) il contatore viene azzerato” ed azzerare
il contatore.
8
Si acquisisca per mezzo di un TextBox un
certo numero di interi positivi. L’acquisizione deve terminare quando si introduce il
numero 0. Al termine dell’acquisizione visualizzare sul form il messaggio “il numero
maggiore letto è:” seguito dal numero maggiore tra quelli introdotti.
MODULO 3
I
LINGUAGGI DI PROGRAMMAZIONE
Scarica

Visual Basic®