Question:
I have two questions:
Question 1:
How can I extend the painting functionality of a TWinControl
like the TGraphicControl
‘s Paint
method?
Question 2:
I cannot find the Paint
method in TWinControl
to override. Specifically, I want to extend the TDBEdit
class. The TDBEdit
class implements the WMPaint
method that is private.
Answer:
In answer to your first question:
To extend the capabilities of Paint
for TGraphicControl
, you need to override the method and add your own capabilities. That’s highly object-oriented.
Regarding your second question:
You’re right, there’s no Paint
method for TDBEdit
, but there is PaintWindow
, and that’s what you’ll have to override.
I suggest you look in Controls.PAS
to see how TCustomControl
deals with overriding PaintWindow
and creates a virtual Paint
method. It’s actually quite ingenious. My approach would be to make a descendant of TCustomMaskEdit
and include the capabilities you want from TDBEdit
. Then, instead of putting the WMPaint
procedure in the private section, move it to the protected section. From there, you can override PaintWindow
from TWinControl
, then propagate your own Paint
procedure and canvas. I haven’t done this myself, but after studying the VCL source code, this is the place I’d start.