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
Zjištění ikony asociované k souboru
8. června 2001, 00.00 | Článek na jednoduché ukázkové aplikaci vysvětluje, jak v Delphi jednoduše získat handle ikony, která je asociována k souboru.
Jednou z vlastností, kterou Windows oplývají, je automatické přiřazování ikony souborům na základě přípon. Celá tahle záležitost je sice o něco složitější, než pouhý vztah přípona-ikona (teď mě napadá, že je to také téma na samostatný článek), ale to pro náš účel není příliš podstatné. My se totiž budeme zabývat tím, jak ze známého jména souboru tuto ikonu získat.
Tak, když jsme si vymezili úkol, jdeme na jeho plnění. Jak už je u mých článků zvykem, všechno si předvedeme na ukázkové aplikaci (viz obrázek). Princip je následující: Do editboxu uživatel napíše jméno souboru, jehož ikonu chce zobrazit (popřípadě soubor vybere v dialogu pomocí tlačítka Procházet...). Po stisku klávesy Enter se pomocí komponenty TImage zobrazí výsledná ikona.
První, co musíme do aplikace "vtělit", je obsluha událostí komponent. Jednak musíme ošetřit kliknutí na tlačítku, kdy by se měl zobrazit dialog umožňující výběr souboru, a po kliknutí na tlačítko Otevřít v tomto dialogu by se měla rovnou zobrazit ikona. Dále musíme zachytit stisk Enteru přímo v editačním políčku a jako reakci opět zobrazit ikonu zadaného souboru. Celý kód vypadá takto:
|
Tak, to by byla "omáčka" okolo, nyní přejdeme k implementaci funkce TForm1.ShowIcon, která má za úkol provést samotné zobrazení ikony na formuláři. V proceduře použijeme volání Win32 API funkce SHGetFileInfo. Tato funkce je velice užitečná a umí toho o mnoho víc, než jen zobrazit ikonu (o tom někdy příště...). My ale využijeme jen tuto její funkci. Funkce samotná je deklarována takto:
|
Jak je vidět, parametry funkce jsou především jméno souboru a struktura TSHFileInfo - v jejích členech jsou uloženy výsledky našeho dotazu. Posledním důležitým parametrem funkce je "maska" určující, které informace chceme o souboru zjistit. Pro naše účely použijeme hodnotu SHGFI_ICON, která zajišťuje to, že v předané struktuře TSHFileInfo bude po volání funkce ve členu hIcon vrácen handle ikony daného souboru.
Handle použijeme pro nastavení obrázku v komponentě TImage - využijeme zde její vlastnosti Picture, která má zase vlastnost Icon (typu TIcon), což je objekt zapouzdřující v Delphi ikonu. No a jako snad všechny objekty v Delphi zapouzdřující cokoliv z Win32 API má i TIcon vlastnost Handle, kterou nastavíme na hodnotu získanou ze struktury SHFileInfo.
Zdá se vám popis trochu složitý? Pak vás možná překvapí, že samotná výkonná část kódu se pohodlně vejde na dva řádky. Celá procedura ShowIcon vypadá následovně:
|
Snad bych jen dodal, že je nutno přilinkovat k programu unitu ShellAPI, ve které se nachází námi volaná funkce SHGetFileInfo, a tímto upozorněním také tento článek končím. Takže nashledanou (pardon - napočtenou) zase někdy příště.
Ukázkovou aplikaci i se zdrojovým kódem pro Delphi 3 a vyšší si můžete stáhnout zde.
-
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