Basis Klembordbewerkingen (knippen / kopiëren / plakken) in Delphi

Het Windows-klembord vertegenwoordigt de container voor alle tekst of afbeeldingen die worden geknipt, gekopieerd of geplakt van of naar een toepassing. Dit artikel laat zien hoe u het TClipboard-object kunt gebruiken om functies voor knippen, kopiëren en plakken in uw Delphi-toepassing te implementeren.

Klembord in het algemeen

Zoals u waarschijnlijk weet, kan het klembord slechts één stuk van hetzelfde soort gegevens voor knippen, kopiëren en plakken tegelijk bevatten. Als we nieuwe informatie in hetzelfde formaat naar het Klembord verzenden, wissen we wat er eerder was, maar de inhoud van het Klembord blijft bij het Klembord, zelfs nadat we die inhoud in een ander programma hebben geplakt.

TClipboard

Om het Windows-klembord in onze applicaties te gebruiken, moeten we de ClipBrd-eenheid op de gebruiksclausule van het project, behalve wanneer we het knippen, kopiëren en plakken beperken tot de componenten die al ingebouwde ondersteuning voor Klembord-methoden hebben. Die componenten zijn TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage en TDBMemo.

De ClipBrd-eenheid vertegenwoordigt automatisch een TClipboard-object met de naam Clipboard. We zullen het gebruiken CutToClipboard, Kopieer naar klembord, PasteFromClipboard, Doorzichtig en HasFormat methoden voor het omgaan met klembordbewerkingen en tekst / grafische manipulatie.

Tekst verzenden en ophalen

Om wat tekst naar het Klembord te sturen, wordt de eigenschap AsText van het Klembord-object gebruikt. Als we bijvoorbeeld de tekenreeksinformatie in de variabele SomeStringData naar het klembord willen verzenden (ongeacht welke tekst er was), gebruiken we de volgende code:

 toepassingen ClipBrd; ...  Clipboard.AsText: = SomeStringData_Variable; 

We gebruiken de tekstinformatie van het klembord

 toepassingen ClipBrd; ...  SomeStringData_Variable: = Clipboard.AsText; 

Opmerking: als we alleen de tekst van bijvoorbeeld het onderdeel Bewerken naar het Klembord willen kopiëren, hoeven we de ClipBrd-eenheid niet toe te voegen aan de gebruiksclausule. De CopyToClipboard-methode van TEdit kopieert de geselecteerde tekst in het bewerkingsbesturingselement naar het Klembord in de indeling CF_TEXT.

 procedure TForm1.Button2Click (Sender: TObject); beginnen    // de volgende regel selecteert // ALLE tekst in het bewerkingsbesturingselement Edit1.SelectAll;    Edit1.CopyToClipboard; einde; 

Klembordafbeeldingen

Om grafische afbeeldingen van het Klembord op te halen, moet Delphi weten welk type afbeelding daar is opgeslagen. Om afbeeldingen naar het klembord over te brengen, moet de toepassing het Klembord op dezelfde manier vertellen welk type afbeeldingen het verzendt. Enkele van de mogelijke waarden van de parameter Format volgen; er zijn veel meer klembord-indelingen beschikbaar gesteld door Windows.

  • CF_TEXT - Tekst waarvan elke regel eindigt op een CR-LF-combinatie.
  • CF_BITMAP - Een Windows-bitmapafbeelding.
  • CF_METAFILEPICT - Een Windows-metabestandafbeelding.
  • CF_PICTURE - Een object van het type TPicture.
  • CF_OBJECT - Elk blijvend object.

De HasFormat-methode retourneert True als de afbeelding op het Klembord de juiste indeling heeft:

 als Clipboard.HasFormat (CF_METAFILEPICT) vervolgens ShowMessage ('Clipboard has metafile'); 

Gebruik de methode Toewijzen om een ​​afbeelding naar het klembord te verzenden (toewijzen). De volgende code kopieert bijvoorbeeld de bitmap van een bitmapobject met de naam MyBitmap naar het klembord:

 Clipboard.Assign (MyBitmap); 

Over het algemeen is MyBitmap een object van het type TGraphics, TBitmap, TMetafile of TPicture.

Om een ​​afbeelding van het klembord op te halen, moeten we: de indeling van de huidige inhoud van het klembord verifiëren en de methode Assign van het doelobject gebruiken:

 plaats één knop en één beeldbesturing op formulier1 Druk voordat u deze code uitvoert op Alt-PrintScreen toetscombinatie toepassingen clipbrd; ... procedure TForm1.Button1Click (Sender: TObject); beginnen als Clipboard.HasFormat (CF_BITMAP) vervolgens Image1.Picture.Bitmap.Assign (Klembord); einde; 

Meer klembordcontrole

Klembord slaat informatie op in meerdere formaten zodat we gegevens kunnen overdragen tussen applicaties met behulp van verschillende formaten. Bij het lezen van informatie van het klembord met de TClipboard-klasse van Delphi zijn we beperkt tot standaard klembordformaten: tekst, afbeeldingen en metabestanden.

Stel dat u tussen twee verschillende Delphi-toepassingen werkt; hoe zou u het aangepaste klembordformaat definiëren om gegevens tussen die twee programma's te verzenden en ontvangen? Laten we zeggen dat u probeert een menu-item Plakken te coderen. U wilt dat het wordt uitgeschakeld als er geen tekst op het klembord staat (bijvoorbeeld).

Aangezien het hele proces met het klembord achter de schermen plaatsvindt, is er geen methode van TClipboard-klasse die u zal informeren wanneer er een wijziging in de inhoud van het klembord heeft plaatsgevonden. Het idee is om het notificatiesysteem van het klembord aan te sluiten, zodat je toegang hebt tot en kunt reageren op gebeurtenissen wanneer het klembord verandert.

Om van meer flexibiliteit en functionaliteit te genieten, is het omgaan met meldingen van klembordwijzigingen en aangepaste klembordformaten - luisteren naar het Klembord - noodzakelijk.