http://digilander.libero.it/Cenati

Una Inputbox più grande

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

 

 

 

 

 

Una inputbox più grande dell'originale usando IE

Il problema che mi si è presentato è stato quello di mostrare un testo all'utente chiedendogli di cancellare tutto tranne un certo dato.

Il problema è nato dal fatto che in una "descrizione" c'erano mischiati dati diversi, in particolare un numero di conto corrente, un beneficiario, la vera e propria descrizione dell'operazione.

Questi dati non erano strutturati, quindi non era facile a priori distinguere le varie informazioni. Per poterle suddividere ed utilizzarle, ho pensato di mostrare tutti i dati all'utente chiedendogli di volta in volta di cancellare quello che non serviva. Quale è il numero di conto corrente? Cancella tutto quello che c'è prima e quello che c'è dopo.

La inputbox di VbScript, però, mostra una sola riga. E' quindi scomodo andare avanti e indietro in un testo lungo alla ricerca dei dati che servono.

Ho allora pensato di usare una finestra di internet explorer per far apparire una TextArea di più righe in cui presentare il testo da modificare.

Per usare la nuova funzione bisogna dichiarare tre variabili nel corpo del programma. Sono necessarie perchè la funzione che intercetta la chiusura della finestra è diversa da quella che genera la finestra messaggio. Servono quindi alcune variabili che sopravvivano alla funzione, e quindi devono essere definite nel programma principale.

La funzione si chiama "winputbox" ed accetta come parametri i tre più usati nella Inputbox standard di VbScript: la domanda da porre, il titolo della finestra, la risposta predefinita.

In questo modo per trasformare una inputbox in una wider inputbox basta mettere una "w" davanti.

Il codice della winputbox crea al volo una pagina di internet explorer contenente una textarea, un pulsante ok, un pulsante cancel e una scritta (la domanda da porre all'utente).

Le quattro righe con set oButton stabiliscono quale sub lanciare nell'eventualità che un pulsante sia premuto. Quando il pulsante è premuto si attiva la sub che recupera il valore della textarea ed imposta un flag a true. Questo è il flag che la funzione WInputBox sta aspettando per chiudere la finestra.

Questo esempio funziona bene così come è, ma può anche essere modificato per presentare pagine html più complesse come ad esempio delle maschere in cui raccogliere più dati eterogenei. Nell'esempio, la textarea ha come nome "txt", quindi per ottenerne il valore da VbScript si usa oIE.document.Form1.txt.value. Si potrebbero mettere molti altri campi ed accedervi nello stesso modo.

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

Dim WInputBoxReady,WInputBoxData,oIE 
'These should be declared in the main body
'Queste variabili devono essere dichiarate nel programma principale

a=winputbox("Insert data","A Wider inputBox","Default data")
'The same first 3 parameters as InputBox
'La funzione ha gli stessi primi 3 parametri di InputBox
msgbox a
wscript.quit


Function WInputbox(prompt,title,default)
	'****************************************************************
	' File:    Winputbox.vbs 
	' Autore:  (c) Giovanni Cenati http://digilander.libero.it/Cenati
 	' Funzione che permette di usare una input box 
	' più grande dell'originale.
	' Provides a wider inputbox window for vb scripts.
	' Thanks to Gunter Born www.borncity.de
	'****************************************************************
	' Lancia Internet Explorer con la maschera di inserimento opzioni
	Set oIE = WScript.createObject("InternetExplorer.Application")
	oIE.Left = 50 
	oIE.Top = 100 
	oIE.Height = 300
	oIE.Width = 400
	oIE.MenuBar = 0      
	oIE.ToolBar = 0
	oIE.StatusBar = 0
	oIE.navigate "about:blank"  ' Modulo Vuoto
	oIE.Visible = 1        	
	' Importante: aspetta finché IE non è pronto.
	Do While (oIE.Busy)      
	    WScript.Sleep 300    ' Aspetta... Wait...
	Loop
	Set doc1 = oIE.Document 'Crea documento al volo. Creates IE doc on the fly.
    doc1.writeln("<html><head><title>" & title & "</title></head><body>")
    doc1.writeln(Prompt)
    doc1.writeln("<form name=""Form1"">")
    doc1.writeln("<p><TEXTAREA name=""txt"" rows=""7"" cols=""40"" >")
	doc1.writeln(Default)
	doc1.writeln("</TEXTAREA>") 
	doc1.writeln("<p><INPUT  type=""button"" align=middle value=""Ok"" name=""Ok"" >")      
	doc1.writeln("<INPUT  type=""button"" align=middle value=""Cancel"" name=""Cancel"" >")   
	doc1.writeln("</FORM>")
    doc1.writeln("</body></html>")
	'Recupera un collegamento ai pulsanti e imposta la sub da chiamare
	'Gets a reference to the buttons and sets a sub to be called 
	Set oButtonOK=oIE.document.getElementByID("Ok")
	Set oButtonOK.onclick = getref("GetFormValueOK")
	Set oButtonCancel=oIE.document.getElementByID("Cancel")
	Set oButtonCancel.onclick = getref("GetFormValueCancel")
	
	WInputBoxReady=False
	Do While (Not WInputBoxReady)    ' Wait until a button is pressed.
	    WScript.Sleep 100   ' Aspetta finché un pulsante è premuto. 
	Loop 
	oIE.quit  'Closes IE Window. Chiude la finestra di IE
	Set oIE=Nothing
	WinputBox=WInputBoxData
End Function
Sub GetFormValueOK ' Ok Button
    WInputBoxData=oIE.document.Form1.txt.value  
    WInputBoxReady= True
end sub
Sub GetFormValueCancel
    WInputBoxData="" 'Cancel Button
    WInputBoxReady= True
end sub

 

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