Ich beobachte ein seltsames Phänomen: Eine App, die unter Delphi 11 auf die Zwischenablage, die außerhalb der App erstellt wurde, zugreift, kann dies unter Delphi 12 nicht mehr.
An der Android Version liegt es nicht, denn es ist dieselbe Hardware.
Hier der Code, der unter D11 korrekt auf die ZA zugreift:
Code:
var
clp: IFMXClipboardService;
Value: TValue; // benötigt System.Rtti
begin
if TryGetClipboardService(clp) then
begin
Value := clp.GetClipboard;
if Value.IsEmpty = false then
begin
if Value.IsType<string> = true then
Edit1.Text := Value.ToString
end
end
end;
Ich habe es auch mit dem Sample Demo Code aus Delphi 12 ("CopyPasteDemo") probiert.
Darin wird dieser Code für den Zugriff auf die Zwischenablage verwendet:
Code:
procedure TForm3.Button1Click(Sender: TObject);
var
Svc: IFMXClipboardService;
Value: TValue;
Bitmap: TBitmap;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXClipboardService, Svc) then
begin
Value := Svc.GetClipboard;
if not Value.IsEmpty then
begin
if Value.IsType<string> then
begin
PasteLabel.Text := Value.ToString;
PasteImage.Bitmap := nil;
end
else if Value.IsType<TBitmapSurface> then
try
PasteLabel.Text := string.Empty;
Bitmap := TBitmap.Create;
try
Bitmap.Assign(Value.AsType<TBitmapSurface>);
PasteImage.Bitmap := Bitmap;
finally
Bitmap.Free;
end;
finally
Value.AsType<TBitmapSurface>.Free;
end;
end;
end;
end;
Auch das Demo kann zwar unter Windows mit dem "Paste" Button auf Text der Zwischenablage zugreifen, die nicht in der App erstellt wurde.
Unter Android ist das aber nicht möglich, der Paste Button zeigt dann nur Text der Zwischenablage, der zuvor im Register "Copy" erstellt wurde.
Die Verwendung von IFMX
ExtendedClipboardService, wie in diesem Artikel beschrieben, war auch nicht erfolgreich:
https://lecturepress.com/academy/obj...ard-in-delphi/
Ist das ein Bug oder muss der Zugriff auf die allgemeine ZA irgendwo autorisiert werden? (Die Berechtigung "Externen Speicher lesen" ist aktiviert)