Accessing the clipboard in a Firemonkey application

  

It just took me quite a while to find this information so I’ll put it here for future reference.
A Firemonkey application can not just access the clipboard, it needs to ask the platform whether it actually has one, then get the service interface and use that.

uses
Fmx.Platform;

[…]
function TryGetClipboardService(out _clp: IFMXClipboardService): boolean;
begin
Result := TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService);
if Result then
_clp := IFMXClipboardService(TPlatformServices.Current.GetPlatformService(IFMXClipboardService));
end;

procedure StringToClipboard(const _s: string);
var
clp: IFMXClipboardService;
begin
if TryGetClipboardService(clp) then
clp.SetClipboard(_s);
end;

procedure StringFromClipboard(out _s: string);
var
clp: IFMXClipboardService;
Value: TValue;
s: string;
begin
if TryGetClipboardService(clp) then begin
Value := clp.GetClipboard;
if not Value.TryAsType(_s) then
_s := ”;
end;
end;

(This is for Delphi XE7.)
TEdit and TMemo have got a CopyToClipboard and PasteFromClipboard method. (Which begs the question: Why not implement a generic function for reading and writing a string rather than methods for two controls? I was tempted to use the Visual Basic solution: Put a hidden control on the form and use its methods. Bad memories awake …)

Comments are closed.