Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto comando SHELL e controllo TEXTBOX

Ho scritto un programmino che elabora una serie di dati numerici che
corrispondono a misure topografiche terrestri e GPS. Nel corso
dell'elaborazione il programma scrive dei valori in un file di testo il
quale dovrebbe venire letto da un programma esterno DOS scritto in
FORTRAN. quest'ultimo al termine del calcolo scrive i risultati in un
secondo file di testo che a sua volta deve venire letto
dall'applicazione VB. Come effettuare correttamente la chiamata al
programma DOS?
Ho provato con il comando "Shell" , il quale fa partire il programma
esterno, ma non consente all'applicazione VB di attendere il termine
della scrittura dei dati nel file, quindi il programma va subito a
leggere un file che non è stato ancora scritto.
Fatto ciò il programma funziona correttamente fintantochè vengano
immessi correttamente i dati. In una TextBox vanno immessi solamente
numeri, il separatore decimale (virgola) ed eventualmente il segno meno
(-) davanti al numero.
A tal proposito vorrei  eseguire il controllo sull'immissione del testo
nel momento in cui l'utente indica che ha terminato l'immissione in tale
campo (textbox), cosa che si può dedurre quando passa ad un'altra
control premendo il tasto TAB o facendo click con il mouse. In questo
caso viene generato l'evento "LostFocus" che può venire utilizzato come
controllo. Esso indica la perdita dell'azione per il campo di immissione
testo. Se il campo viene riconosciuto come errato, è possibile il metodo
"SetFocus" per obbligare l'azione sul campo di immissione. Tuttavia
l'uso di questo metodo non restituisce immediatamente l'azione alla
control, poichè Windows assegna l'azione prima alla control che la
doveva ottenere in seguito all'azione dell'utente. Per esempio, se una
control C1 ha l'azione e l'utente fa click su una control C2 si avranno
i seguenti eventi:
- C1 riceve un evento "LostFocus", e si può quindi richiamare "SetFocus"
su C1 per annullare la perdita di azione;
- C2 ottiene ugualmente l'azione e riceve un evento "GotFocus";
- C2 perde subito l'azione e riceve un evento "LostFocus";
- C1 ottiene l'azione e riceve un evento GotFocus.
Il metodo "SetFocus" è quindi asincrono, il suo effetto non è immediato.
Ciò può portare al bloccaggio se nell'esempio che ho fatto viene
chiamato il metodo "SetFocus" su C2 in fase di elaborazione dell'evento
dell'evento "LostFocus" per C2.
Immagino che esisteranno delle routine per il controllo del testo,
purtroppo non riesco a reperirle.
Grazie dell'aiuto.
Saluti.
        Mirko


Sul Sito Comune di questo NG c'e' un articolo che parla di come chiamare
applicazioni dos, e nelle FAQ c'e' come chiamare un prg DOS e attendere che
termini. Forse c'e' anche un progetto che lo fa.
http://www.murialdo.it/it_lang_vb
Buon Lavoro
Ciao
By -MES-   Maronese Ettore
http://ilmes.freeweb.org
(con OCX per stampare i recordset)
Sito Comune di programmatori Visual Basic
http://www.murialdo.it/it_lang_vb

purtroppo non riesco a reperirle.
Prima ancora di imparare ad usare classi ed oggetti, per programmare con
qualche soddisfazione in VB bisogna imparare cosa vuol dire gestire gli
eventi. Diversamente i risultati, frustranti, sono quelli che hai
illustrato.
C'e' chi si sottrae, o tenta di sottrarsi, a questa realta' impedendo agli
eventi di verificarsi. Allora vedrai applicazioni Win ricondotte alla logica
sequenziale in cui l'utente deve seguire un percorso preordinato nella
compilazione dei campi della maschera. In questo caso tutti i campi sono
disabilitati tranne uno e per spostarsi da un campo all'altro spesso, invece
che il tasto Tab, si usa il tasto Invio. Lo si puo' vedere con maggiore
frequenza in programmi "gestionali" di antica fattura convertiti per
l'ambiente Win.
L'altra strada, quella della gestione degli eventi, richiede che si pensi
alla finestra dell'applicazione come ad una macchina a stati finiti o
macchina virtuale. Approfondimenti sull'argomento li puoi trovare nel CD
allegato ad Appleman, _Visual Basic Win32 API..._ e in Kurata, _Oggetti e
Visual Basic..._ (fondamentale!), entrambi Mondadori Informatica. Un esempio
utile di gestione degli stati dell'applicazione, anche se non una vera VM,
era il progetto ICONWRKS.MAK allegato a VB3. Non so se nelle versioni
successive ci sia qcosa di analogo.
Ti illustro in breve, ed in maniera molto approssimativa, il concetto: ogni
volta che un campo di input avra' il focus, la "macchina" si trovera' in uno
stato ed una variabile dell'applicazione ne conservera' il valore mentre
un'altra variabile avra' l'incarico di informare sulla validita' dell'input.
Pertanto allo spostamento del focus in un diverso campo o al verificarsi di
un qualsiasi altro evento, come il clic su di un pulsante o la chiusura del
form, *prima* di far cambiare stato alla macchina (e quindi prima di dar
corso all'evento) verificherai se cio' e' lecito... Mi fermo qui perche'
penso che possa bastare e perche' non so se ho colto a pieno la tua
esigenza.
Riguardo alle "routine per il controllo del testo" stai ancora cercando? In
questo ng ultimamente ci sono stati diversi post sull'argomento.
--
Ciao.
Maurizio