Sign in Join
Wiki copytemporary

Revision 2 of 2, by Trev on 6-18-2019. The page as it is now.

Clipboard/de

Zurück zu den Zusätzlichen Informationen.\

Dieser Artikel beschäftigt sich mit der Windowsprogrammierung.\

=Formate der Zwischenablage=

Microsoft Formattypen der Zwischenablage

Die Microsoft Formattypen sind in der Unit Clipbrd vordefiniert.
Der Inhalt der Windows-Zwischenablage kann unter anderem folgende Formate haben:
{| class="wikitable sortable" ! Konstante !! Wert !! Beschreibung |- |CF_TEXT |1 |Unformatierter Ansi-Text (UTF-8). |- |CF_BITMAP |2 |Handle auf eine Windows Bitmap-Grafik. |- |CF_METAFILEPICT |3 |Handle auf eine Windows Metafile-Grafik. |- |CF_SYLK |4 |Handle auf einen Microsoft Symbolic-Link. |- |CF_DIF |5 |Handle auf ein Software Arts "Data Interchange Format". |- |CF_TIFF |6 |Handle auf eine Tagged-Image File Format. |- |CF_OEMTEXT |7 |Mit dem OEM-Zeichensatz formatierter Text. (Dieser Zeichensatz wird z. B. von PC-Dos und MS-Dos verwendet.) |- |CF_DIB |8 |Handle auf eine Windows Bitmap-Grafik. |- |CF_PALETTE |9 |Handle auf eine Farbpalette. |- |CF_PENDATA |10 |Wird im Zusammenhang mit den Stift-Erweiterungen von Microsoft Windows verwendet. |- |CF_RIFF |11 |Multimediadaten (Audiodateien) im Resource Interchange Datei Format (= Resource Interchange File Format). |- |CF_WAVE |12 |Audiodaten in einem der Standard-Wave-Formate wie 11 kHz oder 22 kHz PCM. |- |CF_UNICODETEXT |13 |Text im Unicode-Text-Format (UTF-16). |- |CF_ENHMETAFILE |14 |Ein Handle auf eine erweiterte Metadatei (HENHMETAFILE). |- |CF_HDROP |15 |Ein Handle auf eine Dateiliste, im Zusammenhang mit Drag-And-Drop. |- |CF_LOCALE |16 |Enthält einen numerischen Wert in dem das Gebietsschema (Sprachcode und Ländercode) hinterlegt sind. Diese Information dient dazu, die Zeichensatzcodierung im Zwischenablageformat CF_TEXT zu ermitteln. Das Betriebssystem verwendet die Codepage CF_LOCALE, um Daten aus dem Zwischenablageformat CF_TEXT implizit in das Zwischenablageformat CF_UNICODETEXT konvertieren. |- |CF_OWNERDISPLAY |128 |Owner Display Format. |- |CF_DSPTEXT |129 |Text, dessen Anzeigeformat mit einem eigenen Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST). |- |CF_DSPBITMAP |130 |Bitmap, deren Anzeigeformat mit einem eigenen Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST). |- |CF_DSPMETAFILEPICT |131 |Zwischendatei, deren Anzeigeformat mit einem eigenen Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST). |- |CF_DSPENHMETAFILE |142 |Erweiterte Zwischendatei, deren Anzeigeformat mit einem eigenen Format verbunden ist (CF_PRIVATEFIRST, CF_PRIVATELAST). |- |CF_PRIVATEFIRST |512 |Dient in der Zwischenablage dem Setzen von privaten Datenformaten. |- |CF_PRIVATELAST |767 |Dient in der Zwischenablage dem Setzen von privaten Datenformaten. |- |CF_GDIOBJFIRST |768 |Dient in der Zwischenablage dem Setzen von privaten Datenformaten. |- |CF_GDIOBJLAST |1023 |Dient in der Zwischenablage dem Setzen von privaten Datenformaten. |- |CF_PICTURE |49674 |Handle auf ein Objekt vom Datentyp TPicture. |- |CF_OBJECT |49685 |Handle auf ein beliebiges Objekt. |}
==Vordefinierte Lazarusformattypen für die Zwischenablage== Folgende Formattypen sind für das Arbeiten mit der Zwischenablage in der Unit LCLType vordefiniert:

TPredefinedClipboardFormat MIME type
pcfText text/plain
pcfBitmap image/bmp
pcfPixmap image/xpm
pcfIcon image/lcl.icon
pcfPicture image/lcl.picture
pcfMetaFilePict image/lcl.metafilepict
pcfObject application/lcl.object
pcfComponent application/lcl.component
pcfCustomData application/lcl.customdata

Arbeiten mit den Windowsformattypen

Einbinden der Unit Clipbrd

Für den Zugriff auf die Zwischenablage wird die Unit Clipbrd benötigt.\

pascal
  ...
uses
  Clipbrd, ...;
  ...

==Das Format der Zwischenablage abfragen== Im Beispiel wird abgefragt, ob der Inhalt der Zwischenablage Textformat hat.

pascal
  ...
  If Clipboard.HasFormat(CF_TEXT) then ...
  ...

==Leeren der Zwischenablage==

pascal
  ...
  Clipboard.Clear; // Leert die Zwischenablage
  ...

Arbeiten mit Texten ohne Textformatierung

Holt den Inhalt der Zwischenablage als unformatierten Text:\

pascal
  ...
Procedure subProzedur1;
var
  strPuffer: string;

begin
  ...
  strPuffer := Clipboard.AsText;
  ...
end;
  ...

Kopiert den Inhalt eines Strings in die Zwischenablage:\

pascal
  ...
procedure subProzedur2;
var
  strPuffer: string;

begin
  ...
  strPuffer := 'Hallo Welt';
  Clipboard.AsText := strPuffer;
  ...
end;
  ...

==Ein Bild aus TImage in die Zwischenablage kopieren==

pascal
  ...
uses
  Clipbrd, ...;
  ...
procedure subProzedur3;
begin
  ...
  Clipboard.Assign(Form1.Image1.Picture.Bitmap);
  ...
end;
  ...

oder

pascal
  ...
uses
  Clipbrd, ...;
  ...
procedure subProzedur4;
begin
  ...
  Form1.Image1.Picture.Bitmap.SaveToClipboardFormat(CF_BITMAP);
  ...
end;
  ...

Einen Screenshot erstellen und in die Zwischenablage kopieren

pascal
  ...
uses
  Clipbrd, Graphics, Windows, SysUtils, ...;
  ...

procedure subProzedur5;
var
  picBild: TPicture;
  hdcBildschirm: HDC;

begin

  try
    // erstellt das Objekt picBild
    picBild := TPicture.Create;

    // erstellt den Screenshot und übergibt die Adresse des Screenshots
    hdcBildschirm := GetDC(0);
    // kopiert den Inhalt ab Adresse hdcBildschirm nach picBild
    picBild.Bitmap.LoadFromDevice(hdcBildschirm);
    // Freigabe von DC
    ReleaseDC(0, hdcBildschirm);
    // kopiert den Screenshot in die Zwischenablage
    // dieser kann dann als Picture oder als Bitmap
    // aus der Zwischenablage geholt werden
    Clipboard.Assign(picBild);
  finally
    // gibt die lokale Variable picBild wieder frei
    FreeandNil(picBild);
  end;

end;
  ...

==Ein Bild aus der Zwischenablage in ein TImage kopieren==

pascal
  ...
uses
  Clipbrd, ...;
  ...
procedure subProzedur6;
begin
  ...
  // Prüft, ob sich ein Bildformat in der Zwischenablage befindet
  if (Clipboard.HasFormat(CF_BITMAP)) or (Clipboard.HasFormat(CF_PICTURE)) then
    // Ist ein Bild im vorgegebenen Format vorhanden, dann wird es geladen
    Form1.Image1.Picture.Assign(Clipboard);
  ...
end;
  ...

--Olaf 05:03, 8 July 2013 (UTC)


From the Free Pascal wiki, page "Clipboard/de", as it stood on 2019-06-18 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.