Contributor: SWAG SUPPORT TEAM

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.