VCL 中如何使用剪贴板咱就不说了,FMX 做为一个新的框架,提供了跨平台的剪贴板支持。FMX 对剪贴板的支持来自两个接口:

  • IFMXClipboardService:位于 FMX.Platform.pas 中

     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      IFMXClipboardService = interface(IInterface)
        ['{CC9F70B3-E5AE-4E01-A6FB-E3FC54F5C54E}']
        /// <summary>
        ///   Gets current clipboard value
        /// </summary>
        function GetClipboard: TValue;
        /// <summary>
        ///   Sets new clipboard value
        /// </summary>
        procedure SetClipboard(Value: TValue);
      end;
  • IFMXExtendedClipboardService:位于 FMX.Clipboard.pas 中
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      IFMXExtendedClipboardService = interface(IFMXClipboardService)
        ['{E96E4776-8234-49F9-B15F-301074E23F70}']
        function HasText: Boolean;
        function GetText: string;
        procedure SetText(const Value: string);
        function HasImage: Boolean;
        function GetImage: TBitmapSurface;
        procedure SetImage(const Value: TBitmapSurface);
        procedure RegisterCustomFormat(const AFormatName: string);
        function IsCustomFormatRegistered(const AFormatName: string): Boolean;
        procedure UnregisterCustomFormat(const AFormatName: string);
        function HasCustomFormat(const AFormatName: string): Boolean;
        function GetCustomFormat(const AFormatName: string; const AStream: TStream): Boolean;
        procedure SetCustomFormat(const AFormatName: string; const AStream: TStream);
      end;

很明显,第二种更符合VCL中TClipboard的使用习惯。而且如果要使用自定义格式的内容,则必需使用第二种格式,第一种格式的支持情况如下(以10.2 为准,未来版本请自行查看):

  1. Windows 平台(FMX.Clipboard.Win.pas):文本、位图
  2. Android 平台(FMX.Clipboard.Android.pas):文本
  3. iOS 平台(FMX.Clipboard.iOS.pas):文本、位图
  4. OSX 平台(FMX.Clipboard.Mac.pas):文本、位图

注意一下,支持位图的平台,实际上 TValue 支持的是 TBitmapSurface,当然设置值时也支持 TBitmap ,但 GetClipboard 返回的就只是 TBitmapSurface 类型的对象了。

好了,回归正转,说一下基本的使用步骤:

  1. 引用 fmx.platform 单元,如果使用第二个接口,同时使用 fmx.clipboard 单元。
  2. 用  TPlatformServices.Current.SupportsPlatformService 函数来获取剪贴板服务接口实例。
  3. 调用获取的接口实例的相关函数来执行相关的功能。

一个简单的示例:

Delphi/Pascal
 
1
2
3
4
5
6
7
8
9
procedure TForm1.Button1Click(Sender: TObject);
var
  AClipboard:IFMXClipboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService,AClipboard) then
    begin
      AClipboard.SetClipboard('Hello,world from delphi');
    end;
end;

至于其它的几个接口,大家看相关接口的帮助就可以了。

delphi xe10 中使用剪贴板(跨平台)的更多相关文章

  1. [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴

    [FMX]在你的跨平台应用中使用剪贴板进行复制粘贴 2017-08-10 • Android.C++ Builder.Delphi.iOS.教程 • 暂无评论 • swish •浏览 516 次 VC ...

  2. [原创]Delphi XE10 dxLayoutControl 控件应用指南

    DevExpress VCL套件是一套非常强大的界面控件,可惜关于Delphi开发方面的说明太少,有些控件使用起来一头雾水,不知从何下手.本节详细介绍在Delphi Xe10 Seattle中如何利用 ...

  3. 【转】Delphi XE10 Android Splash设备自适应和沉浸式状态条

    再次提笔写博客,已经相隔7年,原来的CSDN账号需要手机验证,而我的手机又捆绑到这个账号了,就用新账号吧,不想折腾了. 原账号的帖子,有研究DICOM3.0的可以看下:http://blog.csdn ...

  4. Delphi XE10 dxLayoutControl 控件应用指南

    https://www.cnblogs.com/Bonny.Wong/p/7440288.html DevExpress VCL套件是一套非常强大的界面控件,可惜关于Delphi开发方面的说明太少,有 ...

  5. Delphi XE10.1 引用计数

      以往的Delphi版本,不支持接口的Weak,和UnSafe的引用,支持对象的Weak, UnSafe,而且仅在Android和Ios平台上支持. 现在Delphi XE10.1 Berlin终于 ...

  6. 运行Delphi XE10的MongoDB例程,测试Delphi插入记录性能

    Delphi XE10支持MongoDB的数据库,提供了个例子restaurants可批量导入数据. 本文对比Delphi例子与MongoDB自带的mongoimport导入批量数据的性能. 步骤: ...

  7. Delphi XE10.1 引用计数(Delphi XE10.1 Berlin终于增加了对接口的Weak, UnSafe的支持)

    以往的Delphi版本,不支持接口的Weak,和UnSafe的引用,支持对象的Weak, UnSafe,而且仅在Android和Ios平台上支持. 现在Delphi XE10.1 Berlin终于增加 ...

  8. delphi项目中的modelsupport文件夹

    delphi项目中的modelsupport文件夹 今天写着写着突然发现多了一个这个文件夹..苦思不得其解  看着又难受  删了又重建 终于找到了  存此备查;Tools--option--toget ...

  9. 咏南中间件+开发框架支持最新的DELPHI XE10.1(BERLIN) UPDATE1

    咏南中间件+开发框架支持最新的DELPHI XE10.1(BERLIN) UPDATE1 购买提供:中间件源码,价格十分优惠!有意者请向本人索取演示程序! 附带福利(赠送): CS开发框架源码BS开发 ...

随机推荐

  1. 生产者消费者模式-->线程

    #_author:来童星#date:2019/12/17#生产者消费者模式-->线程from queue import Queueimport random,time,threading#生产者 ...

  2. Windows NtQueryInformationProcess()

    { https://www.orcode.com/article/Processes_20126324.html } { 或代码 文章 编程通用 线程,进程及IPC 与NtQueryInformati ...

  3. java基础方法笔记

    Java环境 1.编译 javac HelloWorld.java 2.运行 java HelloWorld 3.执行class文件 java -classpath C:\java\myclasses ...

  4. Gym 100431E Word Cover 题解:KMP上跑dp

    题意: 给你一个串,问你他的每个前缀的最小重复单元,其中单元是可以重叠的,最后按顺序输出即可.比如样例中abaabaa的最小重复单元为abaa,所以相应输出为4. 样例: input : abaaba ...

  5. BZOJ 2005: [Noi2010]能量采集(容斥+数论)

    传送门 解题思路 首先题目要求的其实就是\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m [(gcd(i,j)-1)*2+1)]\),然后变形可得\(-n*m+2\s ...

  6. BZOJ 4698: Sdoi2008 Sandy的卡片(后缀数组+差分+二分答案)

    传送门 解题思路 看到一个子串加一个数字到另一个子串,自然可以想到差分.然后要把所有串都拼起来,求出\(height\)数组后可以二分答案来做,每次二分一个答案后统计一下连续的\(height> ...

  7. (转)XMPP协议原理

    本文介绍XMPP协议原理及相关信息. XMPP协议简介   XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM ...

  8. CF B. Planning The Expedition

    题意:有n个人和m个食物,给出每一个食物的种类,每个人只会吃一种食物,每个人一天吃一个食物,问这n个人可以撑多少天. 分析:因为题目给出的天数范围比较小所以我们可以从1到100天开始枚举,我们判断如果 ...

  9. php开发面试题---1、php常用面试题一(PHP有哪些特性)

    php开发面试题---1.php常用面试题一(PHP有哪些特性) 一.总结 一句话总结: ①.混合语法:php独特混合了C,Java,Prel以及PHP自创的语法. ②.为动态网页而生:可以比CGI或 ...

  10. JAVA调用R脚本 windwos路径下

    RConnection c = new RConnection();// REXP x = c.eval("source('D:\\\\jiaoben\\\\RJava_test.R',en ...