I have a number of complex processing tasks that will produce messages, warnings, and fatal errors. I want to be able to display these messages in a task-independent component. My requirements are:
-
Different kinds of messages are displayed in different font and/or background colors.
-
The display can be filtered to include or exclude each kind of message.
-
The display will properly handle long messages by wrapping them and displaying the entire message.
-
Each message can have a data reference of some kind attached, and the message can be selected as an entity (eg, writing into an RTF memo won’t work).
In essence, I’m looking for some kind of listbox like component that supports colors, filtering, and line wrapping. Can anyone suggest such a component (or another one) to use as the basis for my log display?
Failing that, I’ll write my own. My initial thought is that I should base the component on a TDBGrid with a built-in TClientDataset. I would add messages to the client dataset (with a column for message type) and handle filtering through data set methods and coloring through the grid’s draw methods.
Your thoughts on this design are welcome.
[Note: At this time I’m not particularly interested in writing the log to a file or integrating with Windows logging (unless doing so solves my display problem)]
I’ve written a log component that does most of what you need and it is based on VitrualTreeView. I’ve had to alter the code a bit to remove some dependencies, but it compiles fine (although it hasn’t been tested after the alterations). Even if it’s not exactly what you need, it might give you a good base to get started.
Here’s the code
If you add any additional features, maybe you could post them here.