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 …)