zoukankan      html  css  js  c++  java
  • 两个 CopyRect

    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
    
  • 相关阅读:
    爱就是一个人一辈子
    硬件访问方法和混杂字符设备
    Linux内核等待队列
    深入浅出的讲解傅里叶变换(真正的通俗易懂)
    Linux用root强制踢掉已登录用户
    一文带你读懂宽带上下行速率不对称的原因
    FDD-LTE上下行带宽一样的,为什么上下行流量差别这么大
    linux alsa音频中采样率fs、比特率BCLK 、主时钟MCLK关系
    80211 发送速率选择算法分析
    imx6q 启动logo
  • 原文地址:https://www.cnblogs.com/del/p/1229865.html
Copyright © 2011-2022 走看看