Delphi中剪切板的使用[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 函数判断一下剪切板中是不是图片就行了.

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索图片
, panel
, image
, sender
, procedure
, 剪切
图片剪切
assign、object.assign、freemarker assign、smarty assign、thinkphp assign,以便于您获取更多的相关知识。

时间: 2025-01-17 21:21:27

Delphi中剪切板的使用[2]: Assign、HasFormat的相关文章

Delphi中剪切板的使用[3]: SetComponent、GetComponent

本例演示把一个组件(TEdit)放入剪切板, 又取出(放到一个 TPanel 上)的过程. 放入剪切板的方法是个过程: SetComponent(要放入的组件); 取出的方法是个函数: GetComponent(指定属主, 指定父窗口): 函数返回取出的组件的句柄. 取出以前, 最好要判断一下当前剪切板中是不是个组件: HasFormat(CF_COMPONENT); 取出以前还必须要注册要取出的组件类, 譬如: RegisterClasses([TEdit]); 准备工作: 在窗体上添加 TE

Delphi中剪切板的使用[1]: AsText、SetTextBuf、GetTextBuf

剪切板类 TClipboard 定义在 Clipbrd 单元, 使用前先要 uses Clipbrd; uses Clipbrd; procedure TForm1.Button1Click(Sender: TObject); var clip: TClipboard; begin clip := TClipboard.Create; {建立} clip.AsText := Self.Text; {把窗体标题放入剪切板} ShowMessage(clip.AsText); {从剪切板读取, 返回

Delphi中剪切板的使用[5]:SetAsHandle、GetAsHandle

如果要在剪切板中存放自己的格式, 需要用到 SetAsHandle.GetAsHandle 两 个方法. SetAsHandle(用于剪切板的格式ID, 数据的内存句柄); 看这个方法的两个参 数都有点麻烦. 自定义剪切板格式要用 RegisterClipboardFormat 函数; 第二个参数是内存 句柄而不是内存地址, 能分配内存并返回句柄的函数暂时我只知道 GlobalAlloc .GlobalReAlloc 两个函数, 使用它们分配用于剪切板的内存时还须使用 GMEM_DDESHARE

Delphi中剪切板的使用[4]:如果把子控件一起复制

如果连同子控件一起复制到剪切板, 需要定义一个新类型. 譬如在一个 TPanel 中包含一个 TEdit; 在复制 TPanel 时, 若要连同 TEdit 一起复制, 需要重新从 TPanel 中继承出一个类来(譬如是 TMyPanel), 把 TEdit 包含在新的类中. 运行效果图: TMyPanel 类的单元: unit MyPanel; interface uses Classes, StdCtrls, ExtCtrls; type TMyPanel = class(TPanel) E

win7电脑中剪切板的信息无法粘贴怎么办?

  其实在win7旗舰版中,除了咱们经常使用的快捷键复制粘贴之外,还有一个功能是可以帮助咱们暂存缓存数据的,那便是剪切板了,很多时候,咱们都可以通过剪切板将需要的信息直接粘贴过来,但是最近有朋友发现了一个奇怪的现象,就是剪贴板中的信息突然无法粘贴出来了,这是怎么回事呢?下面,就和小编一起来看看解决问题的办法吧! 第一种方法:其实很多时候,因为咱们在电脑中新建了登录账户,导致电脑中的某些程序被误设置为在该用户账户情况下方可使用,而一旦咱们没有用该账户登录时,这些程序的某些功能就无法使用了,剪贴板也

win7中的剪切板无法使用了怎么办?

  咱们日常操作中经常会使用到的一个快捷键便是复制粘贴了,这个键非常的好用,特别是对于工作中的一些操作来说,更是相当的实用.那么大家在使用win7 64位旗舰版下载 iso操作的时候有没有遇到过剪切板无法使用的情况呢?不但如此,很多朋友发现一个问题,剪切板无法使用,即便是重启电脑之后,都是无法解决的,那么到底要如何才可以解决这个问题?下面几个方法,与大家一起分享一下吧! 第一种方法:这也许是兼容造成的问题,也就是说,win7旗舰版中有一些程序驱动或者是软件服务与咱们的系统存在有冲突的现象,这个时

Delphi中把窗体客户区图像保存到文件或剪切板

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedu

Windows 8开发入门(十四) windows 8中粘贴板(剪切板)的使用

在Windows 8中我们的粘贴板分别保存4种信息:文本.图片.网页.文件.在本文中我们将分别复制和粘 贴这4种元素,当然你也可以在外部复制这4种元素,然后在程序中粘贴出来. DataPackage:包含用户 希望与另一个应用程序交换的数据 //设置一个中转变量保存用户的值 DataPackage dp = new DataPackage(); 第一:我们来看看复制和粘贴文本的后台处理代码 . //<!--复制文本--> private void CopyText_Click(object s

C#操作Clipboard读取剪切板中数据实例详解

  本文实例讲述了C#操作Clipboard读取剪切板中数据的方法.分享给大家供大家参考.具体分析如下: 1 自定义一个类,并且保证它的可序列化的:实现ISerializable接口;或者用[Serializable]标记(如果有父类,则父类也需要被标记;可以[NonSerialized()]标记类中不想被序列化的字段) 2 注册自定义数据格式:调用静态方法DataFormats.GetFormat() 3 保存数据到clipboard:利用IdataObject接口,创建一个数据对象,并设置数