unit classMemo;
interface
uses StdCtrls, Graphics, Messages, Classes, SysUtils, Controls;
type
TMemo =
class(StdCtrls.TMemo)
private
FTextHint: TStrings;
FTextHintFont: TFont;
protected
FCanvas: TCanvas;
procedure WMPaint(
var Message: TWMPaint);
message WM_PAINT;
public
constructor Create(AOwner: TComponent);
override;
destructor Destroy;
override;
published
property TextHint: TStrings
read FTextHint
write FTextHint;
property TextHintFont: TFont
read FTextHintFont
write FTextHintFont;
end;
implementation
constructor TMemo.Create(AOwner: TComponent);
begin
inherited;
FTextHint := TStringList.Create;
FCanvas := TControlCanvas.Create;
FTextHintFont := TFont.Create;
FTextHintFont.Color := clGrayText;
TControlCanvas(FCanvas).Control := Self;
end;
destructor TMemo.Destroy;
begin
FreeAndNil(FTextHintFont);
FreeAndNil(FCanvas);
FTextHint.Clear;
FreeAndNil(FTextHint);
inherited;
end;
procedure TMemo.WMPaint(
var Message: TWMPaint);
var
i: integer;
TextHeight: integer;
begin
inherited;
if (Text = '
')
and (
not Focused)
then
begin
FCanvas.Font := FTextHintFont;
TextHeight := FCanvas.TextHeight('
yY');
// Dummy Text to determine Height
for i := 0
to FTextHint.Count - 1
do
FCanvas.TextOut(1, 1 + (i * TextHeight), FTextHint[i]);
end;
end;
end.