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