Grundläggande urklippsoperationer (klipp / kopiera / klistra in) i Delphi

Windows Urklipp representerar behållaren för all text eller grafik som klipps, kopieras eller klistras in från eller till ett program. Den här artikeln visar hur du använder TClipboard-objektet för att implementera klipp-klistra-klistra in funktioner i din Delphi-applikation.

Urklipp i allmänhet

Som du förmodligen vet kan Urklipp bara innehålla en bit av samma typ av data för klippning, kopiering och klistra in samtidigt. Om vi ​​skickar ny information i samma format till Urklippet, raderar vi ut vad som fanns förut, men innehållet på Urklippet förblir hos Urklippet även efter att vi klistrar in innehållet i ett annat program.

TClipboard

För att kunna använda Windows Clipboard i våra applikationer måste vi lägga till ClipBrd-enhet till användningsklausulen för projektet, utom när vi begränsar skärning, kopiering och klistra in till de komponenter som redan har inbyggt stöd för Clipboard-metoder. Dessa komponenter är TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage och TDBMemo.

ClipBrd-enheten representerar automatiskt ett TClipboard-objekt som heter Clipboard. Vi kommer att använda CutToClipboard, CopyToClipboard, PasteFromClipboard, Klar och HasFormat metoder för att hantera Urklippsoperationer och text / grafisk manipulation.

Skicka och hämta text

För att skicka lite text till Urklipp används egenskapen AsText för Urklippsobjektet. Om vi ​​till exempel vill skicka stränginformationen i variabeln SomeStringData till Urklippet (utplåna den text som fanns där) använder vi följande kod:

 användningar ClipBrd; ...  Urklipp.AsText: = SomeStringData_Variable; 

För att hämta textinformation från Urklipp använder vi

 användningar ClipBrd; ...  SomeStringData_Variable: = Urklipp.AsText; 

Obs! Om vi ​​bara vill kopiera texten från, låt oss säga, Redigera komponent till Urklipp, behöver vi inte inkludera ClipBrd-enheten till användningsklausulen. CopyToClipboard-metoden för TEdit kopierar den valda texten i redigeringskontrollen till Urklipp i CF_TEXT-formatet.

 procedur TForm1.Button2Click (avsändare: TObject); Börja    // följande rad kommer att välja // ALL text i redigeringskontrollen Edit1.SelectAll;    Edit1.CopyToClipboard; slutet; 

Urklippsbilder

För att hämta grafiska bilder från Urklipp måste Delphi veta vilken typ av bild som lagras där. På samma sätt, för att överföra bilder till urklipp, måste applikationen berätta för Urklipp vilken typ av grafik den skickar. Några av de möjliga värdena för Format-parametern följer; det finns många fler Urklippsformat som tillhandahålls av Windows.

  • CF_TEXT - Text med varje rad som slutar med en CR-LF-kombination.
  • CF_BITMAP - En Windows-bitmappsbild.
  • CF_METAFILEPICT - En Windows-metafil-grafik.
  • CF_PICTURE - Ett objekt av typen TPicture.
  • CF_OBJECT - Alla ihållande objekt.

HasFormat-metoden returnerar sant om bilden i Urklipp har rätt format:

 om Clipboard.HasFormat (CF_METAFILEPICT) sedan ShowMessage ('Urklipp har metafil'); 

Använd tilldelningsmetoden för att skicka (tilldela) en bild till Urklipp. Till exempel kopierar följande kod bitmappen från ett bitmappsobjekt med namnet MyBitmap till Urklipp:

 Urklipp.Assign (MyBitmap); 

I allmänhet är MyBitmap ett objekt av typ TGraphics, TBitmap, TMetafile eller TPicture.

För att hämta en bild från Urklipp måste vi: verifiera formatet för klippbordets nuvarande innehåll och använda tilldelningsmetoden för målobjektet:

 placera en knapp och en bildkontroll på form1 Innan du kör denna kod trycker du på Alt-PrintScreen tangentkombination användningar clipbrd; ... procedur TForm1.Button1Click (avsändare: TObject); Börja om Clipboard.HasFormat (CF_BITMAP) sedan Image1.Picture.Bitmap.Assign (Urklipp); slutet; 

Mer Urklippskontroll

Urklipp lagrar information i flera format så att vi kan överföra data mellan applikationer med olika format. När du läser information från Urklipp med Delphis TClipboard-klass, är vi begränsade till standardformat för urklipp: text, bilder och metafiler.

Anta att du arbetar mellan två olika Delphi-applikationer; hur skulle du definiera anpassat urklippsformat för att skicka och ta emot data mellan dessa två program? För att undersöka, låt oss säga att du försöker koda ett klistra in menypost. Du vill att den ska inaktiveras när det inte finns någon text i urklippet (som en instans).

Eftersom hela processen med urklippet äger rum bakom kulisserna finns det ingen metod i klassen TClipboard som informerar dig när någon förändring i urklippsinnehållet har ägt rum. Tanken är att ansluta till anmälningssystemet för urklipp, så att du kan komma åt och svara på händelser när klippbordet ändras.

För att få mer flexibilitet och funktionalitet är det nödvändigt att hantera meddelanden om klippbordändringar och anpassade klippbordformat - lyssna på Urklipp.