Manipulación del peso de fuente del cuadro de texto VB6

I have a VB6 application where I want to manipulate certain parts of a string I am outputting inside a textbox.

txtPhoneNums.Text = "Home:  " + strHomeNo + vbCrLf _
                    + "Mobile: " + strMobileNo + vbCrLf + "Work:  " + strWorkNo + vbCrLf

It's nested inside an if statement that carries out various validations. I want to be able for example, in the above snippet to highlight the word "Work" and the appended string value "strWorkNo" in red and fontweighted bold. Can I do this easily without creating multiple textboxes (and leaving the other two values as default appearance?)


Image added for clarity. I want the two null field strings to be red and bold.enter image description here

preguntado el 28 de agosto de 12 a las 15:08

The standard vb6 textbox does not allow you to mix formats, you will need to look for the RichTextBox Control. As a side note I would also prefer to use & instead of + -

Hi, Thanks. :) How would the syntax appear if txtPhoneNums.Text was a RichTextBox instead? -

Mark's answer is a great example. -

1 Respuestas

You want to use the RichTextBox. I would recommend that you don't try to mess around with the rich text format (RTF) itself, but instead use the standard methods.

Your code would be changed as follows:

Option Explicit

Private Sub Command1_Click()
    WritePhoneNums "01020239", "07749383", "0234394349"
End Sub

Private Sub WritePhoneNums(ByRef strHomeNo As String, ByRef strMobileNo As String, ByRef strWorkNo As String)

    Dim nPosBeginningOfWorkNo As Long
    Dim nPosCurrent As Long

    txtPhoneNums.TextRTF = vbNullString ' Clear existing code.

    ' Clear style to default.
    ApplyNormalStyle txtPhoneNums

    ' Enter standard text. The selection will be at the end of the text when finished.
    txtPhoneNums.SelText = "Home:  " + strHomeNo + vbCrLf _
                         & "Mobile: " + strMobileNo + vbCrLf + "Work:  "

    ' Save the cursor position, write the work number, and then save the cursor position again.
    nPosBeginningOfWorkNo = txtPhoneNums.SelStart
    txtPhoneNums.SelText = strWorkNo
    nPosCurrent = txtPhoneNums.SelStart

    ' From this information, select the preceding text, and make it "selected".
    txtPhoneNums.SelStart = nPosBeginningOfWorkNo
    txtPhoneNums.SelLength = nPosCurrent - nPosBeginningOfWorkNo
    ApplyHighlightedStyle txtPhoneNums

    ' Reset the selection to the end, and reset the text style.
    txtPhoneNums.SelStart = nPosCurrent
    txtPhoneNums.SelLength = 0
    ApplyNormalStyle txtPhoneNums

    txtPhoneNums.SelText = vbCrLf

End Sub

Private Sub ApplyNormalStyle(ByRef txt As RichTextBox)
    txt.SelBold = False
    txt.SelColor = vbBlack
End Sub

Private Sub ApplyHighlightedStyle(ByRef txt As RichTextBox)
    txt.SelBold = True
    txt.SelColor = vbRed
End Sub

Respondido 28 ago 12, 16:08

Great answer, thanks. I ended up doing it slightly differently in the end as I have a large volume of possible scenarios, this method is very complete & well coded. Excellent reference. - GRUPO

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.