Gambas-it

Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: tornu - 18 Luglio 2009, 20:24:39

Titolo: [RISOLTO] TextArea
Inserito da: tornu - 18 Luglio 2009, 20:24:39
Ciao a tutti,
come posso fare a limitare la lunghezza delle righe digitate a n caratteri?
E come fare a far andare a capo (riga successiva) il cursore quando raggiunge il limite di caratteri impostato?
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 20:26:23
hai provato a vedere l' esempio di gambas ?
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 20:59:16
in effetti non sembra facile la questione ...

ti lascio una mia prova, non è il max ma è un punto di partenza
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 21:15:59
così evita anche di tagliare le parole
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 21:57:38
Grazie fsurfing, l'esempio che mi hai allegato risolve il mio problema.
Non ho capito completamente come funziona, potresti commentarmelo? Grazie.
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 22:08:42
pure!!!

si hai ragione i commenti sono una cosa che odio scrivere, pensavo cmq fosse capibile

ecco qua i commenti :)
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 22:35:48
Scusa fsurfing, nella precedente risposta hai premesso che non era semplice neanche per te, e ti ritengo molto capace, figurati per me.

Ho provato a fondo l'esempio che mi hai postato, e sorto qualche problema, ti spiego:
all'avvio del programma il controllo funziona se digito in modo continuo solo sulla prima riga, nella seconda va a capo un carattere in meno del limite.
Se digito meno caratteri di quelli impostati e vado a capo con il tasto invio, va a capo alla terza riga lasciando la seconda in bianco.
Se sulla riga che sto digitando senza superare il numero di caratteri uso il tasto BackSpace continuando a digitare il controllo non funziona più permettendomi di digitare il doppio dei caratteri permessi dal controllo. :oops:
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 22:40:05
ma a te serve che vada a capo dividendo a metà un aparola oppure che se la parola supera il limite venga riportatat a capo per intero?
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 22:47:47
Mi è sufficiente che controlli solamente che non superi n caratteri per riga.
Come andare a capo lo decido io in fase di digitazione, non è neccessario un automatismo.
Quindi se l'ultima parola della riga supera il limite decido io se spezzarla o scriverla completamente nella riga successiva.
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 22:57:01
siccome questo codice mi servirà anche a me in futuro l' ho sistemato perchè divida la parola se supera la lunghezza altrimenti va a capo prima dell' ultima parola

speriamo che ora vada come deve
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 23:12:49
No, non funziona come dovrebbe.
All'avvio, digito sulla prima riga il numero di caratteri preimpostati, va capo automaticamente spostando il contenuto sulla seconda e lasciando la prima vuota, se continuo a digitare ogni volta che va a capo lascia una riga vuota.
Se digito meno caratteri del limite e vado a capo con invio, ok, ma appena comincio a digitare la nuova riga scende di una lasciando righe vuote a partire dalla prima.
Se cancello caratteri il controllo non funziona più permettendomi di inserire il doppio dei caratteri impostati dal controllo.
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 23:13:48
a me funziona!

postami un immagine
Titolo: Re: TextArea
Inserito da: fsurfing - 18 Luglio 2009, 23:17:14
è impossibile che si comporti così questa versione

scarica nuovamente il file , prima però cancella la cartella precedente

se va a capo lasciando una riga vuota può succedere solo se la prima lettera è uno spazio e poi digiti una parola di caratteri superiori alla dimesione della righa
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 23:47:07
Mi dispiace, non so che dirti, sapessi quanto mi è utile questa funzione.
Ti ringrazio per la pazienza.
Titolo: Re: TextArea
Inserito da: tornu - 18 Luglio 2009, 23:59:26
Funzionaaaa!!   :cappello:
Ho fatto come mi hai detto ho cancellato la cartella precedente, ho scaricato l'ultimo esempio e tutto  :ok:  :ok:

Grazie, fsurfing...ora puoi andare in ferie ;-)
Titolo: Re: TextArea
Inserito da: tornu - 19 Luglio 2009, 00:19:51
Devo calmare l'entusiasmo, è rimasto un problema:
se cancello una riga e la reinserisco il controllo sul limite non funziona.

EDIT:
Come non detto funziona perfettamente, cancellata la riga bisogna premere il tasto
[canc] per eliminare eventuali spazi.
Titolo: Re: TextArea
Inserito da: tornu - 27 Luglio 2009, 21:21:49
E' rimasto comunque un problema.
Ho aspettato che rientrassi dalle ferie per fartelo presente (...per tenerti in allenamento... :-)), se avvii il programma senza inserire caratteri nella TextArea e premi il tasto BackSpace va in errore 'Out of Bounds'.

Lascio comunque [RISOLTO] in oggetto, perchè aggiungendo un CATCH alla fine  il programma non va in blocco, almeno per il momento fino a nuovi sviluppi.

Ne aproffitto per un'altra questione inerente sempre la TextArea:
volendo inserire le righe controllate come da tuo codice le volevo inserire in una GridView e l'unica soluzione che mi è venuta in mente è la seguente
Codice: [Seleziona]

PUBLIC SUB BtnInsCommenti_Click()
  DIM i AS Integer

  FOR i = 0 TO TextArea1.Line
    i = GridView1.Rows.Count
    GridView1.Rows.Count = GridView1.Rows.Count + 1
    GridView1[i, 1].Text = TextArea1.Text
    INC i
  NEXT
END

se inserisco nella TextArea una sola riga, viene inserita correttamente nella GridView, ma se nella TextArea inserisco più righe nella GridView le inserisce tutte in un unica riga, non ho trovato soluzione.
Titolo: Re: TextArea
Inserito da: fsurfing - 27 Luglio 2009, 21:27:45
prima devi dividere il testo in righe utilizzando come divisore il carattere speciale "\n" con la funzione split.
in realtà nel codice di controllo se non ricordo male(il mio file è finito nel cestino) dovrebbe già esserci una variabile array che contiene tutte le righe
Titolo: Re: TextArea
Inserito da: tornu - 27 Luglio 2009, 22:29:13
Giusto, la soluzione era nel codice che mi avevi postato, è sufficente utilizzare l'array già presente che contiene le righe della TextArea.

Grazie.