Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 3 - Text a reálná čísla, náhodnost, tvoříme stopky

Druhá část byla celkem zmatená a tak to tato bude muset zase urovnat. Říkali jsme si o proměnných, ale uvedli si jenom datový typ INTEGER. Dnes přistoupíme i k jiným:

Začněme třeba tím nejjednodušším. Buď ano, nebo ne! Přesněji True, či Flase:

Boolean

Například položka Enabled. To je Boolean. Určíte buď TRUE (=ano), jako přístupné, nebo FALSE (=ne), jako nepřístupný! Další příklady booleanů: Visible, ShowHint aj.

Užití:

if Panel1.Visible then
  Panel1.Visible := False;

To je to samé jako:

f Panel1.Visible = True then
  Panel1.Visible := False;

To 1. je zkrácené. U zjišťování FALSE je to podobné, ve zkrácené verzi využijeme slovíčka not, které znamená negaci:

if Panel1.Visible = False then
  Panel1.Visible := True;

A kratší:

if not Panel1.Visible then
  Panel1.Visible := True;

Tímhle jsem vlastně ukázal všechen způsob zápisu a můžeme se pustit do textů:

Už znáte celá čísla, ano/ne a zbývá text:

String (Text)

V překladu "řetězec". A čeho? Znaků! Tj. číslic, písmen, znamének, prostě všeho, co najdete na klávesnici. Příklady stringů: Caption, Text aj.

Užití:

if Panel1.Caption = 'Ahoj' then
  Panel1.Caption := 'Nashle';

A naopak:

if Panel1.Caption = 'Nashle' then
  Panel1.Caption := 'Ahoj'

Texty už znáte, tak se vraťme k číslům: Jako poslední umístím čísla! Tato jsou ale na rozdíl od Integeru i desetinná:

Real (reálná čísla)

Číslo, které se těžko ohraničuje, ale mělo by být přibližně mezi -10*10 na 38 a 10*10 na 38. Je to ale šílené. Kolik desetinných míst má, to taky nevím. Hlavní je, že se s ním dá lépe počítat:

  • KRÁT - * (hvězdička)
  • PLUS - + (plus)
  • MINUS - - (minus)
  • DĚLENO - / (děleno)

Př.:
5 / 2 = 2.5
5 * 2 = 10
5 + 2 = 7
5 - 2 = 3

Používá se podobně, jako Integer. A to je protentokrát z proměnných vše!

A teď je na řadě pár vychytávek:

IntToStr & StrToInt

Slouží pro převod STRINGU na INTEGER a naopak (IntToStr=Integer na String a StrToInt=String na Integer).

Užití:

Panel1.Caption := 'Je to ' + IntToStr(Pocet);

Nápis na panelu bude "Je to " a hodnota proměnné Pocet!

Pocet := StrToInt(Edit1.Text);

Proměnná Pocet bude mít hodnotu čísla, které se napíše do Editu1. Zde mohou nastat problémy: Pokud do Editu1 doplníte písmeno, program bude hlásit chyby!

Ale jdeme dále:

Var (proměnná)

To jsem měl uvést už minule. Pokud nechcete, aby vám proměnná zabírala část operační paměti celou dobu spuštění programu, ale jen za běhu nějaké procedury (oddílu v programu).

Užití: Mezi řádek s procedure a řádek s begin se vloží var a za něj už píšete stejně, jako za Public nahoře v programu. Tentokrát se však proměnná zruší po proběhnutí procedury (oddílu od begin k příslušnému endu). Př.:

procedure TForm1.FormCreate(Sender: TObject);
var Napis : string;
    Cislo : Integer;
begin
  ...
end;

Místo ... je samozřejmě nějaký duchaplný obsah procedury. A mám to. 2 mouchy jednou ranou. Seznámení s procedurami a s varem (ne vody, ale příkazem var ;-) ).

A poslední 2 vychytávky:

Randomize & Random (Náhodnost)

Slouží k tvorbě náhodných čísel. Musíte nejprve (na začátku programu, nebo před generováním čísla) napsat příkaz Randomize; Ten spustí "generátor" náhodných čísel. Pak už stačí psát např.:

Cislo := Random(10);<br>

To znamená, že Cislo bude mít náhodnou hodnotu od nuly (včetně ní) do 10 (bez ní) - může být tedy 0, 1, 2, 3, 4, 5, 6, 7, 8, nebo 9!

Chcete-li číslo např. od 12(bez ní) do 50 (včetně ní), napíšete

Cislo := Random(38) + 13;

Když bude číslo vybrané počítačem nula, Cislo bude 13, když bude číslo 37, bude Cislo 37+13 a to je 50! To bychom měli. A teď poslední:

Else (jinak)

Else neboli Jinak! Používá se za endem, ale ne vždy! Užití:

if Cislo = 1 then
begin
   Cislo := 2;
end else
if Cislo = 2 then
  Cislo := 3
else
if Cislo = 3 then
begin
  Cislo := 1;
end;

Pokud je Cislo 1:
Stane se v první části dvojkou. Ale 2. část se ptá, jestli je Cislo dvojka a to už nyní je! Proto se musí vložit ELSE. Pokud se spustí 1. část, ostatní, navázané na sebe pomocí else, se nespustí!

Tento způsob se hodí třeba do Timeru (časovače)! K Cislu se vždy přičte jedna a místo zbytečného Cislo := ... se dá nějaká věc, která se bude opakovat ve třech (nebo i více, či méně) fázích!
POZOR!!!!!
Za příkaz před příkazem else a za příkaz else se nepíše středník. Př.: řádek 4 - za end není ;
řádek 7 - za Cislo := 3 není ;

A to je ze specialitek vše! Teď se pusťme do dalších objektů, navštívíme položku Additional:

Maskedit

Třetí od leva je okénko s dvěma křížky (##), MaskEdit.

To je vlastně MASKovací EDIT. Jak vypadá rámeček ve Windows na zadání uživatelského hesla? Stejně jako ten na jméno (to je EDIT). Ale když do něj něco chcete psát, vždycky se objeví hvězdička (*). V Delphi si dokonce symbol (místo *) můžete vybrat. Ale to si řekneme u funkcí v tabulce Properties v Object Inspectoru:

  • PasswordChar - Zde si nastavíte, co se bude zobrazovat místo písmen, číslic a jiných znaků. Pokud zadáte #0 , bude každé písmeno takové, jaké má být. Pokud například P, bude místo Ahoj PPPP!

A to je vlastně všechno. Správný text je v položce text, akorát se zobrazí něco jiného. Zůstaňme v položce Additional a pojďme k jiným objektům:

"Já chci taky tlačítka, jako jsou v Malování! Ta s těmi obrázky!" "Ano? Není problém! S Delphi ne!" Řešení leží na druhém místě zleva v Additional:

Speedbutton

Nejlepší (a nesložitější) tlačítko v Delphi! Je zde spousta nastavení v tabulce Properties v Object Inspectoru a tak ji rovnou rozebereme:

  • Caption - Za prvé se dá tlačítku přidat nápis (což by člověk možná podle ikonky v nabídce objektů nečekal).
  • Flat - Za druhé z tlačítka uděláte placku, která když nad ní najedete kurzorem vystoupí a když na ní kliknete, tak se propadne. Je to Boolean, takže se nastavuje TRUE (bude to placka), nebo FALSE (je to tlačítko).
  • Glyph - A za třetí přidáme tlačítku slibovaný obrázek. Klikneme dvakrát na položku Glyph, v okně na Load... a načteme nějaký obrázek (bitmapu - *.bmp). A je to!
  • GroupIndex - "A za čtvrté?" "V Malování kliknu na obrázek a ten zůstane promáčknutý!" Proto je tu číslo skupiny tlačítek. V každé skupině je jedno tlačítko promáčknuté. Pokud máte GroupIndex 0, není v žádné skupině. Jakmile je tlačítko v nějaké skupině, zůstane po kliknutí promáčknuté. Když ale na jiné tlačítko jeho skupiny kliknete, vymáčkne se ven a zamáčknuté bude to nové!

Teď mi odpusťte menší skok v tabulce Properties v Object Inspectoru zpět nahoru:

  • Down - Boolean! Vy už určitě víte, co to je! Ano, TRUE (tlačítko bude promáčknuté - pokud nemáte GroupIndex 0), nebo FALSE (tlačítko bude normálně)!

No a to je všecičko :-) ! Jdeme dál: Když už jsme u těch tlačítek, ukážeme si ještě jedno - poslední (úplně vlevo):

Bitbutton

Tlačítko, s funkcemi podobnými, jako u SpeedButtonu. Spíš slabšími - jde zde dát jenom nápis a obrázek. Asi vás zklamu, že jsem vypleskal jeden bod za takový šmejd, ale někdy by vás to stejně čekalo :-)

Tak mi to promiňte a pojďte dělat tvary:

Tvary? Všechny ne, jenom elipsu, obdélník a zaoblený obdélník. Objekt je v Additional (kde jinde v této části? :-)) sedmý zleva, tedy alespoň v mé verzi Delphi (trojúhelníček, čtvereček a kroužek):

Shape

Když jsem u geniálního SpeedButtonu napsal, že mne překvapilo, že jde přidat nápis, zde mne naopak překvapilo, že nejde dělat trojúhelník, když je na obrázku. Ale to je jedno! Odeberme se k vlastnostem v tabulce Properties v Object Inspectoru:

  • Brush - To je výplň - má dvě odvětví:
    • Color - barva výplně
    • Style - vzorek výplně (mřížka, plná, přímky...)
  • Pen - To je obrys - má čtyři odvětví:
    • Color - barva obrysu
    • Style - typ obrysu (přerušovaná čára, plná čára...)
    • Width - šířka (tloušťka) obrysu (pera) v pixelech
  • Shape - Tohle je to nejdůležitější! Tvar:
    • stCircle-Objekt má tvar kruhu. Je vždy největší, jaký může ve vyhraničeném prostoru být.
    • stEllipse-Objekt má tvar oválu (elipsy). Roztáhne se vždy po celém vyhraničeném prostoru.
    • stRectangle-Objekt má obdélníku. Je stejný, jako vyhraničený prostor (je to skoro to samé, jako Panel :-) ).
    • stRoundRect-Objekt má obdélníku se zaoblenými rohy. Je stejný, jako vyhraničený prostor (kromě rohů).
    • stRoundSquare-Objekt má tvar čtverce se zaoblenými rohy. Je vždy největší, jaký může ve vyhraničeném prostoru být.
    • stSquare-Objekt má tvar čtverce. Je vždy největší, jaký může ve vyhraničeném prostoru být.

A teď můžete svůj program ozdobit tvary (bohužel ne trojúhelníkem)...

"AND THAT'S ALL, FOLKS!" = "A TO JE VŠE, PŘÁTELÉ!"

Teď už jen zbývá souhrn této části pomocí příkladu:

S funkcemi, které už umíte, se dá udělat celkem dobrý program: Rozhodl jsem se, že si uděláme STOPKY!

O co jde ve stopkách? O měření času. A co je k tomu třeba? TIMER.

Do okna Okno tedy vložíme Timer a pojmenujeme ho Meric. Interval nastavíme na 100 (uděláme stopky s přesností na desetiny sekundy). Enabled ještě nastavíme na False. Abyste poznali, že se dá na cokoli použít položka Tag (v tabulce Properties v Object Inspectoru - je to Integer), budeme ji používat jako počet desetin sekundy.

A teď k samotnému času: Klikněte dvakrát na Meric a do procedury, která se vytvoří v okně na editaci textu, pište:

Meric.Tag := Meric.Tag + 1;

To je zatím vše, ale později se ještě vrátíme! Teď vytvoříme 4 Labely. První (jmenuje se Minuty) dáme nalevo. Napravo od něj dáme druhý (jmenuje se Dvojtecka). Třetí (jmenuje se Sekundy) umístíme ještě více vpravo a čtvrtý (jmenuje se Desetiny) umístíme na konec této řady (vpravo). Teď nastavíme položky Caption:
Minuty- 00
Dvojtecka- :
Sekundy- 00
Desetiny- ,

Teď Labely uspořádáme tak, aby tvořily nápis 00:00,0

Font a ostatní neškodné věci si nastavte podle sebe! Teď spustíme program a zkontrolujeme, zda nápis opravdu vypadá tak, jak má (není nutné kontrolovat, ale je to jistější a času to moc nezabere). Vrátíme se do procedury Merice, kam už jsme psali. Za to už napsané píšeme dál:

Desetiny.Caption := ',' + IntToStr(Meric.Tag mod 10);

Nápis Desetiny bude čárka a poslední číslice počtu desetin sekundy. Vytvoříme si 2 proměnné (můžete i pomocí var pro proceduru, do které právě píšete) Seconds a Second. A píšeme dál za předchozí příkaz.

Seconds := Meric.Tag div 10;
Second := Seconds mod 60;
if Second div 10 = 0 then
  Sekundy.Caption := '0' + IntToStr(Second)
else
  Sekundy.Caption := IntToStr(Second);

Teď jsme se postarali o zobrazení počtu sekund. Nejprve jsme určili počet sekund (např. 125). Dále jsme vyrušili minuty (podle př. zbylo 5). Pokud počet vydělíme deseti a vyjde nula (př. 5 děleno 10 = 0; zb.5 - takže VYJDE), zapíše se nula a připíše počet sekund (podle př. 05). Pokud ale nevyjde nula, napíše se jenom číslo. Bez tohoto opatření by měl nápis tvar 00:5 ,X (X znamená nějaké číslo), ale s opatřením má tvar 00:05,X (tedy tak, jak to má být)!

Teď jsme si to objasnili a můžeme psát dál:

Minuty.Caption := IntToStr(Seconds div 60);
if StrToInt(Minuty.Caption) = 100 then
  Meric.Tag := 0;

Tak jsme zapsali počet minut. Funguje až do 99. Jakmile bude mít hodnotu 100, vynuluje se čas (k tomu slouží druhý a třetí řádek - příkaz)! Když teď program spustíme, stejně nebude fungovat. Musíme nejdřív spustit Meric. Vytvoříme proto dvě jakákoli tlačítka (co vás zaujalo - SpeedButton, Button, nebo BitBtn). Jedno pojmenujte Stop a druhé Null. U Stop nastavte Caption jako "Spustit". Klikněte dvakrát na Stop a pište:

if Meric.Enabled then
begin
  Meric.Enabled := False;
  Stop.Caption := 'Spustit';
end else
begin
  Meric.Enabled := True;
  Stop.Caption := 'Zastavit';
end;

Když na Stop kliknete a Meric bude měřit čas, měření se zastaví a na Stopu se objeví nápis Spustit. Pokud ale měřič neběžel, spustí se a Stop bude mít nápis Zastavit. Tak, teď už jenom klikněte dvakrát na Null a napište:

Meric.Tag := 0;

HOTOVO! Stopky jsou vyrobeny. Vzhled si zvolte svůj. Ten bude vždy na vás :-) ! Doufám, že víte, co jste naprogramovali a co k čemu slouží. Pokud ne, můžete mi klidně napsat. A ne jenom k této části. Přeji veselou zábavu. Schválně změřte, jestli vydržíte měřit tak dlouho, že se stopky samy od sebe vynulují :-D . Že si mezitím někam odskočíte, nebo budete dělat něco jiného než civět na vaše graficky krásné stopky, je podvod a pokus už neplatí! Ahoj a programujte (už můžete dělat spousty věcí)...

...Kukensius

P.S.: V minulém díle jsem sliboval, že dnes budu mluvit o dvojitém kliknutí na okno, ale už se to sem nevešlo. Příště se ale už určitě dočkáte!

Delphi

 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 797x (222.04 kB)
Aplikace je včetně zdrojových kódů v jazyce Delphi

 

Předchozí článek
Podmínky, cykly, proměnné, obrázky a další komponenty
Všechny články v sekci
Delphi
Přeskočit článek
(nedoporučujeme)
Události, vlastní procedury a typy, převody textu a čísel
Článek pro vás napsal Kukensius
Avatar
Uživatelské hodnocení:
6 hlasů
Jméno: Lukáš Kučera alias Kukensius<br/> Narození: říjen 1987 (ve znamení vah)<br/> Bydliště: Jihlava, Česká Republika<br/> Studium: 1. ročník magisterského studia<br/> Škola: Vysoké učení technické v Brně<br/> Fakulta: Fakulta elektrotechniky ...
Aktivity