RTF cursor Pos

How do u position your cursor in a RTF box
Rather like the LOCATE statement in GWbasic.
I have an app wich needs to scan a RTF box, change the color of certain parts.
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

See if this helps you:

Put this code in the general declare area:

        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long

Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Put the code in where You need to place the mouse pointer to the control:

    Dim MousePos As RECT
    Call GetWindowRect(YourControlNAme.hwnd, MousePos)
    Call SetCursorPos(MousePos.Left, MousePos.Top)

If you have any problems, please let me know.

Maverick, I'm not sure I understand the question but if you're trying to set the curser position in a RichTextBox - you can do this using the SelStart property.  For example, the example below moves the curser to the middle of the text.  To see it work, create a new project, add a CommandButton and a RichTextBox.  Add the following code to the CommandButton and run.  Type some text into the RichTextBox and then click the command button...

Private Sub Command1_Click()
 RichTextBox1.SelStart = Len(RichTextBox1.Text) \ 2
End Sub
MAVERICKAuthor Commented:
The dalin exaple comes up with the error "ambiguous name detected: RECT"

Big Business Goals? Which KPIs Will Help You

The most successful MSPs rely on metrics – known as key performance indicators (KPIs) – for making informed decisions that help their businesses thrive, rather than just survive. This eBook provides an overview of the most important KPIs used by top MSPs.

MAVERICKAuthor Commented:
Can u email me a working example?

BTW mr Mick ur example worked except I really need to set both the line and the column
thanxs for both
Private Sub SetCursor(row As Integer, col As Integer)
    Dim s1 As Integer, s2 As Integer
    Dim i As Integer
    s1 = 1
    For i = 1 To row - 1
        s2 = InStr(s1, RichTextBox1.Text, vbCrLf)
        If s2 > s1 Then s1 = s2 + 2
    RichTextBox1.SelStart = s1 + col - 1

End Sub

Hope this will help.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
 You must have somewhere had another variable or something named RECT.
Try to use Find RECT.
I just tested it again and no error.

MAVERICKAuthor Commented:
I checked for RECT variables in the code and found none!
just incase the problem is something else, could u email the complete project to

Marti... ur example didn't set the co-ordinates properly!
can u email the example project!

sorry to be pedantic but.............

Maverick, marti's answer will not work because s/he's assuming that there is a vbCrLf at the end of each line and when a line wraps, there's no vbCrLf character.

Considering that you stated you wish to "change the color of certain parts" and considering that any search of the text contained in a MultiLine control would return the character offset and not the line and column...

How is it that you can't use my original suggestion?… and how can you use a Col & Row values to manipulate data in the control when this isn’t the way windows locates characters in MultiLine controls?

mrmick, you can always search in variable set to:
sText=RichTextBox1.Text & vbCrLf

MAVERICK I'll send you the working sample.
marti, the problem is that lines wrap in a Text/RichText box.  When they do... there's no vbCrLf appended to the text to indicate where a line breaks; therefore, counting lines on this basis doesn't work.  You are, in a sense, counting paragraphs.  Try typing until the text automatically wraps to the next line (don't use the enter key)... and then try positioning the cursor past that line.  The problem with this method will become obvious.
Sounds quite strange but RichTextBox doesn't seem to have wordwrap
MAVERICKAuthor Commented:
Thanks both for the answers!

I have devised a method to solve the problem based on a variation of both answers which works properly!!!!

Incase u wonder why I accepted the answer which was not EXACTLY what I wanted is the suggestion solved the problem anyway!
thanxs both of u

BTW Ancient Mariner had a suggestion for the project which relied upon the Row/Col method!

It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.