7.1 Písmo a jeho vlastnosti
7.2 Tvoření menu
7.3 Moduly
7.4 Veřejné proměnné
7.5 Funkce
7.6 Domácí úkol
7.7 V další lekci
..
7.1 Písmo a jeho vlastnosti
Písmo a práce s ním bude nyní hlavní látkou, kterou se budeme zabývat. Písmo dělíme na proporcionální a neproporcionální. Proporcionální písmo je písmo, které má pro každý znak jinou šířku, například Arial má jinou šířku třeba pro písmeno „i“ a jinou pro písmeno „m“. Na druhou stranu třeba Courier má pro každé písmeno vymezený stejně široký prostor, je tedy neproporcionální. To nás ale zajímat nebude. Pro nás bude důležité, že písmo může být tučné, kurzívou, přeškrtnuté, podtržené a tak dál, může mít různou barvu a velikost a o tom si budeme povídat.
Label1.FontBold = True ‘tučné
Label1.FontItalic = True ‘kurzíva
Label1.FontSize = 15 'velikost
Label1.FontStrikethru = True ‘přeškrtnutí
Label1.FontUnderline = True ‘odtržení
Label1.Alignment = 2 ‘zarovnání: 0 = vlevo,1 = vpravo, ‘2 = na střed
Label1.ForeColor = &HCC00CC ‘barva v 16kové soustavě
Label1.FontName = "Arial" ‘jméno písma
Zde jsou příklady uvedené na Labelu. Pokud chcete nějakou vlastnost vypnout, třeba tučné písmo, tak True nahradíte False takto:
Label1.FontBold = False
To jsou základy nastavení písma. V příští lekci si ukážeme, jak nastavit font pomocí společného dialogu. Nyní dále.
7.2 Tvorba menu
Základy fontů by byly za námi, teď je tu menu. Kdo neví, co to je, ať se podívá nahoru a tam uvidí nápisy: Soubor Úpravy apod. (doufám, že nemáte anglický prohlížeč), tak to je ono. Pro ty ostatní, co nepochopili, nebo pro ty, co se těší na další PrintScreen, tak je tu obrázek.
Editor tohoto menu se otevře pomoci menu nahoře. Začneme položkou Tools a v ní zvolíme Menu editor (Ctrl+E). Zobrazí se nám následující okno:
Červeně jsou vepsány popisky, ke kterým teď podám vysvětlení.
Popisek položky je vlastně text, který uvidí uživatel, třeba soubor a tak. Název položky je název, se kterým se bude pracovat v kódu. Pro větší přehlednost se položky pojmenovávají mnu… a místo teček jejich popisek, nejlépe bez háčků. Menu má taky vlastní procedury, které jsou na tomto jménu závislé. Pokud tedy jako pojmenování použijete nějaký nesmysl, tak v tom pak budete mít binec, a to především u větších projektů. Pokud tedy budete dělat velký projekt ve skupině, tak není rozumné položku pojmenovat třeba: „khgddr“.
Protože pak se v onom kódu nikdo nevyzná. Teď se podíváme na seznam menu, v něm vidíte popisky položek. Pokud na některou z nich kliknete, tak můžete editovat její nastavení. Před některými popisky vidíte tečky, každé čtyři tečky znamená jeden stupeň vnoření. Zde je obrázek, který vám ukáže, jak to bude vypadat. Ten vypoví víc než všelijaké vysvětlování. Tlačítka Insert Next a Delete jsou zde pro práci s položkami. Tlačítkem Next se přechází na další položku. Tlačítkem Insert se vkládá položka před aktuálně označenou. Tlačítkem Delete se aktuálně označená položka maže. Šipky nám umožňují vnořovat objekty anebo je přesouvat nahoru či dolů. Další nastavení je poměrně zajímavé a umožňuje uživatelsky složitější nastavení, jako je třeba možnost zaškrtnutí anebo klávesové zkratky. Takže od začátku. Index zatím popisovat nebudu. ShortCut čili klávesová zkratka. Vyberete některou z položek a na ni pak toto tlačítko reaguje. HelpContextID zatím též vynecháme. Nebude nás zajímat ani položka NegotiatePosition. Ale podíváme se na zaškrtávací tlačítka. První nám umožňuje, že daná položka může být vybrána jako že vybrána je, třeba když máte nabídku zobrazení >> panel nástrojů >> atd., tak si vybíráte, jestli je některý panel zobrazený nebo ne. Dále je tu vlastnost Enabled, ta určuje, zda je na položku možné kliknout, pokud ne, tak je položka zašedlá. A potom taky vlastnost Visible, která nám udává, zda daná položka bude vůbec vidět. Poslední, tj. WindowList, necháme taky plavat. A podíváme se na to, jak toto menu používat. Takže si vytvořte menu, poté klikněte na OK, menu se vám zobrazí na formuláři, potom si vyberete položku, ke které chcete psát kód, a poklepáte na ni a zapíšte kód jakýkoliv vás napadne, stačí něco jednoduchého, pak si otevřete menu a k položce, kterou jste si vybrali přiřaďte nějakou klávesovou zkratku. Pokud možno pracujte s vnořenými položkami, ne s Top menu. Top menu je ta stále viditelná část. Vnořené položky jsou ty, co se zobrazují, až když chcete. Takže teď program spusťte a stiskněte klávesovou zkratku a měl by se vykonat kód, který jste napsali. Pokud ne, tak jste udělali něco špatně. Měla by to být tatáž reakce jako na stisknutí této položky. Ještě by vás možná zajímalo, jak používat pohybování se v menu pomocí tlačítka Alt. To též není žádný problém, takže před znak, který chcete podtrhnout, použijte v názvu jeho položky znak &. Třeba takto &Soubor bude vypadat takto Soubor. Pokud tedy stisknete Alt S, vyroluje se nabídka položky Soubor. No a to by bylo to hlavní o menu.
7.3 Moduly
Takže moduly mají velmi široké použití. Mohou obsahovat deklarace proměnných nebo vlastní procedury, které si vytvoříte, a taky funkce. Těmi se v této lekci budeme zabývat také. Do modulu se pouze zapisuje kód, nemá žádné vlastnosti kromě vlastnosti Name.
Pojmenovávání modulů se provádí třeba následujícím způsobem: modKvadratickaFce
kde mod udává, že je to modul, a zbytek názvu, co asi obsahuje. Modul se do projektu vkládá pomocí Menu položka Projekt a vyberete Add Module. Tím se vám přidá prázdné okno, do kterého můžete psát kód. To, že tam modul je, se vám projeví také v Okně projekt (popsáno v první lekci). Tím bychom měli přidaný modul. Více se dozvíte dál.
7.4 Veřejné proměnné
V modulu můžete deklarovat jak normální proměnné Dim, tedy lokální, tak se zde dají deklarovat proměnné, které jsou platné v rámci celého projektu a ne jen formuláře, tedy globální. Deklarace globální proměnné vypadají takto.
Public Datum As Date
Public BarvaPozadi As Long
To jsou dva příklady, jak deklarovat veřejné proměnné.
Teď něco o lokální deklaraci. Jsou dva způsoby deklarace:
Dim BarvaNeoznacenePolozky As
' anebo
Private BarvaOznacenePolozky As Variant
Je to prašť jako uhoď. Prostě je to skoro stejné. Ale tyto deklarace
platí jen v rámci modulu. To znamená, že pokud máte dva moduly a v jednom máte
deklarovanou proměnnou Dim Cena a chcete z této proměnné číst ve druhém
modulu, tak tam bude prázdná, protože je deklarovaná pouze pro ten první modul.
Pokud ovšem použijete Public Cena, tak už si bude držet hodnotu (získanou kdekoliv) ve všech použitých modulech tohoto programu.
7.5 Funkce
Funkce a procedury jsou velmi zajímavé a velmi užitečné, proto se jimi budu zabývat celkem dopodrobna a často se k nim budeme vracet a používat je. Dokážou kód nejen zpřehlednit, ale také zkrátit. I práce s kódem, ve kterém se využívá funkcí, je lepší práce. Představte si program, který ve své činnosti má vykonávat stejnou operaci(ce) několikrát, ale pokaždé z jiného místa a s jinými hodnotami. Představte si, že by se určitý kód měl vykonat po stisknutí předdefinované klávesy, nebo by se provedl po kliknutí na nabídku menu anebo po kliknutí na panel nástrojů. To by znamenalo kód psát třeba třikrát. Pokud ale použijete funkci nebo proceduru, stačí to napsat jednou. Prostě je to přehlednější, ale i snazší při ev. opravách programu. Pro začátek si ukážeme něco jednoduššího, začneme funkcí. Funkce pracuje tak, že svým názvem může vracet hodnotu, ale nemusí. Takže jak funkce vypadá? No skoro jako procedura, ale kód je nejnázornější, tak vám to ukážu na něm.
Function Em2L(L1 As Long, L2 As Long, _
I As Long) As Double
Dim L As Long
Dim In2 As Long
L = L1 + L1
In2 = I * I
Em2L = L * In2 / 2
End Function
Takto podobně může vypadat kód, který vám spočítá magnetickou energii dvou cívek. Funkce se definuje tím, že napíšete Function. Jméno funkce je zde Em2L Tohle jméno není nesmysl, ale má informační účel, obsahuje zkratky toho, co počítáme. V závorkách jsou hodnoty, které funkci předáváme. To znamená, že v našem případě musíme zadat hodnotu L1 jako Long, L2 také jako Long a totéž I. Ale na tuto funkci se musíte odněkud něčím odkázat a to něco je třeba následující kód.
Private Sub Form_Click()
Print Em2L(10, 15, 50)
End Sub
Takhle nám sice ona funkce vyhodí správný výsledek, ale k čemu nám to bude, když bude pořád stejný. Proto se čísla nahradí proměnnými, do kterých můžeme vložit vlastní hodnoty. Pokud tedy zadaná hodnota 10 je pro L1, 15 pro L2 a 50 pro I. Tak se to vše ve funkci spočítá a zobrazí nám to výsledek na formuláři. Pokud ale hodnoty, které tam mám uvedeny, nahradíme proměnnými, tak to může vypadat třeba takto:
Private Sub Form_Click()
Civka1 = Text1.Text
Civka2 = Text2.Text
Proud = Text3.Text
Print Em2L(Civka1, Civka2, Proud)
End Sub
Výsledek vyjde podle zadaných hodnot. Nemusí se však zadávat jen proměnné, ale můžeme použít i vlastnosti prvků takto:
Private Sub Form_Click()
Print Em2L(Text1.Text, Text2.Text, Text3.Text)
End Sub
Výsledek bude záležet opět na zadaných hodnotách.
Funkce je nejlepší zapisovat do modulů. Z modulů je můžete používat odkudkoliv. Pokud ale budete chtít tuto proceduru používat jen v rámci jednoho modulu, kde ji budou používat ostatní funkce právě tohoto modulu, a pro jiný modul budete chtít použít funkci se stejným názvem, ale jiným obsahem kódu, tak se z ní musí udělat funkce privátní:
Private Function Em2L(L1 As Long, _
L2 As Long, I As Long) As Double
Dim L As Long
Dim In2 As Long
L = L1 + L1
In2 = I * I
Em2L = L * In2 / 2
End Function
Takto zapsaná funkce bude platná jen v rámci jednoho modulu. Privátní funkce mají ale mnohem menší použití než globální (bez private). Ješte uvedu jeden příklad pro ty, co to nepochopili.
' Do Modulu:
Const Pi As Double = 3.141592654
Const MIo As Double = 4 * Pi * 10 ^ -7
Function Sila(MIr As Double, I1 As Double, _
I2 As Double, Delka As Double, Vzdalenost
As Double) As Double
Dim Part1 As Double
Dim Part2 As Double
Part1 = (MIr * MIo) / (2 * Pi)
Part2 = (I1 * I2 * Delka) / Vzdalenost
Sila = Part1 * Part2 ' výsledek se musí přesunout do jména funkce
End Function
' Do Formuláře:
Private Sub Command1_Click()
Print Sila(1, 1, 1, 1, 1)
End Sub
Zde se počítá působení dvou vodičů mezi sebou. To ale není důležité. Důležité je to, že jsme si definovali funkci Sila, která po nás chce vstupní hodnoty. My jí tyto hodnoty poskytneme, jakmile ji zavoláme příkazem. Příkladně v příkazu Print Sila(1, 1, 1, 1, 1) jsme zadali samé jedničky, ale může tam být cokoliv. Jelikož se hodnota výsledku vrací v jejím názvu, tak se výsledek rovnou vytiskne. Nemusíme ho tisknout, ale můžeme ho uložit do proměnné třeba takto:
F2Vodicu = Sila(1, 1, 1, 1, 1)
V jejím názvu ale hodnotu vracet nemusíme, protože to prostě někdy není potřeba. Představte si, že potřebujete jen upravit hodnoty nějakých objektů pomocí funkce.
Tak si definujete třeba funkci default která vám všechny objekty nastaví, tak jak mají vypadat. Jak byly při startu programu. Nebo třeba pro obnovení původního nastavení, pro smazání proměnných apod. Zde není potřeba vracet hodnotu. Funkci ani nemusíme předávat parametry, tedy hodnoty, pokud je nepotřebuje. Pak může vypadat třeba takto:
Function default(a as long, b as long)
Form1.Text1.Text = 0
Form1.Text2.Text = 0
Form1.Check1.Value = 0
End Function
Funkci pak můžeme volat dvěma způsoby:
default 3, 5
nebo
Call default(3, 5)
Není na tom nic složitého, prostě se ta funkce jen zavolá (Call).
Proč Form1.Text1.Text = 0 a ne jen Text1.Text = 0? To je jednoduché, protože tato funkce je definovaná v modulu a modul žádné prvky nemá, proto se z něj musíte odkazovat na formulář, tedy Form1… Byla by zde ale ještě jedna možnost, ta je elegantnější, a dokonce i lepší. Takže to lze napsat takto>
Function default(Frm As Form)
Frm.Text1.Text = 0
Frm.Text2.Text = 0
Frm.Check1.Value = 1
End Function
To je funkce a budeme ji volat takto:
Private Sub Command1_Click()
default Form1
End Sub
Form1 je vlastně parametr, se kterým funkce pracuje, to znamená, že se zjednoduší kód a není potřeba ho předělávat, pokud třeba jen chcete změnit formulář, tj. použít ji i pro jiný formulář. Tak ji stačí zavolat a do parametru frm zadat třeba Form2. Stejně tak se dá pracovat i s jinými objekty. V tom je obrovská síla funkcí. Jak se dostaneme k vykreslování matematických funkcí pomocí programových funkcí, tak to sami zjistíte.
Kdy, kde a jak funkci volat a kde použít a nepoužít závorky?
a) pokud předáváme hodnotu do proměnné:
- promenna = nazev(parametry)
b) pokud máme funkci bez vráceného výsledku
v názvu:
- Call nazev(parametry)
- nazev parametry
c) pokud máme funkci bez parametrů
- Call nazev
- nazev
d) pokud máme funkci bez parametrů, ale
ukládáme ji do proměnné
- promenna = nazev
e) pokud s ní pracujeme v číselných nebo
jiných operacích
vysledek = (x * nazev(parametry)) ^ 2
To by byly základy používání funkcí. Jelikož je tato lekce velmi obsáhlá a poměrně dlouhá, dokonce tak, že jsem to ani já nečekal, a to jsem měl v plánu ještě dvě kapitoly. Tak ji předčasně ukončím domácím úkolem a pokračovat budu až další lekcí, která na tuto bude navazovat, jako by to byla jedna lekce.
7.6 Domácí úkol
Úkolem bude vytvoření programu, který bude umět spočítat obvod a obsah čtverce, kruhu a obdélníku, na vše použijete funkce. Na výběr toho, jaký obrazec budete počítat, bude sloužit OptionButton. A budete mít možnost výběru, zda chcete počítat jen obvod, jen obsah nebo oba dva, a to pomocí CheckBoxů.
Za druhé si vyzkoušíte menu, protože to vám z kódu nezkontroluji, i když bych možná mohl.
7.7 V další lekci
Procedury, vkládání a používání více formulářů, CommonDialog, prvky na prolistování obsahu disku. Používaní „Me“ a With a End With.