unit Blotter3; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TmeiSmoothBlotter = class(TPanel) private { Private declarations } protected { Protected declarations } procedure Paint; override; public { Public declarations } constructor Create(AOwner: TComponent); override; published { Published declarations } { property BorderWidth default 8; property Color default clGreen;} end; procedure Register; implementation constructor TmeiSmoothBlotter.Create(AOwner: TComponent); Begin Inherited Create(Aowner); if (csDesigning in ComponentState) then begin BorderWidth := 8; Color := clGreen; Align := alClient; end; End; procedure TmeiSmoothBlotter.Paint; var bmpBlotter : TBitMap; Begin bmpBlotter := TBitMap.Create; try {size the bitmap} With Canvas do begin bmpBlotter.Height := Height; bmpBlotter.Width := Width; end; {draw on the bitmap} With bmpBlotter.Canvas Do Begin Brush.Color := Color; {BlotterColor;} Rectangle(0,0,Width,Height); {**************************************************} {draw vertical lines on left side of form} Pen.Color := clBlack; Moveto(0,0); {column,row} Lineto(0,Height); Pen.Color := clSilver; Moveto(0+1,0); {column,row} Lineto(0+1,Height); Pen.Color := clBlack; Moveto(0+4,0); {column,row} Lineto(0+4,Height); {draw vertical line on right side of form} Pen.Color := clSilver; Moveto(Width-4,0); Lineto(Width-4,Height); Pen.Color := clBlack; Moveto(Width-1,0); Lineto(Width-1,Height); {draw horizontal line on top side of form} Pen.Color := clBlack; Moveto(0,0); Lineto(Width,0); Pen.Color := clSilver; Moveto(0,0+1); Lineto(Width,0+1); Pen.Color := clBlack; Moveto(0,0+4); Lineto(Width,0+4); {draw horizontal line on bottom side of form} Pen.Color := clSilver; Moveto(0,Height-4); Lineto(Width,Height-4); Pen.Color := clBlack; Moveto(0,Height-1); Lineto(Width,Height-1); {***************************************************} {draw blotter outer corners} Pen.Color := clYellow; {Upper Left vertical and horizontal} MoveTo(0+1,0+1); LineTo(0+1,15); Moveto(0+1,0+1); LineTo(15,0+1); {Lower Left vertical only } MoveTo(0+1,Height-1); LineTo(0+1,Height-16); {Lower Right} Pen.Color := clBlack; MoveTo(Width-2,Height-1); LineTo(Width-15,Height-1); MoveTo(Width-1,Height-1); LineTo(Width-1,Height-15); Pen.Color := clYellow; MoveTo(Width-15,Height-1); LineTo(Width-16,Height-1); MoveTo(Width-1,Height-15); LineTo(Width-1,Height-16); {Upper Right, horizontal only} MoveTo(Width-15, 1); LineTo(Width-1, 1); {************************************************} {draw blotter inner corners} Pen.Color := clBlack; Brush.Color := clBlack; {Upper Left} MoveTo(0+5,0+5); LineTo(0+5,6+6); Moveto(0+5,0+5); LineTo(6+6,0+5); {Lower Left} MoveTo(0+5,Height-5); LineTo(0+5,(Height-5)-7); {draw vert} Moveto(0+5,Height-5); LineTo(12,Height-5); {draw horiz} Pen.Color := clYellow; MoveTo(0+6,Height-5); LineTo(11,Height-5); Pen.Color := clBlack; {lower right} Pen.Color := clYellow; MoveTo(Width-5,Height-5); LineTo(Width-5,Height-12); MoveTo(Width-5,Height-5); LineTo(Width-12,Height-5); {Upper Right} Pen.Color := clBlack; MoveTo(Width-11,5); LineTo(Width-5,5); Pen.Color := clYellow; MoveTo(Width-5,5); LineTo(Width-5,13); {************************************************} {draw the staircase pixels} Pen.Color := clBlack; {upper left} {lower pixels} MoveTo(0+1,15); LineTo(0+4,12); Moveto(2,Height-13); LineTo(3,Height-12); Moveto(4,Height-11); LineTo(4,Height-11); {upper pixels} MoveTo(15,0+1); LineTo(12,0+4); {lower left} {upper pixels} Pen.Color := clYellow; Moveto(2,Height-14); LineTo(5,Height-11); Pen.Color := clBlack; MoveTo(11,Height-5); LineTo(15,Height-1); {lower right} Pen.Color := clYellow; MoveTo(Width-15,Height-1); LineTo(Width-10,Height-6); MoveTo(Width-1,Height-15); LineTo(Width-6,Height-10); { Upper Right} Pen.Color := clBlack; MoveTo(Width-1,16); LineTo(Width-5,12); MoveTo(Width-14,2); LineTo(Width-12,4); {****************************************************} {fill in "brass" areas for corners} Brush.Color := clOlive; Pen.Color := clOlive; {upper left} {fill in large areas} Rectangle(2,2,5,12); Rectangle(2,2,12,5); {fill in upper pixels} Moveto(12,2); LineTo(14,2); Moveto(12,3); LineTo(13,3); {fill in lower pixels} MoveTo(2,12); LineTo(2,14); MoveTo(3,12); LineTo(3,13); {------------------------} {lower left} {fill in large areas} Rectangle(2,Height-1,12,Height-4); Rectangle(2,Height-2,5,Height-11); {fill in upper pixels} Moveto(2,Height-13); LineTo(3,Height-12); Moveto(2,Height-12); LineTo(4,Height-12); Moveto(4,Height-11); LineTo(4,Height-11); {fill in lower pixels} MoveTo(12,Height-3); LineTo(13,Height-2); MoveTo(14,Height-1); LineTo(14,Height-1); MoveTo(12,Height-2); LineTo(14,Height-2); {-----------------------} {lower right} {fill in large areas} Rectangle(Width-1,Height-1,Width-11, Height-4); Rectangle(Width-1,Height-1,Width-4,Height-11); {fill in upper pixels} MoveTo(Width-3,Height-12); LineTo(Width-1,Height-12); MoveTo(Width-2,Height-13); LineTo(Width-1,Height-13); {fill in lower pixels} MoveTo(Width-12,Height-3); LineTo(Width-12,Height-1); MoveTo(Width-13,Height-2); LineTo(Width-13,Height-1); {-----------------------} {upper right} {fill in large areas} Rectangle(Width-11,2,Width-1,5); Rectangle(Width-1,13,Width-4,2); {fill in upper pixels} MoveTo(Width-12,2); LineTo(Width-12,4); MoveTo(Width-13,2); LineTo(Width-13,1); {fill in lower pixels} MoveTo(Width-2,13); LineTo(Width-4,13); MoveTo(Width-2,14); LineTo(Width-1,14); {***************************************************} {cleanup corner pixels} Pen.Color := clBlack; Moveto(0,0); LineTo(0,10); {Lower Left} MoveTo(0,Height-1); LineTo(13,Height-1); MoveTo(0,Height-1); LineTo(0,Height-14); {Upper Right} Moveto(Width-1,0); LineTo(Width-14,0); Moveto(Width-1,0); LineTo(Width-1,13); {Lower Right} MoveTo(Width-1,Height-1); LineTo(Width-14,Height-1); MoveTo(Width-1,Height-1); LineTo(Width-1,Height-14); end; {copy the bitmap image to the panel's canvas} Canvas.Draw(0,0,bmpBlotter); finally bmpBlotter.Free; end; end; procedure Register; begin RegisterComponents('PRIME', [TmeiSmoothBlotter]); end; end.