HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Fájlok másolása a vágólapra


Példaprogram letöltése

4507 bájt

A Windows rendszer vágólap-szolgáltatásának univerzalitása talán mindenki számára ismerős. Képesek vagyunk többféle típusba tartozó információt elhelyezni a memóriaterületén, és lekérdezni onnan. Cikkünkben arra mutatunk egy példát, hogy miként lehet a vágólapon úgy elhelyezni állományokat, hogy azok neve lekérdezhető legyen. A megoldásban egy speciális formátum-konstanst kell használnunk.

Az alkalmazás Form-ján két gombot helyeztünk el. Az egyikkel a vágólapra helyezhetjük a Files mappában található állományt, nevüket egy karakterláncban megadva. A másik gombbal lekérdezhetjük a vágólapon tárolt állományok neveit az elérési úttal, és megjeleníthetjük ezeket a karakterláncokat a TMemo komponensben.
A fájlok vágólapra másolását a CopyFilesTo metódussal végezzük. Első lépésben létrehozzuk azokat a változókat, melyekre szükségünk van. A TDropFiles típusú rekord tartalmazza a fájlok adatait.
files: PDropFiles;
hHandle: THandle;
size: Integer;
Ezt követően a szükséges méretű területet foglaljuk le a globális memóriából.
size := Length(list) + 2;
list := list + #0#0;
hHandle := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDropFiles) + size);
Amennyiben ez sikerült, akkor a neveket a memóriaterületre másoljuk.
files := GlobalLock(hHandle);
files^.pFiles := SizeOf(TDropFiles);
Move(list[1], (PChar(files) + SizeOf(TDropFiles))^, size);
Végül lezárjuk a hivatkozást a memóriaterületre, de nem szabadítjuk fel, hiszen a vágólap erre a területre fog hivatkozni.
GlobalUnlock(hHandle);
A hivatkozást a SetAsHandle metódussal adhatjuk meg, használva a CF_HDROP konstanst, mely jelzi, hogy a vágólap tartalma hivatkozás a merevlemez egy adott objektum-csoportjára.
Clipboard.SetAsHandle(CF_HDROP, hHandle);
A neveket a #0 speciális karaktersorozattal választjuk el egymástól, lekérdezéskor ezt vesszük figyelme. A lekérdezés első lépése, hogy megvizsgáljuk a vágólapot, tartalmaz-e a fenti adattípusra hivatkozást.
if not Clipboard.HasFormat(CF_HDROP) then begin
  ...
end;
Amennyiben igen, akkor a vágólap megnyitása következik, hogy olvasni tudjuk ezt a memória-szegmenst.
Clipboard.Open;
Egy kezelőt hozunk létre a vágólapon található adatok elérésére.
files := Clipboard.GetAsHandle(CF_HDROP);
A DragQueryFile metódussal lekérdezzük a tárolt hivatkozások számát.
number := DragQueryFile(files, $FFFFFFFF, nil, 0);
Majd egy ciklussal beolvassuk a karakterláncokat a Form TMemo komponensébe.
for i := 0 to number - 1 do
begin
  b[0] := #0;
  DragQueryFile(files, i, b, SizeOf(b));
  memo1.Lines.Add(b);
end;
Végül lezárjuk a vágólapot.
Clipboard.Close;

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 691. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |