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
|
|