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