Windows.CopyRect 是系统 API 函数, 功能是复制矩形的参数;
TCanvas.CopyRect 是 TCanvas 类的方法, 功能是复制矩形范围内的图像, 有点像 BitBlt 函数.
本例效果图:
代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Panel2: TPanel;
PaintBox1: TPaintBox;
PaintBox2: TPaintBox;
Button1: TButton;
procedure PaintBox1Paint(Sender: TObject);
procedure PaintBox2Paint(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
PaintBox1.Canvas.Brush.Color := clWhite;
PaintBox1.Canvas.FillRect(PaintBox1.BoundsRect);
PaintBox1.Canvas.MoveTo(0, 0);
PaintBox1.Canvas.LineTo(PaintBox1.Width, PaintBox1.Height);
PaintBox1.Canvas.MoveTo(PaintBox1.Width, 0);
PaintBox1.Canvas.LineTo(0, PaintBox1.Height);
end;
procedure TForm1.PaintBox2Paint(Sender: TObject);
begin
PaintBox2.Canvas.Brush.Color := clGreen;
PaintBox2.Canvas.Ellipse(0, 0, PaintBox2.Width, PaintBox2.Height);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R1,R2: TRect;
begin
R2 := PaintBox2.BoundsRect;
{Windows.CopyRect}
CopyRect(R1, R2); //相当于: R1 := R2;
OffsetRect(R1, 10, 10);
{TCanvas.CopyRect}
PaintBox1.Canvas.CopyRect(R1, PaintBox2.Canvas, R2);
end;
end.
窗体文件:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 161
ClientWidth = 319
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Panel1: TPanel
Left = 8
Top = 8
Width = 169
Height = 145
Caption = 'Panel1'
TabOrder = 0
object PaintBox1: TPaintBox
Left = 1
Top = 1
Width = 167
Height = 143
Align = alClient
OnPaint = PaintBox1Paint
ExplicitLeft = 32
ExplicitTop = 24
ExplicitWidth = 105
ExplicitHeight = 105
end
end
object Panel2: TPanel
Left = 183
Top = 8
Width = 130
Height = 105
Caption = 'Panel2'
TabOrder = 1
object PaintBox2: TPaintBox
Left = 1
Top = 1
Width = 128
Height = 103
Align = alClient
OnPaint = PaintBox2Paint
ExplicitLeft = 16
ExplicitTop = 0
ExplicitWidth = 105
ExplicitHeight = 105
end
end
object Button1: TButton
Left = 212
Top = 128
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 2
OnClick = Button1Click
end
end