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

Ostatní jazyky Delphi 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!


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal Kukensius
Avatar
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 ...

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 



 

 

Komentáře

Avatar
Martin Kunca
Neregistrovaný
Avatar
Martin Kunca:

¨Dělal jsem se přesně podle Vašeho návodu se stopkami a nefungují !!! Co mi řeknete ?

 
Odpovědět 15.12.2011 9:16
Avatar
Odpovídá na Martin Kunca
David Jančík [sczdavos]:

Dobrý den,
k článku je přiložen zdrojový kód ukázky. Stáhněte jej a porovnejte s vaším.

Odpovědět  +1 15.12.2011 10:06
Čím více času dostaneš, tím méně ho máš.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Martin Kunca
David Čápka:

Řekneme vám, že by nebylo od věci napsat co vám přesně nefunguje, protože se nám zrovna rozbila kříšťálová koule, takže do vašeho počítače nevidíme. Jinak pod článkem je ke stažení zdroják, takový velký nápis Stáhnout ;)

Odpovědět 15.12.2011 20:08
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Vladimír Hampl
Neregistrovaný
Avatar
Vladimír Hampl:

Ahoj,
snažím se vytvořit spínací hodiny pro ovládání com DTR, RTS a Break s možností vícenásobného zapnutí a vypnutí a ještě lépe ovládání ze souboru.Ale nedaří se mi to, potřeboval bych poradit.

Dík
V.H

 
Odpovědět 20.6.2012 8:16
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Vladimír Hampl
David Čápka:

Tak z té věty jsem pochytil jen hodiny :D

Odpovědět 20.6.2012 9:38
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na Vladimír Hampl
David Jančík [sczdavos]:

Ahoj,
díval jsem se C# má přímo podporu. Koukni se na tyhle odkazy, jestli je to ono :)
http://www.dreamincode.net/…ion-in-c%23/
http://msmvps.com/…0_-.NET.aspx
http://www.c-sharpcorner.com/…-in-C-Sharp/

Teď sem zrovna s RS232 a ostatních portů a grafiky byl zkoušenej, jak sem viděl ty vodiče upe sem viděl tu datovou komunikaci a všechny ty signály :D

Odpovědět 20.6.2012 11:50
Čím více času dostaneš, tím méně ho máš.
Avatar
spadislav.p
Člen
Avatar
spadislav.p:

nechci bejt šťoural ale ty stopky se spožďují ... dá se to nějak opravit?

 
Odpovědět  -1 3.1.2014 9:28
Avatar

Člen
Avatar
:

Pro zajímavost jsem chtěl zkusit programovat v Delphi. Stáhl jsem si ze zdejšího odkazu Lazarus 1.2.4. A nestačil jsem se divit. :o Na jedné straně přednosti jako rychlé načtení, čeština v základu, relativně jednoduché kódy. Na druhé straně jakmile jsem vytvořil trochu složitější kód, např. proměnnou, tak to nebyl program schopen sestavit. Zkusil jsem naprosto přesně udělat programy dle zdejších tutoriálů, stáhl jsem si i zdejší aplikace s kódy a porovnával, zda jsem někde neudělal chybu, ale nic jsem nenašel. Přesto Lazarus tam hlásil jednu nesmyslnou chybu za druhou. Pokud není snad nějaká finta, jak zprovoznit programy v Lazarusu, tak to vypadá, že si nerozumí s Delphi kódy.

 
Odpovědět 25.9.2014 17:49
Avatar
Martin
Člen
Avatar
Martin:

Zdravím všechny upozorňuji na to že program na win 8 64 bit má problém a občas chodí ale veščinou ne . na virtuálních XP není problém zkusím i jiný systém . i když nastavím kompatibilitu s XP .

 
Odpovědět 14.11.2015 22:38
Avatar
Martin
Člen
Avatar
Martin:

Ták je skoro hotovo ,

chodí to na virtuálních XPčkách i s virtuálním sériovým portem a zapínám s ním zásuvku .

 
Odpovědět 14.11.2015 23:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.