Het Windows-klembord vertegenwoordigt de container voor alle tekst of afbeeldingen die uit of naar een toepassing worden geknipt, gekopieerd of geplakt. Dit artikel laat zien hoe u het TClipboard-object gebruikt om functies voor knippen en kopiëren in uw Delphi-toepassing te implementeren.
Klembord in het algemeen
Zoals u waarschijnlijk weet, kan het klembord slechts één stuk van hetzelfde soort gegevens bevatten voor knippen, kopiëren en plakken tegelijk. Als we nieuwe informatie in hetzelfde formaat naar het klembord sturen, 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 toevoegen ClipBrd-eenheid aan de gebruiksclausule van het project, behalve wanneer we knippen, kopiëren en plakken beperken tot de componenten die al ingebouwde ondersteuning hebben voor klembordmethoden. Die componenten zijn TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage en TDBMemo.
De ClipBrd-eenheid vertegenwoordigt automatisch een TClipboard-object met de naam Clipboard. We gebruiken de CutToClipboard, Kopieer naar klembord, PlakVanClipboard, Doorzichtig en HasFormat methoden om om te gaan met klembordbewerkingen en tekst / grafische manipulatie.
Verzend en ontvang tekst
Om wat tekst naar het klembord te sturen, wordt de eigenschap AsText van het klembordobject gebruikt. Als we bijvoorbeeld de draad informatie in de variabele SomeStringData naar het klembord (alle tekst die daar was wegvagen), gebruiken we de volgende code:
toepassingen ClipBrd; ...
Klembord. AsText: = SomeStringData_Variable;
Om de tekstinformatie op te halen van het Klembord gebruiken we
toepassingen ClipBrd; ...
SomeStringData_Variable: = Klembord. AsText;
Opmerking: als we alleen de tekst willen kopiëren van, laten we zeggen, de component Bewerken naar het klembord, hoeven we de ClipBrd-eenheid niet op te nemen in de gebruiksclausule. De CopyToClipboard-methode van TEdit kopieert de geselecteerde tekst in het bewerkingsbesturingselement naar het klembord in het CF_TEXT-formaat.
procedure TForm1.Button2Click (Afzender: 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. Evenzo moet de toepassing, om afbeeldingen naar het klembord over te brengen, het klembord vertellen welk type afbeeldingen het verzendt. Enkele van de mogelijke waarden van de Format-parameter volgen; er zijn veel meer klembordindelingen die door Windows worden geleverd.
- CF_TEXT - Tekst waarbij elke regel eindigt op een CR-LF combinatie.
- CF_BITMAP - Een Windows-bitmapafbeelding.
- CF_METAFILEPICT - Een metafile-afbeelding van Windows.
- CF_PICTURE - Een object van het type TPicture.
- CF_OBJECT - Elk hardnekkig object.
De HasFormat-methode retourneert True als de afbeelding op het klembord de juiste indeling heeft:
als Klembord. HasFormat (CF_METAFILEPICT) vervolgens ShowMessage ('Clipboard has metafile');
Gebruik de methode Toewijzen om een afbeelding naar het klembord te verzenden (toe te wijzen). De volgende code kopieert bijvoorbeeld de bitmap van een bitmapobject met de naam MyBitmap naar het klembord:
Klembord. Toewijzen (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: het formaat van de huidige inhoud van het klembord verifiëren en de toewijzingsmethode van het doelobject gebruiken:
{plaats één knop en één afbeeldingsbesturingselement op formulier1} {Druk voordat u deze code uitvoert op Alt-PrintScreen-toetscombinatie}toepassingen clipbrd;... procedure TForm1.Button1Click (Afzender: TObject); beginnenals Klembord. HasFormat (CF_BITMAP) vervolgens Image1.Foto. Bitmap. Toewijzen (Klembord); einde;
Meer klembordbesturing
Klembord slaat informatie op in meerdere formaten, zodat we gegevens tussen applicaties kunnen overdragen met verschillende formaten. Bij het lezen van informatie van het klembord met Delphi's TClipboard-klasse, zijn we beperkt tot standaard klembordformaten: tekst, afbeeldingen en metabestanden.
Stel dat u werkt tussen twee verschillende Delphi-applicaties; hoe zou u een aangepast klembordformaat definiëren om gegevens tussen deze twee programma's te verzenden en te ontvangen? Laten we voor verkenning zeggen dat u een pasta probeert te coderen menu onderdeel. U wilt dat het wordt uitgeschakeld als er geen tekst op het klembord staat (als een instantie).
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 verandering in de inhoud van het klembord heeft plaatsgevonden. Het idee is om het klembordmeldingssysteem aan te sluiten, zodat je toegang hebt tot en kunt reageren op gebeurtenissen wanneer het klembord verandert.
Om te genieten van meer flexibiliteit en functionaliteit, is het nodig om meldingen over klembordwijzigingen en aangepaste klembordformaten - luisteren naar het klembord - te behandelen.