Newsgroup: it.comp.lang.visual-basic
Titolo: [VB.NET] Differenza tra proprietà RichTextBox.SelectedRtf e RichTextBox.SelectionFont.Name

Salve a tutti,
rilevando il nome del font in ua RichTextBox ho notato le seguenti
differenze:
con:    RichTextBox.SelectedRtf:
{\rtf1\ansi\ansicpg1252\deff0\deflang1040{\fonttbl{\f0\fnil\fprq1\fcharset0
Courier;}}
\uc1\pard\f0\fs20 so}
quindi il carattere è il Courier
con:   
RichTextBox.SelectionFont.Name
Microsoft Sans Serif
quindi un carattere diverso.
Il problema è che devo rilevare se nella stringa selezionata sono presenti
più di un diverso tipo di carattere.
Così non mi posso fidare della proprietà 
RichTextBox.SelectionFont.Name
,
ma leggere, e quindi isolare, il restituito con RichTextBox.SelectedRtf.
Oppure mi sfugge qualcosa per sapere
se in una stringa selezionata (RichTextBox) sono presenti più di un tipo di
carattere
o più di una dimensione dei caratteri.
Non interessa il numero delle diversità, ma solamente se sono più di uno
grazie
giuseppeD

 la proprietà SelFontName restituirà Null.
Quindi dovrebbe bastare un
    If IsNull rtbTuaRTB.SelFontName Then
Bye, G.

     If IsNull rtbTuaRTB.SelFontName Then
Infatti, la guida di 
VB.NET
"Se la selezione di testo corrente contiene più di un tipo di carattere
specificato, questa proprietà è riferimento Null (Nothing in Visual Basic).
"
Ma la situazione che mi ha portato fuori strada è la seguente:
Carico in una combo i nomi di font di sistema. Non è presente il "Curier"
Copio il codice dell'editor di Visual Studio, è Curier, e lo incollo nella
RichTextBox, dove il font settato è il "Microsoft  Sans Serif"
E quì si presenta la situazione strana, rilevo, dopo la selezione del primo
carattere:
con:   
RichTextBox.SelectionFont.Name
 > Microsoft Sans Serif
con:    RichTextBox.SelectedRtf:
{\rtf1\ansi\ansicpg1252\deff0\deflang1040{\fonttbl{\f0\fnil\fprq1\fcharset0
Courier;}}
\uc1\pard\f0\fs20 so}
Due risposte diverse per la stessa analisi
Dovrò ripartire da quì. Propabilmente mi sfugge qualcosa.
La soluzione, penso, è caricare nella combo tutti i nomi dei caratteri,
difficile;
ma puoi caricare un carattere non presente nei font di sistema.
giuseppeD

 ma puoi caricare un carattere non presente nei font di sistema.
Usa qualcosa del genere:
**********************
    Dim Contatore As Integer
    Dim NomeDelFont As String
    Debug.Print "---------- Stampante ----------"
    For Contatore = 0 To Printer.FontCount - 1
        NomeDelFont = Printer.Fonts(Contatore)
        Debug.Print NomeDelFont
    Next Contatore
    Debug.Print "---------- Schermo ----------"
    For Contatore = 0 To Screen.FontCount - 1
        NomeDelFont = Screen.Fonts(Contatore)
        Debug.Print NomeDelFont
    Next Contatore
**********************
Oppure, se hai molti caratteri installati e hai problemi di velocità,
puoi usare la EnumFontFamiliesEx:
http://www.mentalis.org/apilist/EnumFontFamiliesEx.shtml
Bye, G.

 
http://www.mentalis.org/apilist/EnumFontFamiliesEx.shtml
Infatti nel codice di sopra ho utilizzato:
VB.NET
System.Drawing.Text.FontCollection.Families
Preso dall'automazione, ho costruito il seguente, per stampare i font dei
singoli caratteri che compongono una selezione.
 Private xStart As Int32 = 0
  Private yLength As Int32 = 0
xStart = RTB_Note.SelectionStart
yLength = RTB_Note.SelectionLength
 Dim i As Int32 = 0
        For i = xStart To yLength + xStart
            RTB_Note.Select(i, 1)
            Dim fn As String = 
RTB_Note.SelectionFont.Name
             Debug.WriteLine(fn)
            Next
Ave
giuseppeD

Un'altra situazione che mi costruisce dei problemi:
in VB6 è possibile selezionare solo il font o solo il size,
in .NET ambedue contemporaniamente.
Quindi se ho una stringa selezionata con tre font diversi e voglio
modificare solo l'altezza,
al variare, visto che devo dare sia font che size, mi uniforma tutti i
caratteri che compongono la stringa.
Oppure mi sfugge qualcosa.
Non voglio una soluzione ibrida, utilizzare la Rich di VB6.
Ave
giuseppeD