http://digilander.libero.it/Cenati

Calcolatrice in VbScript

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

 

Una calcolatrice semplice ed una con rotolo dei risultati

VbScript ha una funzione molto potente di nome Eval( ), che valuta una espressione e ne restituisce il valore.

Eval("5+7") restituisce il valore 12, mentre Eval("a") restituisce il valore della variabile "a". Attenzione che l'espressione Eval(a) interpreta invece il contenuto della variabile di testo a. Cioè se a="5+7" avremo che Eval(a) vale come Eval("5+7") e quindi sarà uguale a 12. Invece Eval("a") vale "5+7".

a="5+7" 
msgbox eval(a)   'vale 12 
msgbox eval("a") 'vale "5+7"

Se chiedo all'utente tramite una inputbox un calcolo da eseguire, posso mostrarne il risultato usando la funzione Eval( ).

Il primo programma che ho preparato fa semplicemente questo: chiede un calcolo e ne mostra il risultato. Se la inputbox restituisce un valore vuoto (o premendo Annulla) il programma termina per effetto dell'istruzione Do..While.

Se il calcolo genera un errore, questo viene intercettato e la inputbox ripropone lo stesso calcolo anziché mostrare il risultato. In questo modo è possibile fare le correzioni necessarie e non dover riscrivere il calcolo. Può ad esempio succedere che si usi la virgola al posto del punto decimale. Infatti la sintassi di VbScript vuole solo il punto decimale, ed eseguendo un calcolo con Eval( ) è necessario usare il punto per non generare l'errore.

Si possono usare tutte le funzioni esistenti in VbScript, come cos( ) per calcolare il coseno di un angolo.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente questo script ed il successivo, la calcolatrice con finestra dei risultati.

' *****************************************************
' Calcolatrice.vbs
' Cenati Giovanni - http://digilander.libero.it/Cenati
' Inserire un calcolo formalmente corretto per
' ottenerne il risultato. Usare il punto decimale.
' E' possibile usare anche le funzioni ammesse in
' vbScript, come sin(), sqr(), exp() ecc.
' Se il calcolo non è corretto lo ripropone uguale.
' *****************************************************
ON ERROR RESUME NEXT
Prompt="Inserisci un calcolo (Annulla per uscire)"
Title="Calcolatrice - Cenati"
a=inputbox(Prompt,Title)
Do While  a<>"" 
	Ris=eval(a)
	if err>0 then
		'se il calcolo non è possibile
		'ripropongo il testo errato
		'(ad esempio uso la virgola anzichè punto decimale)
		err.clear
		ris = a
	end if
	a=inputbox(Prompt,Title,Ris)
Loop
' *****************************************************

Calcolatrice con finestra dei risultati

Fatto questo primo programma, ho pensato di estenderlo per avere una calcolatrice con il rotolo di carta dei risultati.

Ho usato un pezzo di codice che già avevo utilizzato in altri programmi per creare una finestra di output con Internet Explorer. Genero una finestra con una DIV vuota di nome "cont" alla quale punto con l'oggetto IEWindow creato da me.

Nel resto del programma accodo ogni risultato dei calcoli alla variabile "report". Per visualizzare tutti i risultati nella pagina di internet explorer uso l'espressione IEWindow.INNERHTML = Report che mette il contenuto della variabile Report (le righe con i risultati dei calcoli) tra DIV e /DIV della pagina html. Ne risulta che Internet Explorer ridisegnerà la pagina con il nuovo contenuto. Di fatto si tratta di una applicazione dell'html dinamico: alcuni elementi della pagina sono contraddistinti da un nome (ID='cont') e il codice vbscript ne modifica le proprietà. In questo caso modifico infatti il codice html all'interno (innerhtml) della DIV che ha identificativo "cont".

Per avere sempre visibile l'ultimo calcolo eseguito devo forzare la finestra di IE a scrollare verso il basso fino in fondo alla pagina. Per far questo uso il metodo ScrollIntoView con il parametro False, applicato ad un intervallo di testo del corpo del documento. Usando il parametro True si forza invece il ritorno in cima al documento.

Copia il programma riportato qui sotto in un file con estensione ".vbs" oppure scarica l'archivio zip contentente i due script.

' *****************************************************
' Calcolatrice2.vbs
' Cenati Giovanni - http://digilander.libero.it/Cenati
' Calcolatrice con rotolo di risultati.
' Inserire un calcolo formalmente corretto per
' ottenerne il risultato. Usare il punto decimale.
' E' possibile usare anche le funzioni ammesse in
' vbScript, come sin(), sqr(), exp() ecc.
' Se il calcolo non è corretto lo ripropone uguale.
' *****************************************************
'*** Crea una finestra che funge da output ***
Set myIE = CreateObject("InternetExplorer.Application")
myIE.Navigate "about:blank"
myIE.ToolBar = True:myIE.StatusBar = False:myIE.Resizable = True
Do
Loop While myIE.Busy
myIE.Width = 600:myIE.Height = 400
myIE.Left = 50:myIE.Top = 50
myIE.Visible = True
myIE.document.writeln("<html><title></title>" & _
  "<body><DIV id='cont'></DIV></body></html>")
Set IEWindow = myIE.Document.all("cont")
'**********************************************

Report= ""
On Error Resume Next
Prompt="Inserisci un calcolo (Annulla per uscire)"
Title="Calcolatrice - Cenati"
a=inputbox(Prompt,Title)
Do While  a<>"" 
	Ris=eval(a)
	if err>0 then
		'se il calcolo non è possibile
		'ripropongo il testo errato
		'(ad esempio uso la virgola anzichè punto decimale)
		err.clear
		ris = a
	else
		'Se il calcolo è giusto scrivo il risultato
		'Report=Report & a & "  =  " & formatnumber(Ris) & "<br>"
		Report=Report & a & "  =  " & Ris & "<br>"
		IEWindow.INNERHTML = Report 
		MyIE.document.body.createtextrange.scrollIntoView False
	end if
	'Chiedo che calcolo eseguire.
	'Propongo di default il risultato precedente
	'oppure il testo errato (in modo da poterlo correggere)
	a=inputbox(Prompt,Title,Ris)
Loop 'Se non c'è nulla da calcolare esco.
MYie.QUIT
wscript.quit
' *****************************************************

 

Giovanni Cenati

 

 

 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript