Delphi(FMX)で、クリップボードに文字列をコピー/ペーストする

?
貼り付け処理

FMXアプリケーションで、テキストのコピペ機能を実装する方法です。昔のVCLではClipboard関数でグローバルな感じのクリップボードにアクセスできましたが、FireMonkeyではiOSとかAndroidも含まれるのでひと手間必要みたいです。

コピー

TPlatformServicesを使って実行中のプラットフォーム(OS)がクリップボードをサポートしているか問い合わせて、使用可能であればクリップボードとやりとりするためのインターフェースIFMXClipboardServiceが取得できます。なんか使えるかどうか問い合わせるのって今風でかっこいいですねー。

IFMXClipboardServiceが取得できれば、あとはSetClipboardメソッドにコピーしたいテキストをstringで渡すだけ。簡単!

使用するために必要なユニットはFMX.Platformのようです。それからクリップボードとやり取りするデータはTValueという型を使うみたいなので、そのためのSystem.Rttiも必要でした。

uses
  ...FMX.Platform, System.Rtti;
var
  Clipboard: IFMXClipboardService;
  CopyText: string;
begin
  CopyText := 'クリップボードにコピーする文字列';
  TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Clipboard) then
  begin
    Clipboard.SetClipboard(CopyText);
  end;
end;

貼り付け

クリップボードから取得(貼り付ける)ときは値の有無とか型を確認する必要があるみたいですねー。

var
  Clipboard: IFMXClipboardService;
  Value: TValue;
  TextFromClipboard: string;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Clipboard) then
  begin
    Value := Clipboard.GetClipboard;
    if (not Value.IsEmpty) and Value.IsType<string> then
    begin
      TextFromClipboard := Value.ToString;
    end;
  end;
end;

ほとんど同じ方法でTBitmapから画像をやり取りすることも出来るみたいです。詳しくは下記、エンバガデロ公式のブログに書いてありました!

参考🙇

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください