Newsgroup: it.comp.lang.visual-basic
Titolo: Come controllare riga per riga una textbox con multiline = true ?

Ciao a tutti !
Ho guardato i post precedenti e non ho trovato nulla !!! :(
Ho un controllo MSComm che mi riempie una textbox con
i dati che mi fornisce una scheda funzionante sulla porta COM1.
La textbox è settata con la proprietà multiline = true e dopo il
mio ascolto, si riempe con circa 200 stringhe contenti alcuni
dei dati che mi servono.
Come posso creare un controllo riga per riga basato sulla
textbox ?
Spero che qualcuno sappia aiutarmi :)
--
'''®foolbrain®'''
Visual Basic Programmer
Database Designer & Manager
ICQ 88912631
Y! foolbrain_2fb


Sei proprio sicuro che la textbox sia la soluzione giusta?
Prova con una listbox, e poi la scorri come vuoi tu...
Ciao!

 textbox ?
Vedi l'esempio Mscomm.
(ovviamnte il test viene fatto _prima_ di scrivere i dati nella textbox)
ciao
ugo

 Ciao!
Grazie per la tua risposta, se hai altre idee, son qui !


 (ovviamnte il test viene fatto _prima_ di scrivere i dati nella textbox)
Io, però, non posso filtrare i dati nello stesso momento in cui arrivano
al controllo MSComm, per due motivi:
1) Arrivano sotto forma di pacchetto e perciò non sono sempre completi
    quando li leggo (ho già provato); un buco qua e là c'è sempre ! :(
2) I miei calcoli devono essere fatti sull'intero rilevamento, filtrato
delle
    righe che non mi interessano, per questo motivo devo poter controllare
    la textbox (multiline = true) per ogni sua riga; il problema è che non
so
    come fare ! :(:(:(
Ad ogni modo grazie mille per la tua risposta, se ti viene in mente qualcosa
d'altro, fammelo sapere ! ;)


     come fare ! :(:(:(
Beh, puoi sempre fare una
dim pippo as variant
pippo = Split(Text1.text, vbCrLf)
ciao
ugo

 Spero che qualcuno sappia aiutarmi :)
carica il testo in una stringa e dividilo in una matrice con split(),
usando come separatore vbcrlf. poi ti passi gli elementi della matrice.

 usando come separatore vbcrlf. poi ti passi gli elementi della matrice.
L'unico problema, ma non so se e' il suo caso, e' se ci sono stringhe lunghe
che vanno a capo automaticamente (niente CRLF quindi).
Eventualmente si puo' usare SendMessage con EM_GETLINECOUNT e EM_GETLINE
Ciao
--
Luca Dormio
luca....@tin.it

 Eventualmente si puo' usare SendMessage con EM_GETLINECOUNT e EM_GETLINE
Mi sono arrovellato un po' la testolina ed ho risolto, ad ogni modo grazie a
tutti !
Fortunatamente ho notato che TUTTE le righe, quando venivano inserite nella
textbox,
cominciavano sempre con il medesimo carattere, una volta notato questo
*piccolo* ed
*insignificante* particolare ci ho messo poco a dividerle l'una dall'altra !
;)
Ciao :)


 Ciao :)
contribuisci anche tu alla causa :)
_che_ carattere ?
ciao, a.

 _che_ carattere ?
Dunque, la scheda in questione è una GPS.
Quando la attivo, inizia a mandare pacchetti a tutto spiano
che io accodo man mano che arrivano alla textbox.
Ora, non so se per grazia ricevuta da parte delle textbox oppure
per impostazione della scheda stessa, le stringhe di rilevamento
della posizione si completano *correttamente* _solo_ se utilizzo
una textbox !
Il problema, come dicevo, sta nel fatto che non ci sono funzioni
o proprietà di VB6 che mi permettono di leggere una textbox
multiline in modalità *riga per riga*, ma solo la stringa totale contenuta
nella proprietà Text della stessa.
La cosa interessante, che ho potuto verificare, è quella che questa
scheda GPS (non ho idea se la cosa si ripeta sistematicamente anche
con altre periferiche), inizia ogni stringa di rilevamento con il carattere
"$".
Una volta che mi sono accorto della particolarità, è stato facile crearmi
una funzione che per mezzo di InStr e Mid riesce a suddividermi tutto il
testo nel modo riga per riga ! :)
Per attivare/disattivare la scheda GPS e soprattutto per ricevere i dati,
utilizzo un controllo MSComm.
Spero di essere stato almeno un po' utile. :)


 ha scritto

si', grazie. magari puo' servire ad altri.
mi da' da pensare la storia che va bene solo su un txtbox, e non, p.e.,
su un listbox.
forse come diceva luca ci sono righe lunghe che superano la lunghezza
max di un item del listbox. boh.
ciao, a.

 max di un item del listbox. boh.
Mah, anch'io ho ancora molti dubbi, per un motivo in particolare.
Nella procedura che ho creato per distinguere il testo riga per riga,
inserisco
in seguito le stringhe *valide* per me significative in una listbox e non ho
problemi circa la loro lunghezza !!! ???


 problemi circa la loro lunghezza !!! ???
non e' che c'e' qualche null o altre schifezzine tipo control chars ?
quando ho provato a fare import in un memo di access di un txt che
conteneva l'elenco dei car ascii, alla fine ho dovuto metterlo a mano,
via codice si continuava a impallare su uno dei caratteri bassi.
ciao, a.

 max di un item del listbox. boh.
Puo' essere: non ho piu' verificato ma un tempo ogni Item di
ListBox/ComboBox era limitato a 1024 caratteri


 via codice si continuava a impallare su uno dei caratteri bassi.
Mmmmmm... non credo, non mi è parso ci fosse una logica nel modo
in cui la listbox spezzava le stringhe ! Almeno credo :):):)


 in cui la listbox spezzava le stringhe ! Almeno credo :):):)
come e' possibile annoiarsi nel mondo dell'informatica,
con la sua logica stringente ? :)


Non vorrei diventare pedante, ma continuo a pensare che fosse meglio usare
un buffer di ricezione con una bella routine di pulizia/parsing/gestione
delle stringhe ricevute, lasciando al textbox il solo compito di "mostrare"
i dati...
ciao
ugo

 i dati...
concordo, e in sostanza il concetto e' quello, se carica il txtbox in
una s.
e' che lui diceva che se non usava il controllo come tampone (*) non
andava nulla.
(*) astenersi perditempo :)


:D
ciao
ugo

 (*) astenersi perditempo :)
LOL !


 End Sub
[SNIP]
Si, pero' usi la stringa solo per ricevere i dati dalla porta, quindi accodi
tutto al TextBox e poi vuoi di nuovo setacciare il .Text per cercare le
informazioni che ti servono... un po' contorto!
tra l'altro bastava usare "& vbCrLf & Rx$" o un separatore qualsiasi e non
avresti avuto bisogno del "$" e non avremmo avuto un thread cosi' lungo :-)
Quello che voleva dire Ugo e' di elaborare direttamente il buffer Rx$, dove
sei sicuro di avere una stringa di comando per volta, e solo alla fine
piazzare tutto nel TextBox...


 piazzare tutto nel TextBox...
Per questo ti rimando al problema n° 1


 piazzare tutto nel TextBox...
Per questo ti rimando al problema n° 1
--



Resta il fatto che se inplementi uno:
Static sInternalBuffer As String
puoi concatenare i dati provenienti dal buffer di ricezione della com e
utilizzarli direttamente nella funzione che sta nello strato intermedio fra
la comm.receive e la display text1.text...
Il che resta + pulito, organizzato, manutenibile.
Forse un poco più laborioso da scrivere, ma di sicuro fattibile.
Detto ciò, credo che il thread sia già stato sufficientemente ricco...
ciao
ugo

 avresti avuto bisogno del "$" e non avremmo avuto un thread cosi'
lungo :-)
lungo e contorto e' il cammino per l'? :)





 
http://www.commlinx.com.au/NMEA_sentences.htm
Grazie per l'URL, mi sarà ancora molto utile soprattutto in futuro ! :)
A questo punto terminerei il thread con questo messaggio perchè credo che
oramai
l'argomento non sia più interessante ed utile a nessuno; ad ogni modo, sono
disposto
a continuare la chiacchierata in privato se qualcuno lo desidera.
Grazie a tutti per la disponibilità, come al solito d'altronde. :):):)
