Seriál - 14. díl
Další ovládací prvky - 2. část
15. Další ovládací prvky
15.6 Soubory, disky, adresáře
15.7 ProgresBar a Slider
15.8 TabStrip
15. Další ovládací prvky
V minulém díle jsme vám ukázali, jak pracovat pro vás s dosud neznámými ovládacími prvky Visual Basicu. Dnes
v tom budeme pokračovat.
15.6 Soubory, disky, adresáře
V této části vám ukážeme tři prvky, které slouží k práci s disky, adresáři a soubory.
První z nich je DriveListBox. Jde vlastně o normální ComboBox, jehož položkami jsou písmena
disků počítače včetně jejich názvů.
Navíc má vlastnost Drive , pomocí které můžete zjistit uživatelem
zvolený disk.
'Při změně (uživatel si vybere) ukáže zvolený disk - událost Change
Private Sub Drive1_Change()
MsgBox Drive1.Drive
End Sub
Pomocí prvku lze také získat seznam všech disků počítače a to z pole List
(úplně stejné jako ComboBox).
Dim i As Long
For i = 0 To Drive1.ListCount - 1
Debug.Print Drive1.List(i)
Next i
Druhý z prvků je DirListBox. Jak již napovídá jeho název, jde o klasický ListBox,
jehož položkami jsou adresáře na vybraném disku. Který adresář se zobrazí, řídí vlastnost
Path . Stejná vlastnost také vrací uživatelem vybraný adresář.
'Nastaví zobrazení adresáře D:\VYVOJ
Dir1.Path = "D:\VYVOJ"
Stejně jako ListBox má
i DirListBox pole List . To obsahuje podadresáře právě zobrazeného adresáře.
Při nastavení na D:\VYVOJ obsahuje tedy pole všechny jeho podadresáře.
'Zobrazí všechny podadresáře adresáře D:\VYVOJ
Dim i As Long
Dir1.Path = "D:\VYVOJ"
For i = 0 To Dir1.ListCount - 1
Debug.Print Dir1.List(i)
Next i
Posledním prvkem v našem krátkém výčtu je FileListBox. Stejně jako prvek DirListBox je i tento
skoro obyčejným ListBoxem, jehož položkami jsou soubory v určitém adresáři. V jakém,
určuje vlastnost Path . Vlastnost FileName zase určuje název
vybraného souboru. Dáte-li obě dohromady, získáte název vybraného souboru i s cestou.
'Vypíše název vybraného souboru včetně cesty
Private Sub File1_Click()
Dim cesta As String
cesta = File1.Path
'cesta do jiného než kořenového adresáře je bez lomítka
If Len(cesta) <> 3 Then cesta = cesta & "\"
Debug.Print cesta & File1.FileName
End Sub
Stejně jako předchozí dva prvky má i tento pole List , které obsahuje
názvy všech souborů zadaného adresáře.
Dim i As Long
File1.Path = "D:\VYVOJ"
For i = 0 To File1.ListCount - 1
Debug.Print File1.List(i)
Next i
Pomocí šesti vlastností je možné nastavit, které soubory se mají zobrazovat.
Archive , Hidden , Normal , ReadOnly
a System jsou typu Boolean a určují, zda se mají nebo nemají zobrazit
soubory s atributy archivní, skrytý, normální, pouze pro čtení a systémové. Vlastnost
Pattern nastavuje šablonu pro jména, která se mají zobrazit, podle standardní
hvězdičkové konvence. Tj. např. nastavení na *.txt zobrazí pouze soubory s příponou txt atd.
Nakonec vám ukážeme jeden příklad, který demonstruje, k čemu lze tyto tři prvky využít.
Slouží k výběru souboru na disku. Umístěte na formulář od každého z nich jeden a jeden prvek Label.

Potom vložte tento kód (jak kód funguje, poznáte určitě sami, pokud jste
pozorně četli celou kapitolu, pokud ne, vyzkoušejte si jej, pochopíte také):
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub File1_Click()
Dim cesta As String
cesta = File1.Path
If Len(cesta) <> 3 Then cesta = cesta & "\"
Label1.Caption = cesta & File1.FileName
End Sub
Pokud neznáte Windows API (pro ty co nevědí o co jde, vysvětlíme v některém z příštích dílů),
můžete prvky také použít pro získání názvů všech souborů a adresářů na disku
nebo pro vyhlednání souboru nebo adresáře. Jak to udělat dostanete za domácí úkol
(využijte pole List ). Pokud vám to nepůjde, zkuste se inspirovat v jednoduchém
příkladu, který jsme pro vás nachystali.
Zpět na obsah
15.7 ProgresBar a Slider
Oba prvky jsou si podobné, ale slouží k opačným účelům. ProgresBarem zobrazíte stav a Sliderem jej nastavíte. Chcete-li přidat tyto prvky do svého projektu, zvolte menu Project a v něm položku Components. Ve zobrazeném okně zatrhnete v seznamu položku Microsoft Windows Common Controls 6.0. Poté, co klepnete na tlačítko OK, se vám v panelu nástrojů s prvky objeví mimo jiné i tyto dva.
ProgressBar, jak bylo řečeno zobrazuje průběh (stav) nějaké operace. Používá k tomu barevný sloupec jehož směr (vertikální či horizontální) určíte pomocí vlastnosti Orientation . Svislý směr nastavíte konstantou ccOrientationVertical a implicitní vodorovný směr nastvíte pomocí ccOrientationHorizontal . Standardně ProgressBar vypadá jako sloupec, který je přerušovaný. Tento vzhled je určen vlastností Scroling a konstantou ccScrolingStandard . Chcete-li aby sloupec průběhu nebyl přerušovaný, nastavte uvedenou vlastnost na ccScrolingSmooth . Nevyhovuje-li vám to, že je prvek orámován běžným 3D okrajem a chcete získat pouze sloupec samotný, nastavte vlastnost Appereance na ccFlat . Takto nebude sloupec orámován, to ovšem pouze za podmínky, že bude vlastnost BorderStyle nastavena na svou implicitní hodnotu ccNone . Toto vše můžete nastavit buď přímo pomocí okna vlastností nebo použijete stránek vlastností (Property Pages), které vyvoláte poklepáním na vlastnost Custom (opět v okně vlastností). Zde si vystačíte s první záložkou.
Prvek Slider nastavuje průběh (stav) operace. Po ose prvku pohybujete pomocí šoupátka, čímž nastavíte hodnotu a tím i průběh libovolné operace. Použijete-li stránek vlastností vyvolaných stejným způsobem, který byl zmíněn v předchozím odstavci, naleznete na druhé záložce (Appereance) vlastnost Orientation , pomocí které nastavíte podobně jako u ProgressBaru směr, ve kterém bude prvek orientován. Další vlastností je zde TickStyle , která v závislosti na předchozí vlastnosti určí, kde se budou nacházet rysky, jež zpřehlední nastavení pozice. Umístění rysek dole a vpravo (v závislosti na směru prvku) nastavíte konstantou sldBootomRight , vlevo a nahoře s pomocí sldTopLeft , pro zobrazení rysek po obou stranách sldBoth a pro Slider bez rysek použijte konstantu sldNoTicks . Následující políčko s názvem TickFrequency nastavíte v jakých rozestupech se nacházejí rysky.
Na první záložce naleznete vlastnost SmallChange , která určuje nejmenší možný krok, po kterých lze posouvat šoupátko. Dále je zde LargeChange , která určí o kolik se posune šoupátko (hodnota) při kliknutí na jeho osu. Slider dále umožňuje i nastavení výběru. V prvé řadě je třeba zaškrtnout políčko SelectRange . Poté nastavte vlastnost SelStart na hodnotu počátku výběru, a vlastností SelLength nastavíte velikost výběru. V místech, kde jsou umístěny rysky pak naleznete zarážky, které však nejsou příliš dobře vidět, což znesnadňuje použití této možnosti.
Co mají oba prvky společného jsou vlastnosti Min a Max , pomocí kterých určíte počátek a konec rozashu prvku, a tím i rozsah hodnot, které můžete číst z vlastnosti Value . Oba prvky mají události pro práci s myší (Click , MouseDown , MouseMove a MouseUp ). Prvek Slider navíc obsahuje události pro práci s klávesnicí a událost Scroll , které nastane ve chvíli kdy je uživatelem změněna poloha šoupátka (a tím i hodnota ve vlastnosti Value ).
Uděláme si jednoduchý příklad. V novém projektu vložte na formulář jeden ProgressBar, Slider a prvek Timer. U posledně jmenovaného nastavte vlastnost Interval na hodnotu 1000. Poté vložte následující kód, a pozorujte co se bude dít. Nebojte se ovšem zasáhnout a pohnout s šoupátkem Slideru.
Private Sub Form_Load()
Slider1.Min = 0
Slider1.Max = 100
Slider1.TickFrequency = 10
ProgressBar1.Min = 0
ProgressBar1.Max = 100
End Sub
Private Sub Slider1_Scroll()
ProgressBar1.Value = Slider1.Value
End Sub
Private Sub Timer1_Timer()
If Slider1.Value = Slider1.Max Then
Slider1.Value = Slider1.Min
ProgressBar1.Value = Slider1.Value
Else
Slider1.Value = Slider1.Value + 1
ProgressBar1.Value = Slider1.Value
End If
End Sub
Zpět na obsah
15.8 TabStrip
Tento prvek určitě znáte z mnoha aplikací Windows. Klasickým příkladem jsou ovládací panely, kde zobrazíte okno s určitými vlastnostmi, a ty jsou rozdělelny na části pomocí záložek. Obecně tento prvek můžete použít tehdy, když potřebujete na jednom formuláři zobrazit více ůdajů než se na něj vleze. V tu chvíli můžete údaje rozdělit na několik části, přičemž každá znich se zobrazí po kliknutí na příslušnou záložku. Prvek vložíte do svého projektu stejně jako prvky ProgresBar a Slider z předchozího oddílu. Zvolte menu Project a v něm položku Components. Ve zobrazeném okně zatrhněte v seznamu položku Microsoft Windows Common Controls 6.0. Poté, co klepnete na tlačítko OK, se vám v panelu nástrojů s prvky objeví mimo jiné i TabStrip (je zobrazen jako první v pořadí z přidaných prvků).
Pro přehlednost opět použijeme stránek vlastností, které vyvoláte v okně vlastností poklepáním na položku (Custom) . A začneme popořádku od první záložky General. Hned první vlastností je MultiRow , která určí způsob uspořádání záložek. V případě, že jsou záložky širší než je prvek, jsou položky rozděleny na více řádků (když je vlastnost zatržena) nebo se lze pohybovat se záložkami pomocí dvou tlačítek se šipkami umístěnými na pravé straně. S tímto souvisí vlastnost Placement , která určí umístění záložek (nahoře, vlevo atd.). V případě že jsou záložky umístěny vpravo nebo vlevo, je vlastnost MultiRow vždy nastavena na True . Dálší související vlastností je TabStyle . Když jsou záložky ve více řádcích, nastavíte konstantou tabTabOpposite , že se při vybrání nadřezeného řádku přesune řádek s podřazenými záložkami na opačnou stranu. Při použití konstanty tabTabStandard si řádky pouze prohazují pořadí a zůstávají na stejné straně. Největší změnu ve vzhledu dosáhnete pomocí vlastnosti Style , která změní vzhled záložek, a to jak záhlaví tak i okraje. Klasický styl je tabTabs , záhlaví vypadající a fungující jako tlačítka nasatvíte konstantou tabButtons a poslední možností jsou plochá tlačítka (viz panel nástrojů v Internet Exploreru) tabFlatButtons , u kterých navíc můžete nastavit vlastností Separators , zdali mají být vizuálně odděleny.
Na první záložce můžete ještě navíc ovlivnit šířku i výšku záhlaví záložek. TabMinWidth určuje minimální možnou šířku záhlaví. Chcete-li mít všechna záhlaví stejné velikosti, vyberte v seznamu TabWidthStyle položku tabFixed . Poté pomocí vlastností TabFixedWidth a TabFixedHeight určíte šířku a výšku záhlaví.
Nyní se přesuneme ke druhé záložce, kde pomocí tlačítek Insert Tab a Remove Tab přidáváte a rušíte záložky. Pro pohyb po jednotlivých záložkách použijte položky Index a tlačítek se šipkami. Pro práci se záložkami v kódu slouží kolekce Tabs . Pro přidávání a rušení záložek slouží standardní metody Add a Remove a práce s ní je identická jako s jakoukoliv jinou kolekcí. Tato obsahuje objekty typu Tab , jejichž nejdůležitější vlastností je Caption , což je text zobrazený v záhlaví záložky.
Při používání má TabStrip jednu velkou nevýhodu (to může být ovšem věcí názoru a způsobu jeho použití), a to že obsah a přepínání jednotlivých záložek si musíte vyřešit sami. Prvek sám totiž není při návrhu schopen přepínat jednotlivé záložky a ani není kontejner prvků. Jediné co dokáže přepnout, je záhlaví a okraje. Vy pak musíte použít libovolný kontejner prvků (PictureBox, Frame) do něj vložit požadované prvky, a ten pak při výběru příslušné záložky zobrazit (tzn. pro každou záložku jeden kontejner, např. PictureBox). Pro nastavení správné velikosti kontejnerů prvků nabízí TabStrip vlastnosti ClientHeight , ClientWidth , ClientLeft a ClientTop .
Co se týče událostí, jsou zde pro vás důležité dvě. BeforeClick nastane předtím, než je záložka přepnuta a umožní vám nastavením parametru Cancel na True přepnutí zabránit. Druhou událostí je Click , pomocí které budete přepínat obsah záložek.
Použití prvku TabStrip si ilustrujeme na následujícím příkladu. Vložte na formulář prvek TabStrip a s pomocí stránek vlastností vytvořte tři záložky s názvy "1" až "3". Dále vložte na formulář tři prvky Frame. A nyní už zbývá vložit pouze kód.
Private Sub Form_Load()
Frame1.Move TabStrip1.ClientLeft, TabStrip1.ClientTop, _
TabStrip1.ClientWidth, TabStrip1.ClientHeight
Frame2.Move TabStrip1.ClientLeft, TabStrip1.ClientTop, _
TabStrip1.ClientWidth, TabStrip1.ClientHeight
Frame2.Visible = False
Frame3.Move TabStrip1.ClientLeft, TabStrip1.ClientTop, _
TabStrip1.ClientWidth, TabStrip1.ClientHeight
Frame3.Visible = False
End Sub
Private Sub TabStrip1_Click()
Frame1.Visible = (TabStrip1.SelectedItem.Index = 1)
Frame2.Visible = (TabStrip1.SelectedItem.Index = 2)
Frame3.Visible = (TabStrip1.SelectedItem.Index = 3)
End Sub
Zpět na obsah
|