The_LowRider
asked on
GetScrollInfo and SetScrollInfo in RichTextBox
Hello,
I'm trying to write a small JAVA text editor with basic real-time syntax highlighting.
I created a 'SyntaxBox' class and derived it from the RichTextBox control.
Inside the class I implemented a procedure 'Parse' which converts the text in the textbox to the Rich Text Format including the correct syntax color formatting.
I then copy the RTF text to the 'Rtf' property of the RichTextBox control and it shows me a nice and smooth highlighted syntax.
However, every time I update my rich text, the cursor runs to the start of the textbox.
I solved this by remembering the SelectionStart property and resetting it after the update.
BUT, I still have a problem with the scrollbar.
As soon as I start typing, the scrollbar jumps to another value.
I'm trying to read the scrollbar position using the 'GetScrollInfo' procedure in user32.dll (the GetScrollPos procedure doesn't seem to work).
This works great, however, I can't seem to set the scrollbar back to its previous value. (or to any value whatsoever, for that matter)
If I call SetScrollInfo(<params>) and immediately afterwards I call the GetScrollInfo procedure, it shows me the correct value.
However, the scroll position of the textbox is not updated...
So I have a few questions:
1.) am I using the right approach to syntax highlighting?
2.) how come the SetScrollInfo procedure doesn't update my textbox?
Here's some relevant code:
public void SetRTF(string text)
{
ScrollInfoStruct s=new ScrollInfoStruct();
s.fMask=SIF_POS; //only position
s.cbSize=Marshal.SizeOf(s) ;
if(GetScrollInfo(this.Hand le,1,ref s)==0)
MessageBox.Show("GetScroll Info error: "+GetLastError().ToString( ));
int st=this.SelectionStart;
int sl=this.SelectionLength;
this.Rtf=text;
this.SelectionStart=st;
this.SelectionLength=sl;
if(SetScrollInfo(this.Hand le,1,ref s,false)==0)
MessageBox.Show("SetScroll Info error: "+GetLastError().ToString( ));
this.Refresh();
}
Thanks in advance...
Nicolas.
I'm trying to write a small JAVA text editor with basic real-time syntax highlighting.
I created a 'SyntaxBox' class and derived it from the RichTextBox control.
Inside the class I implemented a procedure 'Parse' which converts the text in the textbox to the Rich Text Format including the correct syntax color formatting.
I then copy the RTF text to the 'Rtf' property of the RichTextBox control and it shows me a nice and smooth highlighted syntax.
However, every time I update my rich text, the cursor runs to the start of the textbox.
I solved this by remembering the SelectionStart property and resetting it after the update.
BUT, I still have a problem with the scrollbar.
As soon as I start typing, the scrollbar jumps to another value.
I'm trying to read the scrollbar position using the 'GetScrollInfo' procedure in user32.dll (the GetScrollPos procedure doesn't seem to work).
This works great, however, I can't seem to set the scrollbar back to its previous value. (or to any value whatsoever, for that matter)
If I call SetScrollInfo(<params>) and immediately afterwards I call the GetScrollInfo procedure, it shows me the correct value.
However, the scroll position of the textbox is not updated...
So I have a few questions:
1.) am I using the right approach to syntax highlighting?
2.) how come the SetScrollInfo procedure doesn't update my textbox?
Here's some relevant code:
public void SetRTF(string text)
{
ScrollInfoStruct s=new ScrollInfoStruct();
s.fMask=SIF_POS; //only position
s.cbSize=Marshal.SizeOf(s)
if(GetScrollInfo(this.Hand
MessageBox.Show("GetScroll
int st=this.SelectionStart;
int sl=this.SelectionLength;
this.Rtf=text;
this.SelectionStart=st;
this.SelectionLength=sl;
if(SetScrollInfo(this.Hand
MessageBox.Show("SetScroll
this.Refresh();
}
Thanks in advance...
Nicolas.
ASKER
> Try the ScrollToCaret method of the RichTextBox.
Bob, thanks for the suggestion, however, it doesn't work.
Resetting the SelectionStart property already takes care of this.
Maybe I should be more specific about the 'scrollbar jumps' part.
If I scroll down to the bottom of the text and then place the cursor on the first visible line of the textbox, like in the top part of this screenshot:
http://users.pandora.be/bajaman/screenshot.gif
When I run my syntax highlighting procedure (simply by entering some text), the textbox scrolls upward, like in the bottom part of the screenshot.
thanks,
Nicolas.
Bob, thanks for the suggestion, however, it doesn't work.
Resetting the SelectionStart property already takes care of this.
Maybe I should be more specific about the 'scrollbar jumps' part.
If I scroll down to the bottom of the text and then place the cursor on the first visible line of the textbox, like in the top part of this screenshot:
http://users.pandora.be/bajaman/screenshot.gif
When I run my syntax highlighting procedure (simply by entering some text), the textbox scrolls upward, like in the bottom part of the screenshot.
thanks,
Nicolas.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
It is VB.NET, but might be convertible to C#.
Bob
Bob
ASKER
Yes! That PostMessageA procedure works great!
I stumbled upon that code in the beginning of my search but left it alone because it was VB.net and because it used those "really weird Windows messages" :)
Thanks, just what I needed!
Nicolas.
I stumbled upon that code in the beginning of my search but left it alone because it was VB.net and because it used those "really weird Windows messages" :)
Thanks, just what I needed!
Nicolas.
Bob