Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Delphi
Přetahování souborů do vaší aplikace
drag&drop
24. dubna 2001, 00.00 | Značná část programů ve Windows podporuje přetahování souborů ze složek přímo do svého okna. V článku si ukážeme, jak tuto možnost začlenit i do vaší aplikace.
Jedna z užitečných věcí ve Windows je beze sporu možnost přetahovat soubory ze složek do oken různých aplikací, ve kterých se následně otevřou. Toto chování podporuje většina aplikací pracujících se soubory a pokud obdobnou aplikaci tvoříte, určitě vám přijde vhod návod, jak do ní možnost přetahování souborů začlenit.
Celý postup si vysvětlíme na jednoduchém prográmku, který bude obsahovat pouze jediný formulář s ListBoxem (viz obrázek). Když na tento formulář přetáhneme soubor nebo skupinu souborů, jejich názvy se zobrazí právě v ListBoxu. Ve skutečné aplikaci je samozřejmě nějak zpracujete, ale nám tu jde především o princip, takže se spokojíme s přidáváním jejich názvů do onoho ListBoxu.
InicializacePrvní, co budeme muset udělat, je informovat Windows, že do okna naší aplikace můžou být přetaženy soubory. Tato informace slouží mimo jiné k tomu, aby systém mohl nad oknem zobrazit při přetahování správný kurzor. Funkce, kterou Windows sdělíme naše záměry, se jmenuje DragAceptFiles. Její první parametr je handle okna, na které mají jít přetahovat soubory. Druhý parametr je typu Boolean a určuje, zda okno přihlašujeme (True) nebo odhlašujeme (False) z přetahování.
Funkce DragAcceptFiles je (stejně jako ostatní, které budeme využívat) deklarována v unitě ShellAPI, kterou je tím pádem nutné přidat do úvodní klauzule uses v našem programu.
Na základě předchozích odstavců vás už zajisté napadá, jak by měla vypadat obsluha události OnCreate a OnDestroy na hlavním formuláři. Například takhle:
|
Vlastní detekce přetahování
Přihlášení bychom měli, teď ovšem zbývá vyřešit problém s vlastní detekcí, zda byl na aplikaci přetažen soubor. Mechanismus je následující: Když "upustíte" soubor na okno aplikace, Windows zašlou danému oknu zprávu WM_DROPFILES. Po zaslání této zprávy je možné pomocí funkce DragQueryFile zjistit počet souborů a jejich názvy. Tato funkce si bere za parametry handle přetažení (zjistíme z parametrů zprávy WM_DROPFILES), index souboru, jehož název chceme zjistit, a nakonec ukazatel na buffer, kam se jméno zapíše, a jeho délku. Pokud jako index souboru uvedeme hodnotu $FFFFFFFF, návratovou hodnotou funkce bude počet souborů, které jsou přetahovány.
Až soubory zpracujeme, je programátorskou slušností zavolat funkci DragFinish, čímž systému sdělíme, že přetahování je zpracováno a tím pádem systém může uvolnit paměť, kterou na něj alokoval (pro názvy souborů apod.).
Vlastní proceduru na zpracování zprávy WM_DROPFILES musíme nejdříve deklarovat v definici hlavního formuláře:
|
Všimněte si, že v unitě Messages je přímo struktura TWMDropFiles, která trochu usnadňuje zpracování této zprávy. No a teď už vlastní tělo procedury:
|
Závěr
Jak je snad z článku vidět, na přetahování souborů není nic těžkého. Se třemi funkcemi a zpracováním jedné zprávy tak můžete svojí aplikaci obohatit o zajímavou funkci, která navíc podstatně zvyšuje uživatelský komfort programu.
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007