Problem Description
Here's a program to rapidly apply highlighting to
selected words in a TRichedit (Rich edit) control..
Background & Techniques
Applying syntax formatting to a sizable Richedit file is quite slow.
The technique used here is to intercept the WindowProc procedure used by
TRichedit and let it paint the window which we then scan for words to by
highlighted and rewrite them in the specified color. Although my
demo only highlights single words, more sophisticated highlighting, as for
example performed by the Delphi IDE for strings, comments, numbers, etc. is
possible. The Basic code to do this was sent to me by Emile Tredoux
and when someone else had the problem recently, I finally got around to
converting the guts of the process to Delphi.
I believe that there are enough comments in the code to make it usable to
others. The main constraint of the technique is that the highlighted
text must fit into the space used for the text being replaced since
TRichedit has already painted the window and we are just repainting selected
portions. The safest way to ensure this, used here, is to use
the TRichedit font for our Textout operations. If the font has has
fixed pitch as used by Delphi IDE, then highlighted text font style
could be set Bold or Italic as well.
The code uses a number of Windows API calls and took a bit of fiddling to
get the parameters defined correctly but it seems to be working fine for
now.
Running/Exploring the Program
Suggestions for Further Explorations
Lot's of room for variations of this technique. For
example::
 |
Detecting and
highlighting phrases. |
 |
Highlighting
color based on the word or phrase |
 |
Syntax
highlighting as in the Delphi IDE by detecting comments, string
constants, numbers, reserved words, etc. |
|
Original Date: mmm dd, yyyy |
Modified:
May 18, 2009 |
|