Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#23

AW: Zwischenablage Zugriff verweigert

  Alt 19. Aug 2022, 07:10
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 ?

Geändert von Rollo62 (19. Aug 2022 um 07:32 Uhr)
  Mit Zitat antworten Zitat