ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Delphi 经典游戏程序设计40例 的学习 例13 各种卸妆效果的处理

2022-07-14 22:38:18  阅读:174  来源: 互联网

标签:13 12 end 16 19 Delphi Canvas 40 MakeBmap


unit R13;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TRei13 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    tmr1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    //procedure FmCls(Col:TColor);
    // 在绘制点阵图与画面上绘制图案
    procedure FmDip;
    //procedure DipDt(X1,Y1:Word;Dt:Byte );
    // 在绘制点阵图上依指定的大小及颜色来绘制四方形
    procedure ClsBox(X1,Y1,X2,Y2:Word;Col : TColor );
    //将指定的角色(复合图案)绘制至指定点阵图上
    procedure ChrDi(Xsiz,Ysiz:Byte ;Dpon:Word;X1,Y1:Integer ;Bmap:TBitmap );
    // 将指定的图案绘制至指定点阵图的指定位置上
    procedure PatDi(Pnum:Byte;X1,Y1:Integer;Bmap:TBitmap);
  public
    { Public declarations }
  end;

const
  Yoko = 37;         //横向图案数
  Tate = 27;         // 纵向图案数
  DYoko = Yoko * 16;  // 横向点数 16最小单位?
  Dtate = Tate * 16;
  PtFull = 16;     // 全面显示的(不要重叠显示)的图案数

  MaxSp = 2;      // 本次使用的复合图案总数


var
  Rei13: TRei13;
  LoadBmap,XpatBmap,BpatBmap,BackBmap,MakeBmap : TBitmap;
  // 载入,去除模板,笔刷图案,显示,绘制 点阵图
  // PX ,PY 在PatDi中用, 可以为局部变量。
  //在 TIMER中用,需要
  // p没有用用到,可以去掉

   P,PX,PY,nX,nY,Lp,Cdip : Byte;


  // cdip   被赋值 0,1,但是并没有出现判断的地方,应该可以去掉
  // 测试可以去掉
 // 原来12程序里面的cdip ,  其实是在13程序中被用到的,

   // 用来识别按钮,进入相应的TIMEER,的CASE 功能区  ,255为没有点击按钮用
   Cls:Byte = 255;

  //SC计算零件贴图指针数组的初始设置 ,应该可以放到 FORMCREAT 中
  // n,m TIMEER中做 循环计数器使用,需要退出TMINER 后仍有效,等待下次进入TIMER
  // 所以需要全局变量?
  // 但是 n,在11,13中用,而m 在12,14中用,似乎可以去掉一个。只用一个?
  //测试     确实可以只要一个
  m,{m,}Sc : Word;

  // 需要操作矩形块
  RectL,RectM,RectS,RectD: TRect;

  // 复合图案数组,自定义的数据格式   ,     这个可以整套替换
 { SpSiz: array[0..(MaxSp * 2 - 1)] of Byte = (2,2,31,17) ;
  SpPon :array[0..(MaxSp -1)] of Word;
  SpDat :array[0..(4 + 31  *17 -1)] of Byte =(
  28,29,30,31,
    19,19,19,19,19,19,19,19,19,19,19,19,19,19, 0, 0,
      0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0,12,12,12,12,12, 0, 0, 0,12,12,12,12,12, 0, 0,
      0,12,12,12,12,12, 0, 0,12,12,12,12,12,12, 0,
    12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0, 0, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0,12,12, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12, 0,
      12, 0, 0, 0, 0, 0,12, 0,12, 0, 0, 0, 0, 0,12,
    0,12,12,12,12,12, 0, 0, 0,12,12,12,12,12, 0, 0,
      0,12,12,12,12,12, 0, 0,12,12,12,12,12,12, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,
      19,19,19,19,19,19,19,19,19,19,19,19,19,19,19
  )  ;
   }
  //  复合图案数组
  SpSiz: array[0..(MaxSp * 2 - 1)] of Byte = (2,2, 31,21);
  SpPon: array[0..(MaxSp - 1)] of Word;
  SpDat: array[0..(4 + 31 * 21 - 1)] of Byte = (
    32,33,48,49,
    12,12,12,12,12,12,12,12,12,12,12,12,12,12, 0, 0,
      0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
    12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,12, 0,
      0, 0,12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,12,
    12,12,12,12,12,12,12,12,12,12,12,12,12,12, 0, 0,
      0,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
       0,19,19,19,19,19, 0, 0,19, 0, 0, 0, 0, 0,19,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0,19, 0,19, 0, 0, 0, 0,19, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0,19, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0,19, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0,19, 0, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19,19, 0, 0, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0,19, 0, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0,19, 0, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0,19, 0, 0,
    19, 0, 0, 0, 0, 0, 0, 0,19, 0, 0, 0, 0, 0,19, 0,
      19, 0, 0, 0, 0, 0,19, 0,19, 0, 0, 0, 0,19, 0,
    19,19,19,19,19,19,19, 0, 0,19,19,19,19,19, 0, 0,
       0,19,19,19,19,19, 0, 0,19, 0, 0, 0, 0, 0,19,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
      12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
    12, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,12,
    12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,
      12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
  );

implementation

{$R *.dfm}

procedure TRei13.FormCreate(Sender: TObject);
var
  X,Y :Byte;       // 循环用,X,Y 坐标值   绘制BackBmap
  Pn: Word;      //循环用,MAXSP 值,复合图案数组的下标值

begin
  Rei13.Canvas.CopyMode := cmSrcCopy;
  //载入图案
  LoadBmap := TBitmap.Create;
  LoadBmap.LoadFromFile(GetCurrentDir + '\Pat_Sample.bmp');
  //存储去除用点阵图
  XpatBmap := TBitmap.Create;
  XpatBmap.Width := 256;
  XpatBmap.Height := 256;
  // 制作去除用点阵图
  RectL := Rect(0,0,256,256);
  XpatBmap.Canvas.CopyMode := cmSrcCopy;
  XpatBmap.Canvas.CopyRect(RectL,LoadBmap.Canvas,RectL);
  XpatBmap.Canvas.Brush.Color := clBlack;
  XpatBmap.Canvas.BrushCopy(RectL,LoadBmap,RectL,clWhite);
  XpatBmap.Canvas.CopyMode := cmMergePaint;
  XpatBmap.Canvas.CopyRect(RectL,LoadBmap.Canvas,RectL);
  //笔刷点阵图
  BpatBmap := TBitmap.Create;
  BpatBmap.Width := 8;
  BpatBmap.Height := 8;
  //零件贴图指针数组的初始设置
  Sc :=0;
  for Pn :=0 to (MaxSp -1) do
  begin
    SpPon[Pn] := Sc;
    Sc := Sc + SpSiz[Pn * 2] * SpSiz[Pn * 2 + 1]

  end;
  //存储绘制用点阵图
  MakeBmap := TBitmap.Create;
  MakeBmap.Width := DYoko;
  MakeBmap.Height := Dtate;


   //将欲显示的图案绘制到BackBmap
  BackBmap := TBitmap.Create;
  BackBmap.Width := DYoko + 32;
  BackBmap.Height := Dtate + 32;

  for Y := 0 to (Tate -1 )  do
    for X := 0 to (Yoko -1 ) do

    //全部填充 7 图案,该图案是砖块。
    // 填充15 该图案是草地
    PatDi(15,X * 16 + 16,Y * 16 + 16,BackBmap);
    // 画图案0
  ChrDi(SpSiz[0],SpSiz[1],SpPon[0],298,88,BackBmap);
     // 画图案1
  ChrDi(SpSiz[2],SpSiz[3],SpPon[1],66,96,BackBmap);

end;

 { //功能,以指定的颜色将绘制点阵图与画面去除
procedure TRei13.FmCls(Col:TColor);
begin
  RectD :=  Rect(0,0,DYoko,Dtate) ;
  MakeBmap.Canvas.Brush.Color := Col;
  MakeBmap.Canvas.FillRect(RectD);
  Rei12.Canvas.Draw(0,0,MakeBmap);


end;     }


{procedure TRei13.DipDt(X1,Y1:Word;Dt:Byte );
// 从显示画面将指定大小的正方形复制到绘制点阵图
begin
  RectM := Rect(X1 + 16, Y1 + 16,X1 + 16 + Dt,Y1 + 16 + Dt);
  RectD := Rect(X1,Y1,X1 + Dt,Y1 + Dt);
  MakeBmap.Canvas.CopyRect(RectD,BackBmap.Canvas,RectM);

end; }
// 在绘制点阵图与画面上绘制图案
procedure Trei13.FmDip;

begin
  RectM := Rect(16,16,DYoko + 16,Dtate + 16);
  RectD := Rect(0,0,DYoko ,Dtate );
  MakeBmap.Canvas.CopyRect(RectD,BackBmap.Canvas,RectM);
  Rei13.Canvas.Draw(0,0,MakeBmap);

end;
// 在绘制点阵图上依指定的大小及颜色来绘制四方形
procedure trei13.ClsBox(X1,Y1,X2,Y2:Word;Col : TColor);
begin
  RectD := Rect(X1,Y1,X2,Y2);
  MakeBmap.Canvas.Brush.Color := Col;
  MakeBmap.Canvas.FillRect(RectD);

end;

 //将指定的角色(复合图案)绘制至指定点阵图上
procedure TRei13.ChrDi(Xsiz,Ysiz:Byte ;Dpon:Word;X1,Y1:Integer ;Bmap:TBitmap );
var
  CDX,CDY : Byte;
begin
  for CDY := 0 to (Ysiz -1) do
    for CDX := 0 to (Xsiz - 1) do
    begin
      if ( X1 + CDX * 16 >= 0 ) and ( X1 + CDX * 16 <= DYoko + 16 ) and
        (Y1 + CDY * 16 >= 0 ) and (Y1 + CDY * 16 <= DTate + 16 ) then
        PatDi(SpDat[Dpon],X1 + CDX * 16,Y1 + CDY * 16,Bmap );
      Dpon := Dpon + 1;

    end;
end;


 // 将指定的图案绘制至指定点阵图的指定位置上
procedure TRei13.PatDi(Pnum:Byte;X1,Y1:Integer;Bmap:TBitmap);
var
  PX,PY : Byte;
begin
 PX := (Pnum and $F) * 16;    //PX ,PY可以为过程内局部变量码?
 PY := Pnum and $F0;
 RectL := Rect(PX,PY,PX + 16,PY + 16);
 RectD := Rect(X1,Y1,X1 + 16,Y1 + 16);
 if Pnum <> 0 then
 if  Pnum >= PtFull then

 begin
   Bmap.Canvas.CopyMode := cmSrcPaint;
   Bmap.Canvas.CopyRect(RectD,XpatBmap.Canvas,RectL);
   Bmap.Canvas.CopyMode := cmSrcAnd;
   Bmap.Canvas.CopyRect(RectD,LoadBmap.Canvas,RectL);

 end
 else begin
   Bmap.Canvas.CopyMode := cmSrcCopy;
   Bmap.Canvas.CopyRect(RectD,LoadBmap.Canvas,RectL);
 end;

end;

procedure TRei13.tmr1Timer(Sender: TObject);
var

  // 定义局部变量
  X,Y ,Gd:Byte;    // x,y ,坐标循环需要
  n:Word;    //   内部循环计数,
begin

   //化妆显示与画面去除
  case Cls  of
     // 以黑色去除画面并进行初始设置
     // 很有技巧啊,TIMEER是interval 间隔进入。点击第一次进入1..4 初始化一次,
     //再进入 个功能执行完,执行期间用DISP 锁定进入特定11,12,13,14
     // ,      nX,nY ,需要 全局使用?变量M 可以用局部变量,M测试得全局变量
   1..4: begin
     FmDip;
     Cls := Cls + 10;
      m := 0 ;

     nX := 0 ;
     nY := 0 ;

   end;
           //  显示1的处理   ,x,y,x,y 转圈消除  , M 用来计数消除了一圈,也用来定位XY
   11: begin
     MakeBmap.Canvas.CopyMode := cmSrcCopy;
     X := m;
     Y := m;

     if  m < Yoko then

       for X := m to (Yoko * 2 - 2 - m ) do
         ClsBox(X * 8,Y * 8,X * 8 + 8,Y * 8 + 8,clBlack);

       if m < Tate then
         for Y := m  to ( Tate * 2 - 2 - m) do
           ClsBox(X * 8 ,Y * 8 ,X * 8 + 8,Y * 8 + 8,clBlack);

       if m < Yoko then
       for X := (Yoko * 2 - 1 - m) downto (m +1 ) do
        ClsBox(X * 8 ,Y * 8 ,X * 8 + 8,Y * 8 + 8,clBlack);

       if m < Tate then
         for Y := (Tate * 2 - 1 -m) downto (m +1 ) do
         ClsBox(X * 8 ,Y * 8 ,X * 8 + 8,Y * 8 + 8,clBlack);

       m := m + 1;
       //锁定操作
       if (m >= Yoko  ) or (m >= Tate   ) then
         Cls := 0;
       Rei13.Canvas.Draw(0,0,MakeBmap);


   end;
          //倾斜麻点消除效果     ,算了这个效果有点复杂,更多的讲的是技巧,不研究了
   12: begin
      X := nX;
      Y := nY;
      if m < 16 then          // m 用来计数,灰度颜色0-15
        Lp := m
      else
        Lp := 15;

      for Gd := Lp downto 0  do
      begin
        BpatBmap.Canvas.CopyMode := cmSrcCopy;
        RectL := Rect(Gd * 8 + 32,64,Gd * 8 + 40,72);
        RectD := Rect(0,0,8,8);
        BpatBmap.Canvas.CopyRect(RectD,LoadBmap.Canvas,RectL);
        MakeBmap.Canvas.Brush.Bitmap := BpatBmap;    //设置刷子
        MakeBmap.Canvas.CopyMode := cmMergeCopy;

        for n := 0 to (Yoko - 1) do
        begin
          X := (X + 36) mod Yoko ;
          Y := (Y + 26) mod Tate ;
          RectD := Rect(X * 16,Y * 16,X * 16 + 16,Y * 16 + 16);
          MakeBmap.Canvas.CopyRect(RectD,MakeBmap.Canvas,RectD);
        end;
        MakeBmap.Canvas.Brush.Bitmap := nil;

        if Gd = 15 then
        begin
          nX := X;
          nY := Y;

        end;

      end;



      m := m + 1;
      if m = Tate +15 then      //这里为什么要加15? 为什么要加到这么大  27 + 15
      Cls := 0 ;
       Rei13.Canvas.Draw(0,0,MakeBmap);
   end;

   13 : begin
     if m < 16 then
     begin
       //笔刷图案也在载入图案中
       //BpatBmap.Canvas.CopyMode := cmNotSrcCopy;
       BpatBmap.Canvas.CopyMode := cmSrcCopy;
                // 40 = 32 + 8 ,72 = 64 + 8

       RectL := Rect(m * 8 + 32,64,m * 8 + 40,72);
       RectD := Rect(0,0,8,8);
       BpatBmap.Canvas.CopyRect(RectD,LoadBmap.Canvas ,RectL);

       MakeBmap.Canvas.Brush.Bitmap := BpatBmap;
       // CMMERGERCOPY 将原图像和笔刷图案以AND 方式合并并传送出去
       MakeBmap.Canvas.CopyMode := cmMergeCopy;
       RectM := Rect(16,16,DYoko + 16,Dtate + 16);
       RectD := Rect(0,0,DYoko,Dtate);

       //改变的笔刷,还是COPYRECT,
       MakeBmap.Canvas.CopyRect(RectD,BackBmap.Canvas,RectM);
       //释放笔刷图案
       MakeBmap.Canvas.Brush.Bitmap := nil;
       m := m + 1;
     end
     else
       Cls := 0 ;
     Rei13.Canvas.Draw(0,0,MakeBmap);

     end;

  14 : begin
     MakeBmap .Canvas.CopyMode := cmSrcCopy;

       // PN  Y轴上,分2 点  那么可以改 4点?
     for n := 0 to (Tate * 4 -1 ) do
       begin


       RectS := Rect(m * 8,n * 4,DYoko - 8 ,n * 4 + 2);
       RectD := Rect(m * 8 + 8,n * 4,DYoko,n * 4 + 2);
       MakeBmap.Canvas.CopyRect(RectD,makeBmap.Canvas,RectS);
       ClsBox(m * 8,n * 4,m * 8 + 8,n * 4 + 2,clBlack);

       RectS := Rect(8,n * 4 + 2,DYoko - m * 8,n * 4 + 4);
       RectD := Rect(0,n * 4 + 2,DYoko - m * 8-8 ,n * 4 + 4);
       MakeBmap.Canvas.CopyRect(RectD,MakeBmap.Canvas,RectS);
       ClsBox(DYoko - m * 8 - 8 ,n * 4 + 2,DYoko - m * 8,n * 4 + 4,clBlack);



       end;
     // M  移动8 点。 X  轴上
       m  := m + 1;
       if m = Yoko * 2 then
       Cls := 0;
       Rei13.Canvas.Draw(0,0,MakeBmap);

     end;
  255 :
    begin
    FmDip;
    Cls := 0 ;
    Cdip := 1 ;

    end;

   end;
end;

procedure TRei13.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  LoadBmap.Free;
  XpatBmap.Free;
  BpatBmap.Free;
  BackBmap.Free;
  MakeBmap.Free;
end;

procedure TRei13.Button1Click(Sender: TObject);
begin
  //Cdip := 1;
  if Cls = 0 then
     Cls := 1;
end;

procedure TRei13.Button2Click(Sender: TObject);
begin
  //Cdip := 1;
  if Cls = 0 then
    Cls := 2;
end;

procedure TRei13.Button3Click(Sender: TObject);
begin
  //Cdip  := 1;
  if Cls = 0 then
  Cls := 3;
end;

procedure TRei13.Button4Click(Sender: TObject);
begin
  //Cdip := 1;
  if cls = 0 then
  Cls := 4;

end;

procedure TRei13.Button5Click(Sender: TObject);
begin
 // FmCls(clBlack);
  FmDip;
  Cls := 0 ;
  //Cdip := 0 ;
end;
    // form画面重新绘制, 没有redraw ?
procedure TRei13.FormPaint(Sender: TObject);
begin
  Rei13.Canvas.Draw(0,0,MakeBmap);
end;

end.

和例12是相反的功能,结构上一样,所以就在例12的程序上改了一下。

 

标签:13,12,end,16,19,Delphi,Canvas,40,MakeBmap
来源: https://www.cnblogs.com/D7mir/p/16479575.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有