Delphi Cavas基础整理

参考: 万一的博客及相关示例。

窗体设计:

 

实现效果:

 

实现代码:

 

unit uFrmMain;

interface

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

type
  TFrmMain = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    PaintBox1: TPaintBox;
    Panel1: TPanel;
    Button10: TButton;
    Panel2: TPanel;
    Button11: TButton;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    Button12: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmMain: TFrmMain;

implementation

{$R *.dfm}

var
  btn: TButton;
const
  y1= 10;
  y2= 100;

procedure TFrmMain.Button10Click(Sender: TObject);
const
  pts: array[0..4] of TPoint= (
      (x: 536; y: 250),
      (x: 536; y: 250+ 100),
      (x: 536+ 100 div 2; y: 250+ 100 div 2),
      (x: 536+ 100; y: 250+ 100),
      (x: 536+ 100; y: 250)
    );
  pts2: array[0..4] of TPoint= (
      (x: 0; y: 0),
      (x: 0; y: 0+ 99),
      (x: 0+ 100 div 2; y: 0+ 100 div 2),
      (x: 0+ 99; y: 0+ 99),
      (x: 0+ 99; y: 0)
    );
var
  cvs: TCanvas;
begin
  Canvas.Polygon(pts);
  {像 Panel1 这样没有 Canvas 属性的控件, 也可以绕道获取}
  cvs := TCanvas.Create;
  try
    cvs.Handle := GetDC(Panel2.Handle);
    cvs.Pen.Color:= clRed;
    cvs.Pen.Width:= 1;
    cvs.Polygon(pts2);
  finally
    cvs.Free;
  end;
end;

procedure TFrmMain.Button11Click(Sender: TObject);
const
  pts: array[0..4] of TPoint= (
      (x: 640; y: 250),
      (x: 640; y: 250+ 100),
      (x: 640+ 100 div 2; y: 250+ 100 div 2),
      (x: 640+ 100; y: 250+ 100),
      (x: 640+ 100; y: 250)
    );
  pts2: array[0..4] of TPoint= (
      (x: 0; y: 0),
      (x: 0; y: 0+ 99),
      (x: 0+ 100 div 2; y: 0+ 100 div 2),
      (x: 0+ 99; y: 0+ 99),
      (x: 0+ 99; y: 0)
    );
var
  cvs: TCanvas;
begin
  Canvas.Polyline(pts);
  {像 Panel1 这样没有 Canvas 属性的控件, 也可以绕道获取}
  cvs := TCanvas.Create;
  try
    cvs.Handle := GetDC(Panel3.Handle);
    cvs.Pen.Color:= clRed;
    cvs.Pen.Width:= 1;
    cvs.Polyline(pts2);
  finally
    cvs.Free;
  end;
end;

procedure TFrmMain.Button12Click(Sender: TObject);
var
  cvs: TCanvas;
  function DrawCorner(ADrawColor : TColor;ix, iy, ix2, iy2:Integer):Boolean;
  var
    ilength : Integer;   //转角线段长度
  begin
    ilength := 15;
    cvs.Pen.Width := 2;
    cvs.Pen.Color := ADrawColor;
    cvs.Brush.Style := bsClear;
    //画左上角
    cvs.MoveTo(ix-cvs.Pen.Width+1 , iy + ilength+1);
    cvs.LineTo(ix-cvs.Pen.Width+1, iy-cvs.Pen.Width);                                        //
    cvs.LineTo(ix +ilength,  iy-cvs.Pen.Width+1);                            //-Canvas.Pen.Width+1
    //画右上角
    cvs.MoveTo(ix2 - ilength -1, iy-cvs.Pen.Width+1);
    cvs.LineTo(ix2 + 1, iy-cvs.Pen.Width);
    cvs.LineTo(ix2 + 1, iy + ilength);
    //画右下角
    cvs.MoveTo(ix2 + 1 ,  iy2 - ilength -1);
    cvs.LineTo(ix2 + 1 , iy2 + 1);
    cvs.LineTo(ix2 - ilength -1, iy2 + 1);
    //画左下角
    cvs.MoveTo(ix-cvs.Pen.Width  + ilength+1, iy2);
    cvs.LineTo(ix-cvs.Pen.Width+1 , iy2 + 1);
    cvs.LineTo(ix-cvs.Pen.Width+1 , iy2 - ilength -1);
  end;
begin
  {像 Panel1 这样没有 Canvas 属性的控件, 也可以绕道获取}
  cvs := TCanvas.Create;
  try
    cvs.Handle := GetDC(Panel5.Handle);
    cvs.Pen.Width:= 1;
    DrawCorner(clBlue, 50, 50, 150, 150);
  finally
    FreeAndNil(cvs);
  end;
end;

procedure TFrmMain.Button1Click(Sender: TObject);
begin
  Canvas.Pen.Color:= clRed;
  Canvas.Pen.Width:= 2;
  Canvas.MoveTo(112, 10);
  Canvas.LineTo(212, 100);
end;

procedure TFrmMain.Button2Click(Sender: TObject);
begin
  Canvas.Brush.Color:= clYellow;
  Canvas.FillRect(ClientRect);
end;

procedure TFrmMain.Button3Click(Sender: TObject);
var
  R: TRect;
begin
  btn:= TButton(Sender);
//  Canvas.Rectangle(btn.Left, y1, btn.Left+ btn.Width, y2);
  r:= Rect(btn.Left, y1, btn.Left+ btn.Width, y2);
  Canvas.Rectangle(R);
end;

procedure TFrmMain.Button4Click(Sender: TObject);
const
  arr: array[0..3] of WideString = (
    '白日依山尽',
    '黄河入海流',
    '欲穷千里目',
    '更上一层楼'
  );
  a = 20; {横向间隔}
  b = 20; {纵向间隔}
var
  cvs: TCanvas;
  i, j, x, y: Integer;
  s: string;
begin
  {像 Panel1 这样没有 Canvas 属性的控件, 也可以绕道获取}
  x:= 20;
  y:= 20;
  cvs := TCanvas.Create;
  try
    cvs.Handle := GetDC(Panel4.Handle);
    cvs.Brush.Color:= clWhite;
    cvs.FillRect(Panel4.ClientRect);
    for I := 0 to Length(arr)- 1 do
    begin
      for J := 1 to Length(arr[I]) do
      begin
        s:= arr[I][J];
        cvs.TextOut(x, y, s);
        x:= x+ cvs.TextWidth(s)+ a;
      end;
      x:= 20;
      y:= y+ cvs.TextHeight(s)+ b;
    end;
  finally
    FreeAndNil(cvs);
  end;
end;

procedure TFrmMain.Button5Click(Sender: TObject);
var
  R: TRect;
begin
  btn:= TButton(Sender);
//  Canvas.Ellipse(btn.Left, y1, btn.Left+ btn.Width, y2);
  r:= Rect(btn.Left, y1, btn.Left+ btn.Width, y2);
  Canvas.Ellipse(R);
end;

procedure TFrmMain.Button6Click(Sender: TObject);
begin
  btn:= TButton(Sender);
  Canvas.Pie(btn.Left, y1, btn.Left+ btn.Width, y2,
    btn.Left+ btn.Width, y1+ (y2- y1) div 2,
    btn.Left+ btn.Width div 2, y1);
end;

procedure TFrmMain.Button7Click(Sender: TObject);
begin
  btn:= TButton(Sender);
  Canvas.Chord(btn.Left, y1, btn.Left+ btn.Width, y2,
    btn.Left+ btn.Width, y1+ (y2- y1) div 2,
    btn.Left+ btn.Width div 2, y1);
end;

procedure TFrmMain.Button8Click(Sender: TObject);
begin
  btn:= TButton(Sender);
  Canvas.Arc(btn.Left, y1, btn.Left+ btn.Width, y2,
    btn.Left+ btn.Width, y1+ (y2- y1) div 2,
    btn.Left+ btn.Width div 2, y1);
end;

procedure TFrmMain.Button9Click(Sender: TObject);
var
  cvs: TCanvas;
begin
  {PaintBox1 就像窗体一样, 也有 Canvas 属性}
  PaintBox1.Canvas.Brush.Color:= clRed;
  PaintBox1.Canvas.FillRect(PaintBox1.ClientRect);
  {像 Panel1 这样没有 Canvas 属性的控件, 也可以绕道获取}
  cvs := TCanvas.Create;
  cvs.Handle := GetDC(Panel1.Handle);
  cvs.Brush.Color := clBlue;
  cvs.FillRect(Panel1.ClientRect);
  cvs.Free;
end;

end.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值