zoukankan      html  css  js  c++  java
  • 使用剪切板[2]: Assign、HasFormat

    准备工作:
    在窗体上放置一个 TPanel; 在 TPanel 上放一个 TImage; 另外需要三个按钮.

    本例效果图:



    第一版代码:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Panel1: TPanel;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Clipbrd;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Left := 0;
      Image1.Top := 0;
      Panel1.AutoSize := True;
      Image1.AutoSize := True;
      Image1.Picture.LoadFromFile('c:\temp\test.bmp');
    
      TButton(Sender).Caption := '导入';
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Clipboard.Assign(Image1.Picture); {把 Image1 中的图片放入剪切板}
      {现在在图像软件中都可以粘贴了, 可以用 Windows 画图板试试}
    
      TButton(Sender).Caption := '复制';
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      bit: TBitmap; {准备用一个 TBitmap 从剪切板中结束图片}
      x,y: Integer;
    begin
      bit := TBitmap.Create;
      bit.Assign(Clipboard);               {从剪切板获取}
      x := Panel1.Width + Panel1.Left * 2; {x,y 是准备在窗体上的粘贴位置}
      y := Panel1.Top;
      Canvas.Draw(x, y, bit);              {粘贴就是画出来呗}
      bit.Free;
    
      TButton(Sender).Caption := '粘贴';
    end;
    
    end.
    
    不过现在程序还有漏洞: 假如剪切板中没有东西, 粘贴什么? 如果剪切板中不是图片, 怎么粘贴?

    其实我们只用 TClipboard.HasFormat 函数判断一下剪切板中是不是图片就行了.

    第二版代码:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Panel1: TPanel;
        Image1: TImage;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    uses Clipbrd;
    
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Image1.Left := 0;
      Image1.Top := 0;
      Panel1.AutoSize := True;
      Image1.AutoSize := True;
      Image1.Picture.LoadFromFile('c:\temp\test.bmp');
      TButton(Sender).Caption := '导入';
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      {如果 Image1 还没有图片, 就别复制了, 退出吧}
      if Image1.Picture = nil then Exit;
    
      Clipboard.Assign(Image1.Picture);
      TButton(Sender).Caption := '复制';
    end;
    
    procedure TForm1.Button3Click(Sender: TObject);
    var
      bit: TBitmap;
      x,y: Integer;
    begin
      {如果当前剪切板中的东西不是图片, 就退出}
      if not Clipboard.HasFormat(CF_BITMAP) then Exit;
    
      bit := TBitmap.Create;
      bit.Assign(Clipboard);
      x := Panel1.Width + Panel1.Left * 2;
      y := Panel1.Top;
      Canvas.Draw(x, y, bit);
      bit.Free;
      TButton(Sender).Caption := '粘贴';
    end;
    
    end.
    
    现在有出了新的问题: CF_BITMAP 常量表示图片, 其他格式怎么表示? 有多少格式可以用于剪切板?

  • 相关阅读:
    屏蔽/捕获并输出错误
    物理机转Hyper-V虚拟机
    Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
    IDRAC 固件升级操:
    网卡启动安装dell服务器OS
    服务器指定网卡进行备份数据避免影响业务口
    【转载】用户通过WEB方式更改AD域帐户密码
    Windows运维之Windows8.1-KB2999226-x64安装提示 此更新不适用你的计算机
    Exchange 退信550 5.1.11 RESOLVER.ADR.ExRecipNotFound
    优酷kux视频转MP4
  • 原文地址:https://www.cnblogs.com/del/p/1136872.html
Copyright © 2011-2022 走看看