VB - 9. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

VB - 9. lekceVB - 9. lekce

 

VB - 9. lekce

Google       Google       18. 4. 2005       14 608×

9.1 CommonDialog pokračování
9.2 Odchytávání chyb
9.3 Barvy
9.4 Datum a čas
9.5 PopUp Menu
9.6 Domácí úkol
9.7 V další lekci

Reklama
Reklama

9.1 CommonDialog pokračování

CommonDialog nám nyní pomůže drobně upravit prohlížeč obrázků, který jsme tvořili v minulé lekci, a to tak, že pomocí něj budeme moci otevírat obrázky.


Private Sub Command1_Click()
  CommonDialog1.DialogTitle = "Vyber obrázek"
  CommonDialog1.Filter = "*.jpg; *.gif; *.bmp; *.dib; *.wmf"
  CommonDialog1.ShowOpen
  Image1.Picture = LoadPicture(CommonDialog1.FileName)
End Sub

Private Sub Dir1_Change()
  File1.Path = Dir1.Path
  Label1.Caption = File1.Path
End Sub

Private Sub Drive1_Change()<
  Dir1.Path = Drive1.Drive
  File1.Path = Dir1.Path
  Label1.Caption = File1.Path
End Sub

Private Sub File1_Click()
  Image1.Stretch = True
  Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName)
  Label1.Caption = File1.Path & "\" & File1.FileName
End Sub

Private Sub Form_Load()
  File1.Pattern = "*.jpg; *.gif; *.bmp; *.dib; *.wmf"
  Label1.Caption = File1.Path & "\" & File1.FileName
End Sub

Než CommonDialog zobrazíme, tak mu můžeme dát vlastnosti, např. titulek okna nebo jiné. Nás bude zajímat možnost omezení na určité formáty souborů, to se zde neprovádí pomocí File1.Pattern = "*.jpg; *.gif; *.bmp; *.dib; *.wmf" , ale pomocí CommonDialog1.Filter = "*.jpg; *.gif; *.bmp; *.dib; *.wmf". Není to závratný rozdíl, ale je potřeba si na to dávat pozor. Potom CommonDialog zobrazíme pomocí CommonDialog1.ShowOpen a načteme obrázek do ImageBoxu takto:


Image1.Picture = LoadPicture(CommonDialog1.FileName)

Je to mnohem jednodušší a mnohem méně pracné než používat prvky DriveListBox a podobně. To by bylo to podstatné o načítání pomocí CommonDialogu. Ukládání si probereme někdy jindy.

9.2 Odchytávání chyb

Odchytávání chyb je docela pracné, protože pokud chcete udělat nějaký plně funkční produkt, tak nemůže spadnout uprostřed práce, tak jak to mají některé programy ve zvyku. Chyb k odchytávání je opravdu mnoho, obzvláště pokud máte rozsáhlou aplikaci. Jednou z takových chyb může být například jen nevložené CD do mechaniky nebo jen nějaká drobnost, jako je stisknutí storna při CommonDialogu nebo dělení nulou. Existuje několik způsobů, jak chybu odchytit. Začneme tím nejjednodušším, a to je přeskočení chyby:


Private Sub Form_Load()
On Error Resume Next
a = x / 0
End Sub

Nulou samozřejmě nelze dělit, tak co může program udělat? No vyhodí chybu, ale protože je v proceduře zapsáno On Error Resume Next, která programu říká, ať při chybě pokračuje dál, tak se program nezasekne, ale pokračuje dál. To je ale málo, některé chyby je potřeba ošetřit tak, aby nenarušily chod programu nebo aby něco oznámily uživateli. V takovém případě se používá ErrorHandler: je to část kódu, ve které se opravuje nebo vyřizuje ona chyba. Kód potom může vypadat třeba takto:


Private Sub Form_Load()
  On Error GoTo ErrorHandle
  a = x / 0
  
  ErrorHandle:
  
End Sub

Zde je zjednodušená ukázka, jak kód může vypadat. Druhý řádek kódu, který obsahuje text On Error GoTo ErrorHandle, který určuje, že pokud se stane chyba, tak se program přesune do části za názvem ErrorHandle: a pokračuje v ní. Zde je drobná ukázka jak toho využít jako oznámení uživateli:


Private Sub Form_Load()
  On Error GoTo ErrorHandle
  x = 7
  y = 0
  a = x / y
  ErrorHandle:
    If Err.Number = 11 Then MsgBox "Nulou nelze dělit", _
     vbOKOnly, "Chyba"
End Sub

Nebo to lze využít pro opravení chyby třeba takto:


Private Sub Command1_Click()
  On Error GoTo ErrorHandle
  x = 7
  y = 0
  a = x / y
  ErrorHandle:
    If Err.Number = 11 Then
      y = 1
      Resume
    End If
End Sub

Slovíčko Resume  znamená návrat na řádek, ve kterém se vyskytla chyba a jeho opětovné provedení a pokračování v kódu. Pokud se ale chyba neopravila nebo se opravila špatně, tak se z toho klidně může stát nekonečná smyčka, proto si na to dávejte pozor. Obsah ErrorHandleru dávejte do podmínky, protože jinak se provede také, protože je to součástí procedury a program přes náš ErrorHandle půjde:


Private Sub Command1_Click()
  On Error GoTo ErrorHandle
  x = 7
  y = 0
  a = x / y
  Print "Konec"
  ErrorHandle:
    If Err.Number = 11 Then
      MsgBox " Nulou nelze dělit  ", _
vbOKOnly, "Chyba"
      Resume Next
    End If
End Sub

Zde je ještě jedna modifikace, ta se ale nevrací k řádku, na kterém se vyskytla chyba, ale pokračuje na řádku pod ním.
Nyní se budu věnovat další části ohledně chyb, a to je využití objektu s názvem Err. Ten obsahuje informace o chybě. Jeho použití je ukázáno již v předchozích případech, ale teď se jím budu zabývat podrobněji.


Private Sub Command1_Click()
  On Error GoTo ErrorHandle
  x = 7
  y = 0
  a = x / y
  Print "Konec"
  ErrorHandle:
    If Err.Number = 11 Then
      MsgBox "Typ Chyby:" & Chr(13) & Chr(10) & Err.Description _
       & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Číslo chyby" & _
       Chr(13) & Chr(10) & Err.Number, vbOKOnly, "Chyba"
      Resume Next
    End If
End Sub

Zde je ukázka kódu, jak by měl přibližně vypadat a jak by měl být zformátován. Podtržítka se používají k zalamování dlouhých příkazů, ať se nemusí rolovat ve dvou směrech. Chr(13) & Chr(10) kombinace těchto dvou čísel převedených pomocí funkce char na znak se v MsgBoxu přesuneme na další řádek. Nyní se dostávám k tomu, k čemu jsem chtěl, to je objekt Err. Ten v sobě, jak jsem se již zmiňoval, obsahuje informace o chybě, a to číslo chyby a popisek chyby. Číslo chyby získáme z Err.Number a typ nebo popis chyby pomocí Err.Description. Chyby se pomocí funkce vypíší do MsgBoxu a uživatel bude vědět, kde udělal chybu. Vypisování čísla samozřejmě není nutné, protože uživateli, který nezná jazyk, bude asi k ničemu. Ještě ukázka, jak filtrovat chybu chybějícího CD v mechanice a použití ukončení procedury kvůli vyvolané chybě. Jako příklad dávám opět ukázku z minulé lekce, tj. upravený prohlížeč obrázků.


Private Sub Dir1_Change()
  File1.Path = Dir1.Path
  Label1.Caption = File1.Path
End Sub

Private Sub Drive1_Change()
  On Error GoTo Error
  Dir1.Path = Drive1.Drive
  File1.Path = Dir1.Path
  Label1.Caption = File1.Path
  Error:
    If Err.Number = 68 Then
      MsgBox "Disk není " & Drive1.Drive & " k dispozici" _ 
       vbOKOnly, "Chyba"
    End If
End Sub

Private Sub File1_Click()

Image1.Stretch = True Image1.Picture = LoadPicture(File1.Path & "\" & File1.FileName) Label1.Caption = File1.Path & "\" & File1.FileName End Sub Private Sub Form_Load() File1.Pattern = "*.jpg; *.gif; *.bmp; *.dib; *.wmf"< Label1.Caption = File1.Path & "\" & File1.FileName End Sub

Zde je tedy ukázka drobné opravy chyby, která se v předchozím kódu vyskytovala. Číslo chyby při vytváření programu můžeme zachycovat do nějaké proměnné z objektu Err třeba takto:
Chyba = Err.Number. Proměnnou pak můžeme třeba vytisknout na formulář.

Ještě než zakončím tuto kapitolu, řeknu vám, jak opravit chyby CommonDialogu


Private Sub Command1_Click()
  On Error GoTo error
  CommonDialog1.ShowOpen
  Image1.Picture = LoadPicture(CommonDialog1.FileName)
  error:
    If Err.Number = 481 Then
       MsgBox "Špatný typ souboru"
    End If
End Sub

To je příklad, jak dosáhnout toho, že špatný soubor, ve kterém je chyba nebo špatně vybraný soubor s jinou příponou, neodstaví celý program.

Myslím, že ohledně chyb toho bylo až moc, tak pojďme dál.

9.3 Barvy

Máme několik možností, jak barvy zadávat.
První je použití RGB, je jednoduché a nevyžaduje znalost 16kové soustavy. Každá barva má hodnotu od 0 až do 255, její zadání je velmi jednoduché, vypadá takto:


Form2.BackColor = RGB(50, 100, 150)

První je hodnota červené, čím je hodnota vyšší, tím větší je podíl barvy v barvě výsledné. Pak následuje barva zelená a modrá.

Druhou možností je zadávaní pomocí 16kové soustavy, je to celkem jednoduché, od desítky do patnáctky se místo čísel používají písmena A až F. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. To je 16 hodnot. F je hodnota nejvyšší.


Form2.BackColor = &H66FFFF

Zde jsou ale barvy převrácené, první je hodnota modré, druhé dvojčíslí je hodnota zelené a třetí je hodnota červené.

To by bylo něco málo ohledně barev. Těmi se časem ale budeme zabývat velmi podrobně. Pří výrobě editoru fotek, ke kterému se postupně probojujeme přes mnohá úskalí jazyka VB

9.4 Datum a čas

Čas a datum, která aplikace by se bez něj jen mohla obejít, vždyť i onen jednoduchý poznámkový blok nám umožňuje vložit do textu čas nebo datum. Tady máte něco málo jak získat různé časové údaje, kód je velmi jednoduchý, takže by neměl být problém to z něj pochopit.


Private Sub Command1_Click()
Print "Čas " & Time
Print "Hodina " & Hour(Time) & " Minuta " & Minute(Time) _
& " Sekunda " & Second(Time)
Print "Datum " & Date
Print "Den: " & Day(Date) & " Měsíc: " & Month(Date) & " 
Rok: " & Year(Date)
Print "Pořadové číslo dne v týdnu " & Weekday(Date)
End Sub

Podobně můžete tyto hodnoty zapisovat do proměnných třeba takto:


Dim čas As Date
Dim minuty As Byte
Private Sub Command1_Click()
  čas = Time
  minuty = minute(čas)
  Print minuty

  'zkráceně
  Print minute(Time)
  End Sub

Tak to by bylo to základní ohledně času, a pokud chcete čas zobrazovat ve vašem programu stále aktuální, tak jej musíte každou vteřinu nebo minutu obnovit, na to je vhodný Timer. Kód pak může vypadat třeba takto:


Private Sub Form_Load()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()<
Text1.Text = Time
End Sub

Můžete ale zobrazovat třeba jen hodiny a minuty takto:
Ale kdepak - nic už vám neřeknu, to bude domácí úkol.

9.5 PopupMenu.

PopupMenu se nebojte, není to žádné nebezpečné vyskakovací okno. Pokud nevíte, jak to vypadá, tak ve vašem prohlížeči klikněte pravým tlačítkem a to, co se vám zobrazí, to je ono. Vytváří se v menu editoru stejně jako menu normální, ale jeho vlastnost. Tak si vytvoříme menu, jehož horní položka se bude jmenovat mnuNabídka a bude obsahovat položky s názvy mnuVlozit, mnuKopírovat a mnuVyjmout.

Takto bude vypadat základní zobrazení menu:


Form2.PopupMenu mnuNabidka

Můžeme použít i umístění na formuláři takto:


Form2.PopupMenu mnuNabidka, , 100, 100

Menu bude 100 twipů na výšku a 100 twipů na délku vzdáleno od rohu formuláře. A ještě můžeme vybrat defaultní (předvybranou) položku takto:


Form2.PopupMenu mnuNabidka, , 100, 100, mnuKopirovat

Nápis mnuKopírovat bude vyznačen tučně.

Zatím sice nevíte, jak použít pravé tlačítko myši, ale to nevadí, protože to zjistíte v další lekci.

9.6 Domácí úkol

Ano, milí přátelé, už je tady náš a váš domácí úkol: Vaším úkolem bude vytvoření prohlížeče obrázků, který bude obrázky načítat pomocí CommonDialogu. Bude, jak už jsem sliboval, zobrazovat i hodiny, které ukazují pouze hodiny a minuty (ne vteřiny). Všechny chybičky se pokusíte vychytat. PopupMenu nechám až na úkol v příští lekci. No tak to by mohlo stačit, ale nestačí. Ještě se po startu programu změní barvy prvků. A to tak, jak jsem psal, pokuste se využít obě metody. Zkuste udělat použitelné uživatelské rozhraní.

9.7 V další lekci

Původně jsem sliboval ještě reakce na kliknutí a stisknutí kláves, ale pro nečekaně velký obsah této lekce se veselí nekoná, a toto téma přesouvám do další lekce, ve které se budu zabývat poli a kolekcemi. Pokud se zase tak nerozepíšu, řeknu vám i něco o používání CommonDialogu na ukládání.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý