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から画像をやり取りすることも出来るみたいです。詳しくは下記、エンバガデロ公式のブログに書いてありました!

参考🙇

コメントを残す

メールアドレスが公開されることはありませんし、空欄で大丈夫です。っていうかコメント以外空欄で良いです。気軽にコメントして下さい。
Email won't be published. Or you can leave it blank. I mean you can leave everything blank but comment. Feel free to leave a comment, thanks.