Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как нарисовать что-нибудь на TMemo?

01.01.2007

Для рисования на поверхности TMemo необходимо создать создать собственный компонент, наследованный от TMemo и переопределить в нём рисование. Примерно так:

type 
 
TMyMemo = class(TMemo)
 
protected
    procedure
WMPaint(var Message: TWMPaint); message WM_PAINT;
 
end;

А теперь добавьте реализацию этой процедуры:

procedure TMyMemo.WMPaint(var Message: TWMPaint); 
var
 
MCanvas: TControlCanvas;
 
DrawBounds : TRect;
Begin
  inherited
;
 
MCanvas:=TControlCanvas.Create;
 
DrawBounds := ClientRect;  // Работаем с временной записью TRect.
 
Try
   
MCanvas.Control:=Self;
   
With MCanvas do
   
Begin
   
Brush.Color := clBtnFace;
   
FrameRect( DrawBounds );
   
InflateRect( DrawBounds, -1, -1);
   
FrameRect( DrawBounds );
   
FillRect ( DrawBounds );
   
MoveTo ( 33, 0 );
   
Brush.Color := clWhite;
   
LineTo ( 33, ClientHeight );
   
PaintImages;
   
end;
 
finally
   
MCanvas.Free;
 
End;
end;

Процедура PaintImages рисует картинки на канвасе Memo.

procedure TMyMemo.PaintImages; 
var
 
MCanvas: TControlCanvas;
 
DrawBounds : TRect;
  i
, j : Integer;
 
OriginalRegion : HRGN;
 
ControlDC : HDC;
begin
 
MCanvas:=TControlCanvas.Create;
 
DrawBounds := ClientRect;  // Работаем с временной записью TRect.
 
try
   
MCanvas.Control:=Self;
   
ControlDC := GetDC ( Handle );
   
MCanvas.Draw(0, 1, Application.Icon);
 
finally
   
MCanvas.Free;
 
end;
end;

Теперь мы имеем собственноручно нарисованный memo.

Взято из https://forum.sources.ru