- presentazione del sito
- Registrazione
- Eventi, mostre, convegni ed iniziative segnalate dalle aziende
- Recensioni ed articoli
- Le Mailing Lists
- La rivista Pc Ciechi
- Wiki
- Chi siamo
- Donazioni
- Un progetto degno di nota: Wintalbra
- Come navigare in questo sito
- rss
- Bancomat Accessibili sul territorio nazionale
- Contattaci
- I sostenitori di SpazioAusili
Corso visual basic script\Uso di inputbox
Guido Ruggeri su winguido tecnica, 21\12\2009, h.21.48.
Adesso facciamo un esercizio, il numero 4, simile al
precedente numero 3, con la differenza che le variabili
Cognome e Nome non sono definite staticamente dal programma
stesso, ma le imposta l'utente attraverso la funzione
InputBox.
In questo modo, ogni utente che userà il programma potrà
immettere il proprio nominativo.
Queste sono le 3 righe che dovete scrivere in un file .vbs.
Ricordatevi di usare le parentesi in ogni chiamata ad
InputBox, perché, proprio perché vogliamo che ci
restituisca un valore, dobbiamo chiamarla come funzione e
non come procedura.
Cognome = InputBox("Cognome:")
Nome = InputBox("Nome:")
MsgBox "Io mi chiamo: " & Nome & " " & Cognome
E' riuscito?
Ed ora, un po' di pubblicità
:***
Donato Taddei.
avrete fatto anche voi qualcosa di simile
ma date se volete una occhiata a queste due righe di codice:
risposta = InputBox("scrivi il tuo dolce preferito", "Sondaggio natalizio",
"cassata")
MsgBox risposta, , "Avete digitato"
sono forse uscito appena dal seminato ma ho cercato con google, per andare
sul sicuro:
msdm InputBox e c'è la spiegazione di cosa fa e quali parametri richiede la
funzione.
Così la finestra creata con la InputBox ora ha anche un titolo "sondaggio
natalizio":
facendo inserttcon jaws o nvda ve lo dirà, anzi ve lo dirà in automatico.
In secondo luogo suggerisce un dolce nel campo editazione. "cassata".,
stringa che si può cancellare o modificare o lasciare inalterata.
Dando invio senza modificare questo comparirà nella successiva MsgBox.
Non comparirà se darete invio sul pulsante annulla o se premerete il tasto
esc.
Ho aggiunto anche un titolo "avete digitato" alla MsgBox per farlo
somigliare di più a un discorso.
Le ho riportate se qualcuno vuole provare perchè le cose si imparano a furia
di provare e riprovare anche.
Commento: è proprio una pacchia!
Con altri linguaggi, come il mitico c, sarebbe alquanto laborioso avere
queste semplici finestre, ergo ancora una volta ottima la scelta del
linguaggio.
***
Riccardo Sisti.
ok Guido, fino ad ora è tutto chiaro. Mi sono esercitato facendo alcune prove.
Eccone una:
Nomemadre = InputBox("come si chiama tua madre?")
Nomepadre = inputbox("come si chiama tuo padre?")
msgbox "ho capito! I tuoi genitori si chiamano:" &nomemadre& " e " &nomepadre
Guido Ruggeri.
Altra osservazione per Riccardo: nella stringa "ho capito! I
tuoi genitori si chiamano:", dopo il segno dei due punti
dovrebbe esserci uno spazio vuoto.
Altrimnti, quando si va a concatenare con la stringa
nomemadre, i segno dei due punti risulta attaccato al nome
della madre.
Ricordate che una buona ortografia vuole che dopo ogni segno
di punteggiatura ci sia uno spazio vuoto, oppure un ritorno
a capo.
Perciò quando concateniamo le stringhe dobbiamo sepre
concepirle in modo che questa regola sia rispettata nella
stringa risultante.
***
In VBScript si può anche fare a meno degi spazi tra le
variabili e gli operatori, ma è bene lo stesso prendersi
l'abitudine di metterli.
Perché invece, se fossimo in Visual Basic, scrivere:
&nomemadre& " e " , non andrebbe bene.
Il secondo simbolo di e commerciale, subito dopo la
variabile nomemadre e senza spazio interposto, verrebbe
scambiato per un qualificatore della variabile stessa.
Inoltre la presenza degli spazi rende il codice sorgente
più ordinato e leggibile.
***
d.
> come si fa ad inserire dei ritorno a capo nella stringa
> visualizzata con msgbox, risultato del concatenamento
> delle variabili ottenute da inputBox, in modo che risulti
> su più righe? Alessandro
Risposta:
Innanzitutto un bentornato ad Alessandro che, sebbene non
abbia mai smesso di seguire le liste, erano anni che non
scriveva più.
Il ritorno a capo si realizza inserendo nella stringa il
byte 13, oppure il byte 10, oppure la seguenza dei due byte
13 e 10.
Come mai questa confusione, non bastava attribuire il
significato di ritorno a capo soltanto al byte 13 oppure al
byte 10?
Qui bisogna fare un passo indietro di circa 40 anni,
all'epoca in cui le macchine da scrivere elettriche
cominciarono ad evolversi per trasformarsi in macchine per
la videoscrittura.
Nacque cioè la possibilità di usare le macchine da
scrivere non solo per stampare direttamente il testo mentre
veniva battuto, ma anche per registrarlo salvandolo in una
memoria, per poi stamparlo in un secondo momento.
I file furono così concepiti allo scopo di memorizzare i
movimenti fatti con la macchina da scrivere, per poterli in
un secondo momento riprodurre.
Chi di voi usava le macchine da scrivere? Ricordate qual'era
la manovra per andare a capo?
Ci voleva un doppio movimento. Un primo movimento per
spingere il carrello alla posizione di inizio della riga, un
altro per far ruotare il carrello e farlo avanzare di una
riga.
Quindi un primo movimento di ritorno carrello, carriage
return, e un secondo di avanzamento riga, line feed.
Il significato di carriage return fu attribuito
convenzionalmente al byte 13, mentre quello di line feed al
byte 10.
Quindi nei file per le macchine da scrivere il ritorno a
capo era indicato dalla sequenza dei due byte 13 e 10,
cioè carriage return e line feed.
Alla grafica di Windows basterebbe un unico comando di
ritorno a capo, ma per compatibilità con i precedenti
sistemi Windows interpreta sia il byte 13 sia il byte 10 sia
il loro accoppiamento come un ritorno a capo.
Ah, dimenticavo, che cos'è un byte? è un numero che
può variare da 0 a 255.
Quindi i byte possibili, compreso lo zero, sono 256.
Allora, tutto ciò premesso, come facciamo ad inserire un
byte 13 all'interno delle nostre stringhe?
Fortunatamente, il nostro interprete VBScript ce lo fornisce
già bell'è pronto sotto forma di stringa lunga un solo
carattere.
E questa stringa si può richiamare scrivendo il suo nome
mnemonico, che è: vbCr.
vbCr è l'abbreviazione di: Visual Basic Carriage Return.
Se la concateniamo con altre nostre stringhe, produce
l'effetto del ritorno a capo.
Lo stesso effetto si ottiene col byte 10, a cui corrisponde
il nome mnemonico vbLf, cioè Visual Basic Line Feed.
Lo stesso si ottiene anche con la coppia 13 10, che Visual
Basic ci fornisce già pronta come stringa lunga 2
caratteri, col nome mnemonico di vbCrLf, cioè Visual Basic
Carriage Return Line Feed.
Quindi abbiamo: vbCr, vbLf, vbCrLf. Possiamo usare
indifferentemente uno dei tre.
Supponendo di usare vbCr, negli esercizi 3 e 4 l'ultima
istruzione si può trasformare così:
msgbox "Io mi chiamo:" & vbCr & Nome & vbCr & Cognome
In questo modo il messaggio in finestra apparirà spezzato
in tre righe: la prima per la frase "Io mi chiamo:", la
seconda per il nome, e la terza per il cognome.
*un suggerimento sul metodo di Donato Taddei.
Guarda questa riga:
MsgBox = "msgBox"
se la esegui otterrai la solita finestra, con dentro la parola MsgBox che ho
messo tra virgolette.
Viceversa le parole che ha usato Guido, vbcr ecc. sono delle parole come la
parola MsgBox, parole cioè che l'interprete riconosce come comandi a lui
diretti.
Se Guido mi permette vorrei raccontare come faccio io per tenere traccia di
tutti gli esercizi e le prove che faremo e poterle all'occorrenza
rieseguire.
Ho un unico file 1.vbs nella mia home.
Lì ci scrivo mano mano tutte le righe dell'esercizio, mano mano che
arrivano.
Ovviamente questo comporta che ogni volta che lo eseguo mi fa tutte le
prove.
Però, io ci metto un apostrofo all'inizio delle righe che non vogliono
vengano eseguite
e queste non vengono più eseguite, fino a quando non tolgo l'apostrofo da
quella riga.
Risultato: non mi perdo una riga e posso sempre eseguirla quando ne ho
voglia.
Con questo sistema posso anche inserire dei commenti esplicativi
? La riga seguente non sarà eseguita
' MsgBox "buone feste"
'invece la prossima sì e ti chiederà come ti trovi con MsgBox
MsgBox "come ti trovi con MsgBox?"