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
Hrajeme si na Explorer - 3. díl
26. září 2001, 00.00 | V minulém dílu jsme program "naučili" zobrazovat
soubory čtyřmi různými způsoby, přesně jako to dělá
Explorer. Jednu věc jsme ale ponechali nedokončenou - doplnění
dat do sloupců v režimu "Podrobnosti".
V minulém dílu jsme program "naučili" zobrazovat soubory čtyřmi různými způsoby, přesně jako to dělá Explorer. Jednu věc jsme ale ponechali nedokončenou - doplnění dat do sloupců v režimu "Podrobnosti".
V tomto režimu se nám v seznamu zobrazují kromě jména samotného souboru i tři další jeho vlastnosti - velikost, typ a čas poslední změny. Projdeme si je tedy postupně.
VelikostVelikost souboru zjistíme z vyhledávacího záznamu SearchRec, konkrétně z jeho položky Size. Úkol tedy vypadá jednoduše - pomocí funkce IntToStr tuto hodnotu konvertovat do řetězce a přidat jí k právě zpracovávané položce pomocí metody Subitems.Add... ale: Pokud se podíváme na "skutečný" Explorer podrobněji, zjistíme, že převádí velikosti na kilobajty, přičemž nejmenší zobrazovaná hodnota velikosti souboru je vždy 1 kB (i kdyby byl soubor veliký třeba 1 bajt). Navíc se u velkých čísel používá pro přehlednost mezera jako oddělovač tisíců.
Řešením je deklarace vlastní převodní funkce IntToFileSize, která výše zmíněné aspekty zohlední:
|
Myslím, že funkce je celkem jasná. Samotné přidání položky pak zařídíme následujícím voláním, které umístíme na konec with-bloku v proceduře TForm1.ShowBtnClick:
|
Typ souboru
Typ souboru zjistíme pro změnu ze struktury SFI (naplněné při volání funkce SHGetFileInfo, která nám zjišťuje různé informace o souboru), z její položky szTypeName. Nejdříve ovšem musíme přimět funkci SHGetFileInfo tuto položku struktury vůbec naplnit, což zařídíme přičtením konstanty SHGFI_TYPENAME k hodnotě jejího posledního parametru (pro připomenutí - v posledním parametru uFlags se nastavují vlajky určující, co všechno chceme o daném souboru zjistit). Celé volání funkce SHGetFileInfo tedy vypadá takto:
|
Nakonec ještě přidání položky do právě zpracovávaného řádku:
|
Čas poslední změny
Čas poslední změny opět zjistíme ze SearchRec - použijeme položku Time (typu integer). Čas v ní je nutné převést na typ TDateTime (standardní typu používaný v Delphi na uchovávání data a času) - to zařídíme použitím funkce FileDateToDateTime. Na výsledek zase aplikujeme funkci DateTimeToStr, která čas převede na výsledek v podobě řetězce. Přidání položky tedy vypadá takto:
|
Pokud se na výsledek po spuštění programu podíváme pozorně, neujde nám, že na rozdíl od Exploreru se zobrazují i sekundy v čase změny. Protože chceme být v simulaci Exploreru důslední, odstraníme i tento detail.
V unitě SysUtils je deklarováno několik proměnných, ve které představují formáty data, času, měny apod. V podstatě pro programátora zpřístupňují to, co má uživatel nastaveno v ovládacím panelu Místní nastavení. Z těchto proměnných vychází při převodu na řetězec i použitá funkce DateTimeToStr. Proměnná, určující formát času se jmenuje LongTimeFormat. V českých zemích má obvykle hodnotu "h:mm:ss", ale nic nám nebrání v proceduře TForm1.FormCreate nastavit hodnotu vlastní:
|
Teď už se bude čas převádět podle našich představ.
PříštěTímto jsme s naplňováním jednotlivých sloupců daty hotovi. Příště si zkusíme třídění souborů podle jednotlivých kritérií.
Aplikaci ve stavu vývoje po dnešním článku si můžete stáhnout zde.
Obsah seriálu (více o seriálu):
- Hrajeme si na Explorer - 1. díl
- Hrajeme si na Explorer - 2. díl
- Hrajeme si na Explorer - 3. díl
- Hrajeme si na Explorer - 4. díl
- Hrajeme si na Explorer - 5. díl
- Hrajeme si na Explorer - 6. díl
- Hrajeme si na Explorer - 7. díl
-
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