HyperLink


Bejelentkezés
E-mail: 
Jelszó: 






Skip Navigation Links
 

Form-ra dobott URL fájlokban tárolt címeket lekérdező komponens


Példaprogram letöltése

6119 bájt

A .url kiterjesztésű fájlok egy-egy hivatkozást tartalmaznak, pl. egy WEB oldalra. Ebben a példában egy olyan komponenst készítünk, melyet elég a Form-ra helyezni, és ezután a Form-ra húzott .url fájlokból kiolvassa a hivatkozásokat, és egy property-ben eltárolja. A property-ben tetszőleges számú hivatkozás szerepelhet. A példa többek között arra is jó, hogy megtudjuk belőle, miként lehet komponensből a Form-ra húzott fájlokat, vagy egyéb objektumokat lekérdezni.

A mellékelt példaprogram megnyitása előtt a DroppedURLs.pas-ban lévő komponenst telepítenie kell a Delphi alá.
Amikor a felhasználó fájlokat dob Drag&Drop-pal a Form-ra, akkor a Form kap egy WM_DROPFILES üzenetet. Ezt az üzenetet csak akkor kapja meg, ha a DragAcceptFiles függvénnyel beállítjuk, hogy a Form képes fájlokat Drag&Drop-pal fogadni. A Form-hoz érkező üzenetek fogadásához szükség lesz egy TWndMethod típusú eljárásra is, amire átirányítjuk a Form eseménykezelő eljárását. Mindkét feladatot a komponens konstruktorában hajtjuk végre:
  FOldWndProc: TWndMethod;
...
  FOldWndProc:=(AOwner as TForm).WindowProc;
  (Owner as TForm).WindowProc:=WndProc;
  DragAcceptFiles((Owner as TForm).Handle, true);
Az eredeti eseménykezelő eljárást eltároljuk az FOldWndProc változóban, hiszen erre még szükségünk lesz. Az új eljárás a WndProc lesz, amiben csak a nekünk fontos üzeneteket dolgozzuk fel, a többit rábízzuk az eredeti eljárásra:
Ha a WM_DROPFILES üzenet érkezik, akkor meghívjuk a GetDroppedFiles eljárást. Ennek paramétere TWMDropFiles típusú, így az eredetileg TMessage típusú paramétert egy egyszerű konverzióval adjuk át:
GetDroppedFiles(TWMDropFiles(Message));
A GetDroppedFiles eljárás legelején ellenőrizzük a ClearPreviousList property értékét. Ha ez igaz, akkor az előző Drag&Drop eredménylistáját töröljük. Az eredménylistát, vagyis az .url fájlokban tárolt hivatkozásokat az URL nevű TStringList típusú property-ben tároljuk.
Ezután lekérdezzük a Form-ra dobott fájlok számát. Ezt a DragQueryFile függvénnyel tudjuk megtenni, de ezt fogjuk felhasználni az egyes fájlok nevének lekérdezéséhez is. A függvény részletes leírása a következő:
DragQueryFile
function DragQueryFile(
Drop: HDROP;
FileIndex: UINT;
FileName: PChar;
cb: UINT
): UINT;
A függvény az ablakra dobott fájlok számának és nevének lekérdezésére szolgál.
Paraméterek
Drop: HDROP
Ezt az azonosítót a TWMDropFiles típusú paraméterben kapjuk meg. Ennek Drop mezőjét kell itt megadni, ami azonosítja azt a struktúrát, amelyben az ablakra húzott fájlok nevei vannak tárolva.
FileIndex: UINT
Ha a $FFFFFFFF értéket adjuk meg, akkor a függvény visszatérési értéke a fájlok száma lesz. Ha 0-t, vagy 0-nál nagyobb értéket adunk meg, akkor a megadott sorszámú fájl nevét írja be a FileName paraméterben megadott bufferbe.
FileName: PChar
Annak a buffernek a pointere, amelybe a fájlnevet várjuk. Ha a fájlok számát kérdezzük le (lásd FileIndex paraméter), akkor megadhatunk nil-t is.
cb: UINT
A buffer maximális hossza.
Visszatérési érték
Ha a fájlok számát kérdeztük le, akkor a fájlok száma lesz a visszatérési értéke, ellenkező esetben a lekérdezett fájlnév hossza (nem számítja bele a lezáró #0 karaktert).
Ezzel a függvénnyel tehát a fájlok számát és nevét kérdezhetjük le. Nekünk azonban nem elég a fájl neve, mert mi a hivatkozást szeretnénk az URL property-be felvenni. Szerencsére erre is egyszerű megoldás kínálkozik, mivel az .url fájlok szerkezete az .ini fájlokéhoz hasonló, tehát a TIniFile osztályon keresztül kényelmesen olvasható és írható. Mielőtt megnyitnánk a fájlt, ellenőrizni kell a kiterjesztését is, hiszen nem biztos, hogy .url fájlokat húzott a felhasználó a Form-ra.
Az .url fájlokban az InternetShortcut szekcióban van egy URL nevű érték, ami a hivatkozást tartalmazza. Ezt a hivatkozást olvassuk ki a fájlból és hozzáadjuk az URL property tartalmához.
Ha az összes fájlt feldolgoztuk, akkor a DragFinish függvénnyel lezárjuk a műveletet. Ennek paraméterként a TWMDropFiles típusú paraméter Drop mezőjének értékét kell megadni.
Végül generálunk egy OnDroppedURLs eseményt.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 54. 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-2010 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |