Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con RichTextBox

E' da ieri che ci sbatto la testa sopra ma non riesco a venirne fuori.
Dunque io ho questa funzione:
Private Sub RefreshDisplay(Who As String, msg As String)
    Display.SelBold = True
    Display.SelColor = RGB(100, 0, 0)
    Display.Text = Display.Text & Who & vbCrLf
    Display.SelBold = False
    Display.SelColor = RGB(0, 0, 0)
    Display.Text = Display.Text & "   " & msg & vbCrLf
    Display.SelStart = Len(Display.Text) - 2
End Sub
Dove Display è una RTB.
Non riesco a capire perchè il testo sulla prima linea mi appare normale e
non grassetto e rosso.
La seconda linea invece deve essere normale.
Come Font uso il MS Sans Serif (quello standard di VB).
Dove sbaglio?
bye
-- 
Esistono 10 tipi di persone: chi conosce il binario e chi no.
www.nicolaottomano.it

 Dove sbaglio?
Sbagli nel fatto (è la seconda volta) che _prima_ devi stabilire l'area di
selezione e _poi_ applicare gli attributi per la stessa.

 l'area di selezione e _poi_ applicare gli attributi per la stessa.
Però mi sembra una cosa strana, perchè se io attivo selbold e poi vado a
scrivere, il testo mi appare come bold.
Non vedo perchè se attivo selbold da una funzione e poi aggiungo del testo,
questo on deve apparire come grassetto.. :-(
sarà un bug?


 sarà un bug?
No, ma rileggendo il tuo post, parrebbe che ti riferisca a quello che già
c'è...

 già c'è...
mi spiego:
Immaginiamo che alla funzione passo Who="Nicola" e msg="Ciao"
allora la funzione fa:
Private Sub RefreshDisplay(Who As String, msg As String)
    Display.SelBold = True 'attivo il grassetto
    Display.SelColor = RGB(100, 0, 0) 'attivo il colore rosso
    Display.Text = Display.Text & Who & vbCrLf 'aggiungo la parola "Nicola"
in grassetto
    Display.SelBold = False 'disabilito grassetto
    Display.SelColor = RGB(0, 0, 0) 'ora il colore del font è nero
    Display.Text = Display.Text & "   " & msg & vbCrLf  'scrivo la parola
"Ciao"
    Display.SelStart = Len(Display.Text) - 2
End Sub
In totale deve venire una lista di questo tipo:
*Nicola*
    Ciao
*Pinco Pallino*
    Ciao
eccetera...


 E' da ieri che ci sbatto la testa sopra ma non riesco a venirne fuori.
Beata gioventů.
Ai miei tempi non ci sbattevamo la testa sopra...
Alberto OT

[Ottomano Nicola]
[SNIP]
Come ha detto Lupo, il problema e' che non dici qual'e' il testo
selezionato, ma solo dove comincia.
Ecco il codice corretto, che famo prima :P
Private Sub RefreshDisplay(Who As String, msg As String)
    Display.SelStart = Len(Display.Text)
    Display.Text = Display.Text & Who & vbCrLf
    Display.SelLength = Len(Who)
    Display.SelBold = True
    Display.SelColor = RGB(100, 0, 0) 'attivo il colore rosso
    Display.SelStart = Len(Display.Text)
    Display.Text = Display.Text & "   " & msg & vbCrLf
    Display.SelLength = Len(msg)
    Display.SelBold = False 'disabilito grassetto
    Display.SelColor = RGB(0, 0, 0)
 End Sub
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

Ho risolto diversamente.
Non dovevo usare Text ma SelText.
Il codice corretto è:
Private Sub RefreshDisplay(Who As String, msg As String)
    Display.SelBold = True
    Display.SelColor = RGB(100, 0, 0)
    Display.SelText = Display.Text & Who & vbCrLf
    Display.SelBold = False
    Display.SelColor = RGB(0, 0, 0)
    Display.SelText = Display.Text & "   " & msg & vbCrLf
    Display.SelStart = Len(Display.Text) - 2
End Sub
Non dovevo selezionare il testo infatti, ma solo usare il SelText.
Credo che la RTB usa la proprietà Text come se fosse una semplice TextBox.
Comunque grazie a tutti.


 sarà un bug?
Il problema e' che tu sovrascrivi ogni volta l'intero testo del RTB con la
property .Text ... invece, se vuoi accodare testo in quel modo, e'
preferibile utilizzare direttamente .SelText:
Private Sub RefreshDisplay(Who As String, msg As String)
With Display
    'questo in realta' e' superfluo se parti con un RTB vuoto
    'e accodi sempre in fondo (vedi sotto)
    .SelStart = Len(.SelText)
    .SelBold = True
    .SelColor = RGB(100, 0, 0)
    .SelText = Who & vbCrLf
     'ora il punto di selezione e' gia' posizionato in fondo
    .SelBold = False
    .SelColor = RGB(0, 0, 0)
    .SelText = "   " & msg & vbCrLf
    'idem come sopra
End With
End Sub
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

Anzi mi correggo il codice preciso è questo:
Private Sub RefreshDisplay(Who As String, msg As String)
    Display.SelBold = True
    Display.SelColor = RGB(100, 0, 0)
    Display.SelText = Display.SelText & Who & vbCrLf
    Display.SelBold = False
    Display.SelColor = RGB(0, 0, 0)
    Display.SelText = Display.SelText & "   " & msg & vbCrLf
    Display.SelStart = Len(Display.Text) - 2
End Sub
bye


 Non dovevo usare Text ma SelText.
Direi che c'è qualche anno-luce (per giunta informatico) di differenza. No?!
;-)

[Albe V° = 
circa_vac...@hotmail.com
 in
c1i7hr$1ibai7$
1...@ID-222113.news.uni-berlin.de
] ha scritto:

Battuta#1: Insomma... testa o capo?
Battuta#2: Quanti ... ehm ... ne sono venuti fuori ... in tempo.

 differenza. No?! ;-)
Il risultato (parziale ma quasi completato) del mio lavoro lo puoi trovare
su:
www.nicolaottomano.it/InstantMessenger-Setup.zip
