Tipy a triky v Delphi, díl 167. – Shell Extension

Dlouho jsme si nehráli se samotným systémem, takže to dnes napravíme. Ponoříme se do jeho hlubších vrstev a naučíme se vytvářet tzv. Info Tipy.

Postupným vývojem Windows má uživatelské prostředí stále nová a nová vylepšení. Nebudeme teď polemizovat, co je opravdu vylepšení a co spíše naopak, prostě přijmeme tyto změny za fakt. Jednou z "vychytávek", která je shodou okolností opravdu užitečná, je tzv. InfoTip. Je to rozšíření systému (shell extension), které umožňuje po najetí kurzorem myši nad nějaký soubor zobrazit informace o něm ve formě kontextové nápovědy.

Tuto funkci si můžete hned vyzkoušet sami, resp. pravděpodobně ji znáte a berete téměř za samozřejmou. Ať již v Průzkumníku a nebo například v Total Commanderu (pokud si funkci zapnete v nastavení) se vám po najetí kurzorem myši nad soubor zobrazí příslušná nápověda. Právě podle stavu vašeho systému (záleží na tom, jaké aplikace v systému máte) se vám zobrazí buď "obyčejná" jednoduchá nápověda, kterou generuje přímo systém a o souboru se obvykle dozvíte pouze jeho typ, kdy byl naposledy změněn a jeho velikost. Podle verze vašeho systému se mohou tyto tipy drobně lišit, samozřejmě platí, že čím novější systém, tím více informací se dozvíte. U souborů MP3 se tak například pod Windows XP zobrazí informace z ID3 tagů a podobně. Existuje však ještě druhá cesta jak systém "naučit" zobrazovat informace o konkrétním souboru. Pokud máte nainstalován balík MS Office, všimněte si, že vám systém například u dokumentů Wordu zobrazuje informace o autorovi dokumentu. V zásadě se tedy dá říci, že u běžných souborových formátů vám může sám systém (podle toho jakou verzi Windows máte) říci řadu informací, pro další méně obvyklé formáty pak můžeme naprogramovat rozšíření vlastní. A to si právě teď ukážeme.

Jak to celé funguje? Zjednodušeně řečeno si vytvoříme ActiveX prvek v podobě DLL knihovny. Knihovnu poté zaregistrujeme do systému a do systémového registru ještě vložíme na patřičné místo řádek, kde definujeme typ souboru, pro který je knihovna určena. Dnešním úkolem tedy bude vytvořit projekt, jehož produktem bude příslušná DLL knihovna.

Vrhneme se tedy do práce. Spustíme si Delphi, ale tentokrát nezvolíme z menu tvorbu nové aplikace, ale v menu File zvolíme položku New a zde Other (podle verze Delphi se může tento krok drobně lišit). Zobrazí se nám dialogové okno, které jste patrně již někdy viděli a kde najdeme, co všechno můžeme pomocí Delphi vytvořit. Nás bude zajímat záložka ActiveX, kde zvolíme ActiveX Library. Tím se nám vytvoří základní definiční soubor naší budoucí knihovny a jedná se vlastně o klasický projektový soubor jako při tvorbě běžné aplikace. Rozdíl je pochopitelně v tom, že se nejedná o program, ale knihovnu, což je vidět hned v prvním řádku zdrojového souboru, a rozdíl je i v použitých knihovnách.

Tím máme hotový začátek a s tímto souborem prakticky nebudeme nic víc dělat. Přistoupíme k druhému kroku. Stejnou cestou přes položku New a záložku ActiveX tentokrát zvolíme Automation Object (pozor, po předchozím kroku nic nezavíráme, stále pracujeme v rámci téhož projektu!). V zobrazeném dialogu dále pouze vyplníme jméno objektu (první položka; pro náš příklad je zvolen název DPRInfoTip) a vygeneruje se nám příslušný Unit. Zároveň se vygeneruje ještě další jednotka, která nemusí být vidět (pravděpodobně záleží na verzi Delphi), ale zobrazit si ji můžete obvyklým způsobem přes menu View a Units. Pokud jste všude nechali implicitní názvy, bude se naše jednotka, kterou budeme později upravovat, jmenovat klasicky Unit1 a druhá importovaná typová knihovna pak Project1_TLB. Nás bude zajímat pouze knihovna Unit1, jejíž kód teď upravíme.

Teď by bylo asi na místě vysvětlit teorii, jak celá věc funguje, resp. popsat rozhraní použitého objektu a jeho metody. Asi to nebude příliš pedagogické a omlouvám se za to, ale spokojíme se tentokrát jen se zdrojovým kódem této jednotky. Nebudeme si všímat ničeho jiného, než funkce GetDPRInfo, kde je vlastně samotný funkční kód, který generuje zobrazovaný text. Vše ostatní jsou pomocné funkce pro inicializaci jednotlivých částí objektu, alokace paměti a další nezbytné věci. Ty mohou zůstat stejné prakticky pro libovolný jiný podobný projekt, hlavní funkce je právě GetDPTInfo, takže právě tuto funkci si později upravte podle vašich požadavků.

A jaké informace bude tedy zobrazovat naše systémové rozšíření? Už z názvu a také pohledem do zdrojového kódu vidíte, že to budou informace o souborech typu DPR, tedy projekty Delphi. Ve zmiňované funkci, jejíž návratová hodnota je textový řetězec, tedy musíme nějakým způsobem soubor zpracovat a vytáhnout požadované informace. Za základ nám poslouží jméno souboru, které je v proměnné FFile. To je vše, co potřebujeme vědět, zbytek již záleží na nás. Ze souboru DPR sice mnoho užitečných informací nezískáme, ale pro ilustraci to bude stačit. Pomocí několika velmi jednoduchých konstrukcí a s využitím základních funkcí Delphi zjistíme postupně název souboru, dále typ projektu (zda se jedná o program či knihovnu), název projektu a velikost souboru v bajtech. To je vše, nic zajímavějšího se nám asi z DPR souboru už vydolovat nepodaří. Nezapomeňte jednotlivé údaje oddělovat znakem konce řádku, jinak by to nevypadalo příliš pěkně.

Když nyní projekt zkompilujeme (spuštění samozřejmě nemá smysl, je to knihovna), výsledkem bude požadovaná DLL knihovna. Teď je třeba ji zaregistrovat v systému. Nejjednodušší bude, když si knihovnu nakopírujete do adresáře {Windows}\System32 a zde v příkazovém řádku provedete registraci tímto příkazem:

regsvr32 Project1.dll

Pro tento úkon bude nutné být přihlášen s administrátorskými právy. Poslední věcí je provedení záznamu do registrů. Pro zjednodušení naleznete v přiloženém projektu soubor register.reg. Ten musíte nejprve drobně upravit. Stačí jej otevřít v Poznámkovém bloku a změnit identifikační řetězec (dlouhé číslo, začínající 45019CF2) na hodnotu, kterou naleznete v typové knihovně Project1_TLB na řádku, který začíná:

CLASS_DPRInfoTip: TGUID =

Příslušnou hodnotu za rovnítkem pak překopírujte do souboru register.reg, soubor uložte a spusťte. To je vše, od této chvíle by mělo již zobrazování příslušného tooltipu u souborů DPR fungovat.

A to je konec. Pracuje-li vaše aplikace s nějakým zvláštním (vašim vlastním) formátem souborů, můžete aplikaci vybavit (resp. instalátor) i podobným systémovým rozšířením, které pak bude zobrazovat o vašem souboru detailní informace. Kompletní ukázkový projekt můžete opět stahovat zde.

Zdroj: Larry J. Rutledge

Témata článku: Software, Windows, Programování, Pomocný systém, Zjednodušený příklad, Podobný krok, Obvyklá funkce, Jednoduché rozšíření, Podobný typ, Podobný objekt, Díl, Knihovna, Trik, Užitečná funkce

Určitě si přečtěte

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

** Po půl roce je tu další aktualizace Windows ** A opět přináší hlavně hromadu drobných kosmetických vylepšení ** Podívali jsme se na ty nejzajímavější

17.  10.  2017 | Jakub Čížek | 186

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

** Fluent Design je vzhled, do kterého postupně Microsoft převleče celý systém ** Staví na průhlednosti a velkých plochách ** Do Windows 10 se z části dostane už zítra při vydání podzimní aktualizace

16.  10.  2017 | Stanislav Janů | 155

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

19.  10.  2017 | David Polesný | 19

Nejlepší optické iluze: Z toho vám půjde hlava kolem

Nejlepší optické iluze: Z toho vám půjde hlava kolem

** Mozek se nechá snadno ošálit, a to mnoha způsoby ** Podívejte se na několik nejlepších optických iluzí ** Iluze dokazují, že vnímání reality může být značně zkreslené

16.  10.  2017 | Vojtěch Malý


Aktuální číslo časopisu Computer

Nový seriál o programování elektroniky

Otestovali jsme 17 bezdrátových sluchátek

Jak na nákup vánočních dárků ze zahraničí

4 tankové tiskárny v přímém souboji