📄 rei_05.pas
字号:
unit Rei_05;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, Menus;
type
// 定义复合图案的record类型
TPatDt = record
Xpos: Integer;
Ypos: Integer;
Xsiz: Byte;
Ysiz: Byte;
Pban: array[0..15] of Byte;
end;
TRei40_05 = class(TForm)
Timer1: TTimer;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;
Timer5: TTimer;
MainMenu1: TMainMenu;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
procedure Timer5Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private }
procedure PatDi(Pnum: Byte; X1, Y1: Word; Bmap: TBitmap);
procedure ChrDi(Cnum: TPatdt; Bmap: TBitmap);
procedure ChrCl(Cnum: TPatdt; Bmap: TBitmap);
public
{ Public }
end;
const
Yoko = 37; //定义横向图案数
Tate = 27; //定义直立图案数
DYoko = Yoko * 16; //定义横向点数
DTate = Tate * 16; //定义直立点数
var
Rei40_05: TRei40_05;
// 定义载入用与绘制用的点阵图
Load_Bmap: TBitmap;
Make_Bmap: TBitmap;
// 定义各种变数(Byte型态、Trect型态、TpatDt型态)
PX, PY, n: Byte;
Rect_L, Rect_D, Rect_M: TRect;
Chr1, Chr2, Chr3, Chr4: TPatDt;
implementation
{$R *.DFM}
procedure TRei40_05.FormCreate(Sender: TObject);
var
// 定义区域变数
X, Y: Byte;
begin
// 设定表格属性
Rei40_05.Height := 480;
Rei40_05.Width := 640;
Rei40_05.Canvas.CopyMode := cmSrcCopy;
// 载入图案
Load_Bmap := TBitmap.Create;
Load_Bmap.LoadFromFile(GetCurrentDir + '\ExData\Pat_Sample.bmp');
// 储存绘制用点阵图
Make_Bmap := TBitmap.Create;
Make_Bmap.Width := DYoko;
Make_Bmap.Height := DTate;
// 绘制用点阵图的初始设定
Make_Bmap.Canvas.CopyMode := cmSrcCopy;
for Y := 0 to (Tate - 1) do
for X := 0 to (Yoko - 1) do
PatDi(2, X * 16, Y * 16, Make_Bmap);
//复合图案的初始设定
with Chr1 do
begin
Xpos := DYoko - 32;
Ypos := 50;
Xsiz := 1;
Ysiz := 2;
Pban[0] := 5;
Pban[1] := 6;
end;
with Chr2 do
begin
Xpos := DYoko - 32;
Ypos := 150;
Xsiz := 2;
Ysiz := 1;
Pban[0] := 3;
Pban[1] := 4;
end;
with Chr3 do
begin
Xpos := DYoko - 32;
Ypos := 250;
Xsiz := 1;
Ysiz := 2;
Pban[0] := 5;
Pban[1] := 6;
end;
with Chr4 do
begin
Xpos := DYoko - 32;
Ypos := 350;
Xsiz := 2;
Ysiz := 1;
Pban[0] := 3;
Pban[1] := 4;
end;
end;
procedure TRei40_05.Timer1Timer(Sender: TObject);
begin
// 将所有的复合图案绘制在Make_Bmap,并显示在萤幕上
ChrDi(Chr1, Make_Bmap);
ChrDi(Chr2, Make_Bmap);
ChrDi(Chr3, Make_Bmap);
ChrDi(Chr4, Make_Bmap);
Rei40_05.Canvas.Draw(0, 0, Make_Bmap);
end;
procedure TRei40_05.PatDi(Pnum: Byte; X1, Y1: Word; Bmap: TBitmap);
begin
// 将指定的图案绘制在指定点阵图的指定位置上
PX := (Pnum and $F) * 16;
PY := Pnum and $F0;
Rect_L := Rect(PX, PY, PX + 16, PY + 16);
Rect_D := Rect(X1, Y1, X1 + 16, Y1 + 16);
Bmap.Canvas.CopyMode := cmSrcCopy;
Bmap.Canvas.CopyRect(Rect_D, Load_Bmap.Canvas, Rect_L);
end;
procedure TRei40_05.ChrDi(Cnum: TPatdt; Bmap: TBitmap);
var
X, Y: Byte;
begin
// 将指定的复合图案绘制在指定点阵图的指定位置上
n := 0;
for Y := 0 to (Cnum.Ysiz - 1) do
for X := 0 to (Cnum.Xsiz - 1) do
begin
PatDi(Cnum.Pban[n], Cnum.Xpos + X * 16, Cnum.Ypos + Y * 16, Bmap);
n := n + 1;
end;
end;
procedure TRei40_05.ChrCl(Cnum: TPatdt; Bmap: TBitmap);
var
X, Y: Byte;
begin
// 将指定点阵图上的复合图案以图案编号2(天蓝色)去除
for Y := 0 to (Cnum.Ysiz - 1) do
for X := 0 to (Cnum.Xsiz - 1) do
PatDi(2, Cnum.Xpos + X * 16, Cnum.Ypos + Y * 16, Bmap);
end;
procedure TRei40_05.Timer2Timer(Sender: TObject);
begin
// 去除复合图案1并变更座标
ChrCl(Chr1, Make_Bmap);
Chr1.Xpos := Chr1.Xpos - 1;
if Chr1.Xpos < 0 then
Chr1.Xpos := DYoko - 32;
end;
procedure TRei40_05.Timer3Timer(Sender: TObject);
begin
// 去除复合图案2并变更座标
ChrCl(Chr2, Make_Bmap);
Chr2.Xpos := Chr2.Xpos - 1;
if Chr2.Xpos < 0 then
Chr2.Xpos := DYoko - 32;
end;
procedure TRei40_05.Timer4Timer(Sender: TObject);
begin
// 去除复合图案3并变更座标
ChrCl(Chr3, Make_Bmap);
Chr3.Xpos := Chr3.Xpos - 1;
if Chr3.Xpos < 0 then
Chr3.Xpos := DYoko - 32;
end;
procedure TRei40_05.Timer5Timer(Sender: TObject);
begin
// 去除复合图案并变更座标
ChrCl(Chr4, Make_Bmap);
Chr4.Xpos := Chr4.Xpos - 1;
if Chr4.Xpos < 0 then
Chr4.Xpos := DYoko - 32;
end;
procedure TRei40_05.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// 释放载入用与绘制用点阵图
Load_Bmap.Free;
Make_Bmap.Free;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -