× Aktuálně z oboru

SHIELD Experience Upgrade 7 – méně hledání a více zábavy [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]
Celá zprávička [ clanek/2018052902-shield-experience-upgrade-7-mene-hledani-a-vice-zabavy/ ]

VB - 10. lekce

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-kubec-milan-a-vera/ ]Google [ ?rel=author ]       18. 4. 2005       18 845×

10.1 Reakce na kliknutí myší
10.2 Reakce na zmáčknutí klávesy
10.3 Kolekce prvků a Tagy
10.4 Pole jednorozměrná
10.5 Pole vícerozměrná
10.6 Dynamická pole
10.7 CommonDialog
10.8 Domácí úkol
10.9 V další lekci...

10.1 Reakce na kliknutí myší (tohle je jubilejní, 10 lekce:))

Dost často potřebujete zjistit, na jaké tlačítko myši uživatel kliknul. Pro každé tlačítko potřebujete napsat jinou funkci. Tam musíte rozlišit, na které tlačítko jste klikli. Je nejlepší použít procedury MouseDown, Click, MouseUp, DoubleClick nebo MouseMove.

Zde je ukázka funkce Click a MouseDown:


Private Sub Command1_Click()

End Sub


Private Sub Command1_MouseDown(Button As Integer, _ 
Shift As Integer, X As Single, Y As Single)

End Sub

Funkce MouseDown nám na rozdíl od funkce Click předává i nějaké hodnoty, a to jsou hodnoty Button, ta nám předává číslo stisknutého tlačítka myši, dále Shift, ta nám říká, jestli byl při stisknutí tlačítka zmáčknut i Shift, a hodnoty X a Y nám udávají pozici kurzoru. V tom je velká výhoda a také použitelnost při stisknutí jiných tlačítek než jen levého. Kód může vypadat třeba takto:


Private Sub Command1_MouseDown(Button As Integer, _ 
Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then Print "levé talčítko"
  If Button = 2 Then Print "pravé talčítko"
End Sub

Tady je velmi jednoduchý kód jako ukázka využití:


Private Sub Command1_MouseDown(Button As Integer, _ 
Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then End
  If Button = 2 Then Form1.PopupMenu aaa
End Sub

Ale musíte si vytvořit menu. A pokud na tlačítko kliknete levým tlačítkem, tak se program vypne, a pokud na něj kliknete pravým, tak se vyroluje Popup Menu. První (pouze první) položku v menu musíte nastavit na Visible = False (to se dělá v dialogu pro vytváření menu).


Hodnota Tlačítko
1 levé
2 pravé
3 pravé + levé
4 střední
5 levé + střední
6 pravé + střední
7 levé + pravé + střední

Kombinace se dají používat pouze u metody MouseMove při pohybu myší. Vhodné je psát si pro každé tlačítko funkce a pouze je volat, zpřehledňuje to kód.

10.2 Reakce na zmáčknutí klávesy

Po myši následuje klávesnice, pokud byste chtěli tvořit nějakou hru, tak je to velmi podstatné, ale využití to najde i jako ovládání různých programů. Můžeme využívat těchto procedur:


Private Sub Form_KeyDown(KeyCode As Integer, _ 
Shift As Integer)

End Sub


Private Sub Form_KeyPress(KeyAscii As Integer)

End Sub


Private Sub Form_KeyUp(KeyCode As Integer, _ 
Shift As Integer)

End Sub

Ty nám předávají pro nás podstatný kód Ascii, podle kterého rozlišíme, jaká klávesa byla zmáčknuta, případně můžeme využít i kontroly stisknutého Shiftu. Ukázka funkčnosti:


Private Sub Form_KeyDown(KeyCode As Integer, _ 
Shift As Integer)
  Print Chr(KeyCode)
End Sub

Nebo:

Private Sub Form_KeyDown(KeyCode As Integer, Shift _ 
As Integer)
  If KeyCode = 87 Then Shape1.Top = Shape1.Top - 500
  If KeyCode = 65 Then Shape1.Left = Shape1.Left - 500
  If KeyCode = 83 Then Shape1.Top = Shape1.Top + 500
  If KeyCode = 68 Then Shape1.Left = Shape1.Left + 500
  Print KeyCode
End Sub

Ale nevkládejte na formulář nic jiného než prvek Shape. Jinak tento kód bude nefunkční. To kódy nejsou v praxi příliš využívané, jsou tu proto, abyste věděli, že jsou. Toto není příliš důležité. Kousek využití si ukážeme ještě v takové legraci v příští lekci.

10.3 Kolekce prvků a Tagy

No tohle je teprve téma více méně také jen takové nedůležité, ale někdy se může hodit. Je to práce s kolekcemi prvků. Pokud tedy chcete posunout nebo upravit nějaké objekty najednou, nemusíte je dělat po jednom, ale upravíte celou kolekci. Pokud tedy chcete, můžete třeba při změně barvy pozadí změnit zároveň i barvu tlačítek. Všechny prvky na jednom formuláři jsou členy jedné skupiny, ta se nazývá kolekce Controls. Vytváří se hned při vytvoření nového formuláře a počet obsažených prvků je závislý na počtu vložených prvků. Pro každý formulář je jedna kolekce Controls, a proto musíme zapisovat jména formulářů podle toho, s jakou kolekcí chceme pracovat. Pokud chceme pracovat s jedním prvkem kolekce, můžeme to zapsat takto:


Private Sub Form_Load()
  Form1.Controls!Label1.Caption = "ahoj"
End Sub

Vykřičník přiřazuje objekt ke kolekci. S prvkem můžeme pracovat i podle indexu. Prvky se indexují pozpátku, to znamená, že naposledy vložený prvek má index 0, předposlední 1 a tak dál.


Private Sub Form_Load()
  Form1.Controls(1).Caption = "ahoj"
End Sub

Pokud ale chceme pracovat s celou skupinou, využíváme cyklu For Each Next. Ještě než použijete následující kód, tak si na formulář vložte alespoň 10 objektů. Kód pak může vypadat například takto:


Private Sub Command2_Click()
  For Each objekty In Form1.Controls
    objekty.Left = objekty.Left + 50
  Next objekty
End Sub

Takto se pracuje se všemi prvky, pokud ale prvky nechcete upravit všechny, ale třeba tři vynechat, tak se používají Tagy (záložky). Pokud tedy nechceme pohnout třeba tlačítkem, kterým ostatní prvky přesouváme, napíšeme do jeho vlastnosti Tag text NEPOHYBOVAT. A použijeme následující kód, což má za následek, že Command2 se nám nebude pohybovat.


Private Sub Command2_Click()
  For Each Objekty In Form1.Controls
    If Objekty.Tag <> "NEPOHYBOVAT" Then
      Objekty.Left = Objekty.Left + 50
    End If
  Next Objekty
End Sub

Na ukázku ještě jeden kód:


Private Sub Command2_Click()
  For Each Objekty In Form1.Controls
    If Objekty.Tag <> "NEPOHYBOVAT" Then
      If Objekty.Tag = "OPACNE" Then
        Objekty.Left = Objekty.Left - 50
      Else
        Objekty.Left = Objekty.Left + 50
      End If
    End If
  Next Objekty
End Sub

Ještě než kód použijete, dejte některému prvku do hodnoty Tag text OPACNE. Tak to by bylo ke kolekcím, doufám, že vám to stačí.

10.4 Pole jednorozměrná

Pole, pole ano, ano, to je velmi důležitá kapitola. Pole umožňují ukládat data. Zatím se budeme zabývat jednorozměrnými poli. Pokud si třeba chceme uložit několik výsledků nebo nějakých čísel či jiných záznamů do paměti programu, můžete využít pole. S poli se dá pracovat i v cyklech. Jejich další výhodou je schopnost pojmout obrovské množství dat. Kdyby neexistovala pole, museli bychom používat kvanta proměnných, jež by zhoršovala přehlednost kódu a kód by byl neskutečně rozsáhlý. Dají se tedy používat pro ukládání při cyklických výpočtech. Pole můžeme definovat takto:

Deklarace jednorozměrného pole může vypadat třeba takto:


Public SerioveCislo(400) As Integer

Public je deklarace globálního pole, SerioveCislo je název pole, číslo 400 nám určuje maximální počet pomyslných buněk s daty a As Integer nám říká, jakého typu musí být obsažená data. Takto deklarujte pole do modulu. Pokud chcete pole deklarovat do formuláře, deklarujte takto:


Dim SerioveCislo(400) As Integer

Stručně si můžete jednorozměrné pole představit jako jednořádkovou tabulku a každá její buňka může obsahovat data.

Jak se z pole čte a jak se do něj ukládá. Práce je to velmi jednoduchá, do pole uložíte nebo přečtete data tak, že využijete názvu pole a čísla pomyslné buňky, která data bude obsahovat nebo již obsahuje:


Private Sub Command1_Click()
  SerioveCislo(0) = 53612
  SerioveCislo(1) = 53659
  SerioveCislo(2) = 53769
  SerioveCislo(3) = 53169

  For i = 0 To 400
    If SerioveCislo(i) = 0 Then Exit For
      Print SerioveCislo(i)
    Next i
  End Sub

Další ukázka je bez odchytávání chyb, jen pro názornou ukázku využití pole.


Private Sub Command1_Click()
  For i = 0 To 400
    SerioveCislo(i) = InputBox("Zadejte sériové číslo výroby " _ & i, "Sériová čísla")
    If MsgBox("Chcete zadat další sériové číslo?" _
,vbYesNo, "???") = 7 Then Exit For
  Next i
  For i = 0 To 400
    If SerioveCislo(i) = 0 Then Exit For
    Print SerioveCislo(i)
  Next i
End Sub

10.5 Pole vícerozměrná

Pole mohou mít i několik rozměrů, dvojrozměrné pole si můžeme představit třeba jako tabulku s několika řádky a s několika sloupci. A opět každá z buněk může obsahovat data.  Práce s ním pak může vypadat třeba takto:


Dim ceny(15, 2) As Integer

Private Sub Command1_Click()
  ceny(5, 2) = 92
End Sub

Nezapomínejte, že v Basicu, pokud je pole deklarováno jen jedním rozměrem, se začíná vždy od nuly a ne od jedničky.
Pokud je pole deklarováno takto: Dim Ceny(1 To 15) As ... , pak začíná opravdu od 1 do 15.
Ještě si ukážeme, jak se toto pole dá využít v praxi:


Dim ceny(15, 2) As Integer

Private Sub Command1_Click()

For i = 0 To 15 ceny(i, 0) = InputBox("zadejte _ cenu", "Ceny") Next i For i = 0 To 15 ceny(i, 1) = (ceny(i, 0) + ((ceny(i, _ 0) / 100) * 22)) Next i For i = 0 To 15 ceny(i, 2) = (ceny(i, 0) * 22) / 100 Next i For i = 0 To 15 Print "bez Dph" & ceny(i, 0) _ & "   S dph" & _ ceny(i, 1) & "   dph" _ & ceny(i, 2) Next i End Sub

Rozměrů pole se dá využít daleko víc, třeba tři, čtyři a tak dál. Pokud by vás nenapadlo, jak to použít, tak je mnoho různých možností. Třeba při tvorbě kalendářů. Víc rozměrů umožňuje jednodušší správu dat.

10.6 Dynamická pole

Dynamická pole jsou taková, jejichž velikost volíme až při běhu programu, jednoduchý příklad může vypadat třeba takto:


Dim ceny() As Variant
Dim rdm As Integer

Private Sub Command1_Click()
  rdm = (Val(InputBox("Zadejte počet výrobků", _
 "??")))
  ReDim ceny(rdm)
  For i = 1 To rdm
    ceny(i) = InputBox("Zadejte cenu výrobku číslo" _
 & i)
  Next i
  For i = 1 To rdm
    Print ceny(i)
  Next i
End Sub

Příkaz ReDim je vlastně dodatečné určení velikosti pole. Zbytek je snad pochopitelný, pokud ne, je zde poradna. Dynamickými poli tedy pole zakončím a jdeme dál.

10.7 CommonDialog

Minule jsem říkal, že pokud se příliš nerozepíšu, tak se budu věnovat i CommonDialogu pro ukládání, ale přestože jsem se až zas tak moc nerozepsal, nechám to na jindy. Jsou věcí, které jsou potřeba probrat předtím.

 

10.8 Domácí úkol

Za domácí úkol bude program, který bude pracovat s dvojrozměrným polem, do kterého budeme moci ukládat a ze kterého budeme moci číst pomocí jednoho TextBoxu a několika tlačítek, jimiž se budeme po poli pohybovat. A program budeme moci ovládat pomocí Popup Menu (např. vypnutí a možnost změnit barvu pozadí všech tlačítek  najednou.)

10.9 V další lekci probereme:

Funkce Line, Circle a Pset. Objekty Shape a Line a metoda Drag and Drop.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005041804-vb-10-lekce/ ].