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.
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.
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.