VB6 Textbox fontweight manipulation

string, textbox, vb6

Solution

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

Problem

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?) Thanks. Image added for clarity. I want the two null field strings to be red and bold.

Original source