Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Clipboard und Rich Text Format

  Alt 3. Feb 2010, 03:25
Hallo,

ich möchte feststellen, ob sich in der Zwischenablage das Rich Text Format befindet. Leider scheint es keine vor-definierte Konstante für das Clipboard Rich Text Format zu geben (wie etwa CF_TEXT oder CF_BITMAP). Deshalb habe ich einen Text aus OO Writer in die Zwischenablage kopiert, und dann den Clipboard Explorer von shmia verwendet, um mir den Integer-Wert für das Clipboard Rich Text Format anzeigen zu lassen:



Leider musste ich dann feststellen, dass an einem anderen Tag ein anderer Wert für das Clipboard Rich Text Format angezeigt wurde, nämlich: 49280. Der Wert für das Clipboard Rich Text Format scheint also keine Konstante zu sein, sondern ist womöglich davon abhängig, welches Programm etwas im Rich Text Format in die Zwischenablage kopiert? Kann das jemand bestätigen?

Natürlich kann ich (bzw. mein Programm) auch damit leben, dass das Clipboard Rich Text Format keine Konstante ist, sondern jedes mal den Wert abfragen, wenn ein Clipboard-Ereignis eintritt, z.B.:

Delphi-Quellcode:
  uses Clipbrd, Windows;
    
  function My_GetClipBoardFormatName(format: Word): string;
  var
    r : Integer;
  begin
    SetLength(Result, 256);
    r := GetClipboardFormatName(format, PChar(Result), Length(Result));
    (*if r = 0 then
       RaiseLastWin32Error;*)

    SetLength(Result, r);
  end;

  procedure GetCBFormats;
  var
    f: Integer;
    AFormat: string;
  begin
    CBFormats.Clear;
    for f := 0 to Clipboard.FormatCount - 1 do
    begin
      AFormat := My_GetClipBoardFormatName(Clipboard.Formats[f]);
      if AFormat <> 'then
        CBFormats.Add(AFormat);
    end;
  end;

  function MyClipboardHasFormat(const CFormat: string): Boolean;
  var
    cf: Integer;
  begin
    Result := False;
    for cf := 0 to CBFormats.Count - 1 do
    begin
      if CompareText(CFormat, CBFormats[cf]) = 0 then
      begin
        Result := True;
        BREAK;
      end;
    end;
  end;

  // Anwendung:
  CBFormats := TStringList.Create;
  GetCBFormats;
  if MyClipboardHasFormat('Rich Text Format') then
  // ...
Aber vielleicht kennt jemand eine andere Methode (die einen Konstanten-Wert verwendet), um festzustellen, ob sich das Rich Text Format im Clipboard befindet?
  Mit Zitat antworten Zitat