文档章节

使用剪切板[5]: SetAsHandle、GetAsHandle - 自定义格式

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 356
阅读 5
收藏 0
如果要在剪切板中存放自己的格式, 需要用到 SetAsHandle、GetAsHandle 两个方法.

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

GetAsHandle(用于剪切板的格式ID) 方法返回的是数据所在内存的句柄.

通过内存句柄获取获取内存地址, 还要用到 GlobalLock 函数.

本例自定义了结构 TMyRec, 并指定了对应的剪切板格式 CF_MY.
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Clipbrd;

Type
  TMyRec = record
    name: string[8];
    age : Byte;
  end;

var
  CF_MY: Word;

procedure TForm1.FormCreate(Sender: TObject);
begin
  CF_MY := RegisterClipboardFormat('My Format');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  PRec: ^TMyRec;
  Data: THandle;
begin
  Data := GlobalAlloc(GMEM_DDESHARE, SizeOf(TMyRec));
  PRec := GlobalLock(Data);

  PRec.name := '张三';
  PRec.age  := 99;

  GlobalUnlock(Data);
  Clipboard.SetAsHandle(CF_MY, Data);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  PRec: ^TMyRec;
  Data: THandle;
begin
  if not Clipboard.HasFormat(CF_MY) then Exit;
  Data := Clipboard.GetAsHandle(CF_MY);
  PRec := GlobalLock(Data);

  ShowMessageFmt('%s %d 岁', [PRec.name, PRec.age]); {张三 99 岁}
  GlobalUnlock(Data);
end;

end.

 
 
 
 
 

 

 

  
//这个例子忘了 GlobalFree 了.

本文转载自:http://www.cnblogs.com/del/archive/2008/04/04/1137835.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
CoLT

通过使用 CoLT,复制超链接文字或者同时复制超链接及其文字(以你指定的格式)将变得更为容易。 CoLT 在浏览器的右键菜单中增加了两个菜单项,只有右键点击一个超链接的时候才会看到。“复制...

匿名
2008/09/19
756
0
Navi.Soft31.开发工具(含下载地址)

1系统简介 1.1功能简述 在软件开发过程中,我们需要经常对字符串、文件、数据库操作。有时需要浏览Json格式串,有时需要浏览Xml格式串,有时需要读取txt或excel文件,有时需要对数据库访问。本...

小特工作室
2017/11/02
0
0
Windows剪切板扩展程序--Ditto

Ditto 是一个标准Windows剪切板的扩展程序,它将剪切板中的每一项都保存起来,你可以访问已保存的任何数据,Ditto 允许你放置各种格式的内容到剪切板,例如文本、图片、Html 以及自定义格式。...

匿名
2009/06/17
1K
0
frogchou/FiwanQRCode

#FiwanQRCode ####飞网QR二维码生成器,用户可以通过这个工具生成QR码。面向开发人员,和经常接触使用各种二维码的人,这个工具能帮助开发二维码的人员生成各种格式二维码,包括png,jpg,b...

frogchou
2017/04/26
0
0
mfc剪切板总结

HANDLE SetClipboardData( UINT uFormat, HANDLE hMem); Parameters 格式: [in] Unsigned integer that specifies a clipboard format. This parameter can be a registered format or any ......

长平狐
2012/10/08
308
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌,请使劲儿戳(这里) 现在...

小小编辑
34分钟前
11
4
test

//// main.c// Test//// Created by 吕颖 on 2019/1/16.// Copyright © 2019年 carmen. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <t......

carmen-ly
今天
1
0
Android webview热门组件agentweb:4.0.2无法自适应的问题

Android webview热门组件agentweb:4.0.2无法自适应的问题 //设置自适应屏幕,两者合用mAgentWeb.getAgentWebSettings().getWebSettings().setUseWideViewPort(true); //将图片调整到适合w...

Gemini-Lin
今天
5
0
如何维护一个自己的 golang doc 服务

本文内容是如何维护一个golang 在线的doc 服务。 1 什么是godoc ? godoc 是 golang 官方提供的文档生成工具, 2 为什么要有godoc ? 我们经常遇到一个问题,就是代码和文档不一致,线上代码版...

鼎铭
今天
5
0
js中的对象创建的模式以及继承模式

对象创建模式: 工厂模式 构造函数模式 原型模式 继承模式 原型式继承 寄生式继承 构造函数 原型式和构造函数的组合式(缺点:运行两次超类类函数,积累函数的属性被挂载在原型对象上和实例对...

莫西摩西
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部