Vielleicht lohnt es mal zu schauen wo die Unterschiede
VCL zu FMX sind:
FMX:
Delphi-Quellcode:
function TWindowsClipboardService.GetText: string;
var
Data: THandle;
TextData: string;
begin
Result := string.Empty;
OpenClipboard(0);
try
Data := GetClipboardData(CF_UNICODETEXT);
if Data <> 0 then
begin
TextData := PChar(GlobalLock(Data));
try
Result := TextData;
finally
GlobalUnlock(Data);
end;
end;
finally
CloseClipboard;
end;
end;
VCL:
Delphi-Quellcode:
procedure TClipboard.Open;
begin
if FOpenRefCount = 0 then
begin
FClipboardWindow := Application.Handle;
if FClipboardWindow = 0 then
begin
FClipboardWindow := AllocateHWnd(MainWndProc);
FAllocated := True;
end;
if not OpenClipboard(FClipboardWindow) then
raise EClipboardException.CreateResFmt({$IFNDEF CLR}@{$ENDIF}SCannotOpenClipboard,
[SysErrorMessage(GetLastError)]);
FEmptied := False;
end;
Inc(FOpenRefCount);
end;
function TClipboard.GetAsText: string;
var
Data: THandle;
begin
Open;
Data := GetClipboardData(CTextFormat);
try
if Data <> 0 then
{$IF DEFINED(CLR)}
Result := Marshal.PtrToStringUni(GlobalLock(Data))
{$ELSE}
Result := PChar(GlobalLock(Data))
{$ENDIF}
else
Result := '';
finally
if Data <> 0 then
GlobalUnlock(Data);
Close;
end;
end;
Mir fällt da auf das FMX einfach immer mit
Handle OpenClipboard(0), während
VCL ein
Handle übergibt OpenClipboard(FClipboardWindow);
Könnte das einen Unterschied bei den Exceptions machen ?