Schránka systému Windows představuje kontejner pro jakýkoli text nebo grafiku, která je vyjmuta, zkopírována nebo vložena z aplikace nebo do aplikace. Tento článek vám ukáže, jak pomocí objektu TClipboard implementovat funkce vyjmout-kopírovat-vložit do aplikace Delphi.
Schránka obecně
Jak asi víte, schránka pojme pouze jeden kus stejného druhu dat pro vyjmutí, kopírování a vložení najednou. Pokud do schránky pošleme nové informace ve stejném formátu, vymažeme to, co tam dříve bylo, ale Obsah schránky zůstává ve schránce i poté, co jsme obsah vložili do jiného programu.
TClipboard
Abychom mohli používat schránku Windows v našich aplikacích, musíme přidat ClipBrd jednotka do klauzule použití projektu, s výjimkou případů, kdy omezujeme řezání, kopírování a vkládání na komponenty, které již mají vestavěnou podporu pro metody Clipboard. Těmito součástmi jsou TEdit, TMemo, TOLEContainer, TDDEServerItem, TDBEdit, TDBImage a TDBMemo.
Jednotka ClipBrd automaticky představuje objekt TClipboard nazvaný Clipboard. Použijeme
CutToClipboard, Zkopírovat do schránky, PasteFromClipboard, Průhledná a HasFormat metody řešení operací schránky a manipulace s textem a grafikou.Odeslat a načíst text
K odeslání nějakého textu do schránky je použita vlastnost AsText objektu Clipboard. Pokud chceme například poslat tětiva informace obsažené v proměnné SomeStringData do schránky (vymazání veškerého textu, který tam byl), použijeme následující kód:
použití ClipBrd; ...
Schránka. AsText: = SomeStringData_Variable;
K načtení textových informací ze schránky použijeme
použití ClipBrd; ...
SomeStringData_Variable: = Schránka. AsText;
Poznámka: Pokud chceme pouze kopírovat text, řekněme, Upravit komponentu do schránky, nemusíme do klauzule použití zahrnout jednotku ClipBrd. Metoda CopyToClipboard TEdit zkopíruje vybraný text v ovládacím prvku pro úpravy do schránky ve formátu CF_TEXT.
postup TForm1.Button2Click (odesílatel: TObject); začít// následující řádek vybere // VŠECHNY text v ovládacím prvku úprav {Edit1.SelectAll;} Edit1.CopyToClipboard; konec;
Obrázky do schránky
Pro načtení grafických obrázků ze schránky musí Delphi vědět, jaký typ obrázku je tam uložen. Podobně pro přenos obrázků do schránky musí aplikace sdělit schránce, jaký typ grafiky odesílá. Následují některé z možných hodnot parametru Format; Windows nabízí mnohem více formátů schránky.
- CF_TEXT - Text s každým řádkem končícím a CR-LF kombinace.
- CF_BITMAP - Windows bitmapová grafika.
- CF_METAFILEPICT - Grafika Windows metasoubor.
- CF_PICTURE - Objekt typu TPicture.
- CF_OBJECT - Jakýkoli trvalý objekt.
Metoda HasFormat vrátí True, pokud má obrázek ve schránce správný formát:
-li Schránka. HasFormat (CF_METAFILEPICT) pak ShowMessage ('Schránka má metasoubor');
Použijte metodu Přiřadit k odeslání (přiřazení) obrázku do schránky. Například následující kód zkopíruje bitmapu z bitmapového objektu s názvem MyBitmap do schránky:
Schránka. Přiřadit (MyBitmap);
Obecně je MyBitmap objektem typu TGraphics, TBitmap, TMetafile nebo TPicture.
Chcete-li načíst obrázek ze schránky, musíme: ověřit formát aktuálního obsahu schránky a použít metodu Přiřadit cílový objekt:
{umístit jedno tlačítko a jednu kontrolu obrazu na formuláři1} {Před provedením tohoto kódu stiskněte kombinaci kláves Alt-PrintScreen}použití clipbrd;... postup TForm1.Button1Click (Sender: TObject); začít-li Schránka. HasFormat (CF_BITMAP) pak Image1.Picture. Bitmapa. Přiřadit (Schránka); konec;
Více ovládání schránky
Schránka ukládá informace ve více formátech, takže můžeme přenášet data mezi aplikacemi pomocí různých formátů. Při čtení informací ze schránky pomocí třídy DelCli TClipboard jsme omezeni na standardní formáty schránky: text, obrázky a metasoubory.
Předpokládejme, že pracujete mezi dvěma různými aplikacemi Delphi; jak byste definovali vlastní formát schránky, abyste mohli odesílat a přijímat data mezi těmito dvěma programy? Pro účely průzkumu řekněme, že se pokoušíte kódovat Vložit položka nabídky. Chcete, aby byl zakázán, když ve schránce není žádný text (jako instance).
Protože celý proces se schránkou probíhá za scénami, neexistuje žádná metoda třídy TClipboard, která by vás informovala o nějaké změně obsahu schránky. Záměrem je připojit se do systému oznámení schránky, takže budete mít přístup a reagovat na události, když se schránka změní.
Pro větší flexibilitu a funkčnost je nutné vypořádat se s oznámeními o změně schránky a vlastními formáty schránky - poslechem schránky.