Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-11-2010, 19:56   #1
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
[VB.NET] Colorare stringa contenuta fra due caratteri in una RichtTextBox

Salve,

Come da titolo, sto cercando, cercando su internet e su questo forum, di colorare una stringa in un componente RichTextBox.

Ora vi spiego meglio la mia situazione:

Io avrei un componente RichtTextBox vuota e riempita da codice, nel momento in qui l'utente avvia il forum.

Vorrei che, in quel preciso momento, al caricamento del forum, il componente colori una stringa presente fra due caratteri, decisi ovviamente da me.

Non saprei se mi sono ben spiegato, ma come potrei fare per risolvere il problema?
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2010, 09:46   #2
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Semplice.
Soluzione veloce veloce, anche se ammetto non sia il massimo dell'eleganza.
Poniamo di avere una RTB con del testo, e di voler colorare in rosso la stringa compresa tra la prima e la seconda occorrenza del carattere "*" :

Codice:
        Dim inizio As Integer = -1
        Dim fine As Integer = -1
        Dim strL As Integer = 0
        For i As Integer = 0 To RTB.TextLength
            If RTB.Text(i) = "*" And inizio = -1 Then
                inizio = i + 1
            ElseIf RTB.Text(i) = "*" And inizio > -1 Then
                fine = i
                Exit For
            End If
        Next
        strL = fine - inizio
        RTB.Select(inizio, strL)
        RTB.SelectionColor = Color.Red
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2010, 14:59   #3
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
Ho provato con il tuo codice, colora solo la prima occorrenza che trova, di caratteri presenti tra due asterischi ( non so se mi spiego bene )

Ho anche provato a modificare il codice, ma niente, non mi viene restituito il risultato che io vorrei.

In poche parole, non so se mi sono spiegato bene, se vuoi magari rispiego, vorrei che mi colorasse, non solo la prima stringa fra i due asterischi che trova, ma anche le altre, e possibilmente anche gli asterischi, cmq, grazie per aver risposto.

Ultima modifica di Simox88 : 16-11-2010 alle 15:02.
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 16-11-2010, 21:55   #4
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Ma infatti io l'avevo detto che colorava solo la Prima Occorrenza.
E nel post d'apertura non sei stato certo esaustivo.
Quello che chiedi non è poi così scontato. Se ad esempio abbiamo una stringa tipo :

*123*456*789*ABC*DEF*

Quale deve essere il risultato ?
Perchè se vuoi tutte le occorrenze, come dici tu, alla fine tutta la stringa sarà rossa, e non ne vedo l'utilità.

Oppure si potrebbe interpretare come "tutte le occorrenze non consecutive", e in quel caso avrei 2 sotto-casi :

1. Occorrenze non-consecutive-dispari :
*123*456*789*ABC*DEF*

2. Occorrenze non-consecutive-pari :
*123*456*789*ABC*DEF*

3. Oppure, oltre ai caratteri di demarcazione (*) esistono spazi tra una parola e l'altra, e la stringa da analizzare è sempre e solo di questo tipo :
123 *456* 789 *ABC* DEF
...

Come vedi la soluzione non è poi così ovvia.
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2010, 11:05   #5
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
Scusa, hai ragione, infatti nel mio primo messaggio mi sono spiegato male.

Il fatto è che io avrei bisogno di colorare del codice html.

In poche parole vorrei fare quello che applicano gran parte degli editor al testo ( non so se mi spiego ).

Ho provata anche in alcuni modi a farlo ( mi dispiace ma non ho più il codice precedentemente provato ), ma non ho ottenuto nessun risultato.
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2010, 18:07   #6
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
L'unica cosa che puoi fare, dato che non hai più nemmeno una linea di codice, è andare per esempi.
Posta alcune stringhe-tipo iniziali e la relativa formattazione desiderata ( come ho fatto io nel post precedente )...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 17-11-2010, 21:47   #7
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
Più che altro, dovrei rappresentare del codice html, come alcuni editor html lo colorano, in questo modo:

<html>
<head>
<title>Titolo</title>
<body>
testo testo testo
</body>
</html>

In poche parole dovrei colorare tutte le stringe contenuti fra il carattere < e >.
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2010, 10:17   #8
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Quote:
Originariamente inviato da Simox88 Guarda i messaggi
Più che altro, dovrei rappresentare del codice html, come alcuni editor html lo colorano, in questo modo:

<html>
<head>
<title>Titolo</title>
<body>
testo testo testo
</body>
</html>

In poche parole dovrei colorare tutte le stringe contenuti fra il carattere < e >.
Eh, no.
La fai troppo semplice.

Potresti lavorarci con :
Codice:
        Dim tagHtml As String = "<html>"
        RichTextBox1.SelectionStart = RichTextBox1.Find(tagHtml)
        RichTextBox1.SelectionLength = tagHtml.Length
        RichTextBox1.SelectionColor = Color.Blue
Ma devi prevedere anche i casi particolari, come questo :

Codice:
<h1>Questo <html> non dovrebbe essere colorato</h1>
Non è così immediato come pensi...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]

Ultima modifica di MarcoGG : 18-11-2010 alle 10:29.
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2010, 12:09   #9
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
Più che altro io avevo semplicemente pensato di colorare tutte le occorrente di caratteri fra il carattere < e > per evitare di scrivere direttamente tutti i tag html da colorare ( che sono tanti, e nemmeno so se li so tutti ).

Non so, te cosa mi consigli, sapendo quello che ti ho detto?
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2010, 12:24   #10
MarcoGG
Senior Member
 
L'Avatar di MarcoGG
 
Iscritto dal: Dec 2004
Messaggi: 3210
Inizia con lo studio delle Regex ( Regular Expressions ). Saranno sicuramente utili allo scopo...
Personalmente non ho mai avuto la necessità di fare niente del genere, perciò non ho codice "pronto all'uso" da suggerire...
__________________
Contattami su FaceBook --> [ ::: MarcoGG su FaceBook ::: ]
Visita il mio Blog --> [ ::: Il Blog di MarcoGG ::: ]
MarcoGG è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2010, 13:17   #11
Simox88
Junior Member
 
Iscritto dal: Nov 2010
Messaggi: 17
Ok, grazie, ci proverò
Simox88 è offline   Rispondi citando il messaggio o parte di esso
Old 18-11-2010, 22:11   #12
WarDuck
Senior Member
 
L'Avatar di WarDuck
 
Iscritto dal: May 2001
Messaggi: 12966
E' un quesito da cui possono nascere spunti interessanti.

Bisognerebbe creare un piccolo parser, usando un automa a stati finiti ed uno stack ce la potresti fare.

Supponiamo di voler colorare tutti i tag che siano correttamente chiusi, ovvero che compaiono a coppia (<tag>qualcosa</tag>).

Faremo uso di uno stack di code. Ovvero faremo una pila di questo tipo:

|___| <- top dello stack
|___|
|___|
|___|

I cui elementi saranno "code" di caratteri (quelli che incontriamo).

Esempio, incontriamo le parole "asd" e "bla"

Il nostro stack sarà così fatto:

|[alb] | <- top dello stack
|[dsa]|

(le code crescono verso sinistra, il primo della coda è a destra)

A questo punto possiamo fare una cosa di questo tipo:

Chiamiamo S lo stack e Q la coda di caratteri corrente.

Stato 0 => stato iniziale
  • se leggo '<': creo una nuova coda Q e passo allo stato 1
  • altrimenti rimango nello stato 0

Stato 1 => letto '<'
  • se leggo '>' aggiungo la coda Q sullo stack, vai a Stato0
  • se leggo '/' vai a Stato2
  • altrimenti aggiungi il carattere alla coda Q, rimani in Stato1

Stato 2 => Q è il top dello stack
  • se il primo carattere nella coda è uguale a quello letto in input: rimuovo il carattere dalla coda.
  • se leggo '>' e la coda è vuota: rimuovo la coda corrente Q dal top dello stack ed evidenzio i tag, passo allo stato 0.
  • se leggo '>' ma la coda non è vuota significa che c'è un errore di sintassi, non devo evidenziare nulla, a quel punto il riconoscimento è compromesso (bisognerebbe gestire questa situazione per portare il parser ad uno stato utilizzabile).

Esempio con la stringa:

"prova <asd>questo <html> va una bomba</asd>"

Chiaramente si rimane nello stato0 fino a quando non incontro il primo '<'.
I successivi caratteri (a, s, d) verranno aggiunti alla coda Q, risultando Q=[d, s, a] dove a è il primo della coda.
Leggendo '>' Q viene aggiunto allo stack.

La cosa si ripete per <html>, quindi avremo uno stack con 2 elementi:

[l, m, t, h] <-- top dello stack
[d, s, a]

A questo punto è evidente che quando incontriamo l'ultimo tag </asd> troveremo un errore, perché ci aspetteremmo di trovare </html>.

Quindi in questo caso nessuno dei tag verrà evidenziato.

Viceversa togliendo <html> dal mezzo della stringa, avremmo che lo stack contiene solo [d, s, a] e dopo aver letto la sequenza "</" ci troveremmo nello Stato2, per cui:

Leggiamo 'a', Q diventa [d, s]
Leggiamo 's', Q diventa [d]
Leggiamo 'd', Q diventa [] (coda vuota)

Leggendo '>' accettiamo perché la coda è vuota ed evidenziamo i tag.

Ora chiaramente questa cosa voleva essere di esempio, ma credo si possa facilmente adattare per il tuo problema, per quanto comunque tutto ciò non sia così banale.

Stesso stabilire in quale caso vuoi evidenziare i tag può cambiare di molto le cose.

Domani provo a divertirmi un po' implementando ciò che chiedi .

Ultima modifica di WarDuck : 18-11-2010 alle 22:17.
WarDuck è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Roscosmos aggiorna le tempistiche per la...
Confermato il ritardo delle missioni rob...
L'Intelligenza Artificiale ora può...
Il data center del futuro secondo Huawei...
Spesa a domicilio senza conducente: robo...
Satoshi Nakamoto ha finalmente un volto?...
La Corea del Sud taglia fuori i bus elet...
GoPro taglia ancora: licenziato il 23% d...
Muse S Athena: la fascia che ti legge ne...
PS5 Pro e PSSR 2.0: tutti i giochi compa...
Dimensity 9600 Pro promette prestazioni ...
BMW i7 2026 adotta celle cilindriche Gen...
Cyberpunk 2077 si aggiorna su PS5 Pro co...
Valve porta Steam Link su Vision Pro per...
Google Maps: ufficiali 3 novità c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v