Mirror

Solving some problems of the TRichEdit component (Views: 714)


Problem/Question/Abstract:

Solving some problems of the TRichEdit component.

Answer:

Problem 1
========
If you work with a TRichEdit, you'll find out that it has some problems.
In the Delphi help files you'll find a FindText and a ReplaceText
procedure as an example. Those procedures work fine on most operating
systems, but NOT on Windows 2000! If you set RichEdit1.SelStart and
RichEdit1.SelLength, under most operating systems the RichEdit scrolls
to the selected text. But not on Windows 2000. There you'll have to add
a: SendMessage(EM_SCROLLCARET,0,0); after you made the selection with
SelStart and SelLength. Only then the RichEdit under Windows 2000 will
scroll to the position of the cursor!

Problem 2
========
If you drop a RichEdit on a form, Delphi (5) doesn't add the richedit.dcu
unit to your uses clause. However, if you have included the richedit.dcu
unit yourself (manually) to your uses clause, then the following problem
occures:

In the unit "messages.dcu": EM_SCROLLCARET is defined as:
   EM_SCROLLCARET = $00B7;
  
In the unit "richedit.dcu": EM_SCROLLCARET is defined as:
   EM_SCROLLCARET = WM_USER + 49;
  
Because WM_USER is defined as $0400 (in messages.dcu) the value of
EM_SCROLLCARET becomes: $400 + 49 (decimal) = 1073 (decimal) after you
have added "richedit" to your uses clause. And that is the reason why
EM_SCROLLCARET will not work anymore... (At least under W2000. I didn't
test it on other operating systems.)

A workaround for this problem is to globally add:

Const
   EM_SCROLLCARET = $00B7;
  
to your unit.            

<< Back to main page