IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

3. diel - Text a reálne čísla, náhodnosť, tvoríme stopky

Druhá časť bola celkom zmätená a tak to táto bude musieť zase urovnať. Hovorili sme si o premenných, ale uviedli si len dátový typ INTEGER. Dnes pristúpime aj k iným:

Začnime napríklad tým najjednoduchším. Buď áno, alebo nie! Presnejšie True, či flase:

Boolean

Napríklad položka Enabled. To je Boolean. Určíte buď TRUE (= áno), ako prístupné, alebo FALSE (= nie), ako neprístupný! Ďalšie príklady Boolean: Visible, ShowHint ai.

Využitie:

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

To je to isté ako:

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

To 1. je skrátené. U zisťovanie FALSE je to podobné, v skrátenej verzii využijeme slovíčka nôt, ktoré znamená negáciu:

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

A kratšie:

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

Týmto som vlastne ukázal všetok spôsob zápisu a môžeme sa pustiť do textov:

Už poznáte celé čísla, áno / nie a zostáva text:

String (Text)

V preklade "reťazec". A čoho? Znakov! Tj. číslic, písmen, znamienok, jednoducho všetkého, čo nájdete na klávesnici. Príklady stringov: Caption, Text ai.

Využitie:

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

A naopak:

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

Texty už poznáte, tak sa vráťme k číslam: Ako posledný umiestnim čísla! Tieto sú ale na rozdiel od Integer aj desatinná:

Real (reálne čísla)

Číslo, ktoré sa ťažko ohraničuje, ale malo by byť približne medzi -10 * 10 na 38 a 10 * 10 na 38. Je to ale šialené. Koľko desatinných miest má, to taky neviem. Hlavné je, že sa s ním dá lepšie počítať:

  • KRÁT - * (hviezdička)
  • PLUS - + (plus)
  • MINUS - - (mínus)
  • Delený - / (deleno)

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

Používa sa podobne, ako Integer. A to je tentokrát z premenných všetko!

A teraz je na rade pár vychytávok:

IntToStr & StrToInt

Slúži pre prevod String na INTEGER a naopak (IntToStr = Integer na String a StrToInt = String na Integer).

Využitie:

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

Nápis na paneli bude "Je to" a hodnota premennej Pocet!

Pocet := StrToInt(Edit1.Text);

Premenná Pocet bude mať hodnotu čísla, ktoré sa napíše do Editu1. Tu môžu nastať problémy: Ak do Editu1 doplníte písmeno, program bude hlásiť chyby!

Ale ideme ďalej:

Var (premenná)

To som mal uviesť už minule. Ak nechcete, aby vám premenná zaberala časť operačnej pamäte celú dobu spustenie programu, ale len za behu nejaké procedúry (oddielu v programe).

Využitie: Medzi riadok s procedure a riadok s begin sa vloží var a za neho už píšete rovnako, ako za Public hore v programe. Tentoraz sa však premenná zruší po prebehnutí procedúry (oddielu od begin k príslušnému endu). Pr .:

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

Miesto ... je samozrejme nejaký duchaplný obsah procedúry. A mám to. 2 muchy jednou ranou. Zoznámenie s procedúrami as varom (nie vody, ale príkazom var ;-) ).

A posledná 2 vychytávky:

Randomize & Random (Náhodnosť)

Slúži k tvorbe náhodných čísel. Musíte najprv (na začiatku programu, alebo pred generovaním čísla) napísať príkaz Randomize; Ten spustí "generátor" náhodných čísel. Potom už stačí písať napr .:

Cislo := Random(10);<br>

To znamená, že Cislo bude mať náhodnú hodnotu od nuly (vrátane nej) do 10 (bez nej) - môže byť teda 0, 1, 2, 3, 4, 5, 6, 7, 8, alebo 9!

Ak chcete číslo napr. Od 12 (bez nej) do 50 (vrátane nej), napíšete

Cislo := Random(38) + 13;

Keď bude číslo vybranej počítačom nula, Cislo bude 13, keď bude číslo 37, bude Cislo 37 + 13 a to je 50! To by sme mali. A teraz posledná:

Else (inak)

Else čiže Inak! Používa sa za endom, ale nie vždy! Využitie:

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

Ak je Cislo 1:
Stane sa v prvej časti dvojkou. Ale 2. časť sa pýta, či je Cislo dvojka a to už teraz je! Preto sa musí vložiť ELSE. Ak sa spustí 1. časť, ostatné, naviazané na seba pomocou else, sa nespustí!

Tento spôsob sa hodí napríklad do Timeru (časovača)! K číslu sa vždy pripočíta jedna a miesto zbytočného Cislo: = ... sa dá nejaká vec, ktorá sa bude opakovať v troch (alebo aj viac, či menej) fázach!
POZOR !!!!!
Za príkaz pred príkazom else a za príkaz else sa nepíše bodkočiarka. Pr .: riadok 4 - za end nie je;
riadok 7 - za Cislo: = 3 nie je;

A to je zo špecialitiek všetko! Teraz sa pustime do ďalších objektov, navštívime položku Additional:

Maskedit

Tretia od ľava je okienko s dvoma krížikmi (##), MaskEdit.

To je vlastne maskovacích EDIT. Ako vyzerá rámik vo Windows na zadanie používateľského hesla? Rovnako ako ten na meno (to je EDIT). Ale keď do neho niečo chcete písať, vždy sa objaví hviezdička (*). V Delphi si dokonca symbol (namiesto *) môžete vybrať. Ale to si povieme u funkcií v tabuľke Properties v Object Inspector:

  • PasswordChar - Tu si nastavíte, čo sa bude zobrazovať namiesto písmen, číslic a iných znakov. Ak zadáte # 0, bude každé písmeno také, aké má byť. Ak napríklad P, bude namiesto Ahoj PPPP!

A to je vlastne všetko. Správny text je v položke text, akurát sa zobrazí niečo iné. Zostaňme v položke Additional a poďme k iným objektom:

"Ja chcem tiež tlačidlá, ako sú v Maľovanie! Tá s tými obrázky!" "Áno? Nie je problém! S Delphi nie!" Riešenie leží na druhom mieste zľava v Additional:

Speedbutton

Najlepší (a najzložitejšie) tlačidlo v Delphi! Je tu veľa nastavení v tabuľke Properties v Object Inspector a tak ju rovno rozoberieme:

  • Caption - Po prvé sa dá tlačidlu pridať nápis (čo by človek možno podľa ikonky v ponuke objektov nečakal).
  • Flat - Po druhé z tlačidla urobíte placku, ktorá keď nad ňou nabehnete kurzorom vystúpi a keď na nej kliknete, tak sa prepadne. Je to Boolean, takže sa nastavuje TRUE (bude to placka), alebo FALSE (je to tlačidlo).
  • Glyph - A za tretie pridáme tlačidlu sľubovaný obrázok. Klikneme dvakrát na položku Glyph, v okne na Load ... a načítame nejaký obrázok (bitmapu - * .bmp). A je to!
  • GroupIndex - "A za štvrté?" "V Maľovanie kliknem na obrázok a ten zostane preliačiny!" Preto je tu číslo skupiny tlačidiel. V každej skupine je jedno tlačidlo preliačené. Pokiaľ máte GroupIndex 0, nie je v žiadnej skupine. Akonáhle je tlačidlo v nejakej skupine, zostane po kliknutí preliačené. Keď ale na iné tlačidlo jeho skupiny kliknete, vymačkne sa von a zatlačené bude to nové!

Teraz mi odpustite menšie skok v tabuľke Properties v Object Inspector späť hore:

  • Down - Boolean! Vy už určite viete, čo to je! Áno, TRUE (tlačidlo bude preliačené - ak nemáte GroupIndex 0), alebo FALSE (tlačidlo bude normálne)!

No a to je všecičko :-) ! Ideme ďalej: Keď už sme pri tých tlačidiel, ukážeme si ešte jedno - posledné (úplne vľavo):

Bitbutton

Tlačidlo, s funkciami podobnými, ako u SpeedButtonu. Skôr slabšími - ide tu dať len nápis a obrázok. Asi vás sklamem, že som vypleskal jeden bod za taký šmejd, ale niekedy by vás to rovnako čakalo :-)

Tak mi to prepáčte a poďte robiť tvary:

Tvary? Všetky nie, len elipsu, obdĺžnik a zaoblený obdĺžnik. Objekt je v Additional (kde inde v tejto časti? :-)) siedmy zľava, teda aspoň v mojej verzii Delphi (trojuholníček, štvorček a krúžok):

Shape

Keď som u geniálneho SpeedButtonu napísal, že ma prekvapilo, že ide pridať nápis, tu ma naopak prekvapilo, že nejde robiť trojuholník, keď je na obrázku. Ale to je jedno! Odoberie sa k vlastnostiam v tabuľke Properties v Object Inspector:

  • Brush - To je výplň - má dve odvetvia: Color - farba výplne

    Style - vzorka výplne (mriežka, plná, priamky ...)

  • Color - farba výplne
  • Style - vzorka výplne (mriežka, plná, priamky ...)
  • Pen - To je obrys - má štyri sektory: Color - farba obrysu

    Style - typ obrysu (prerušovaná čiara, plná čiara ...)

    Width - šírka (hrúbka) obrysu (pera) v pixeloch

  • Color - farba obrysu
  • Style - typ obrysu (prerušovaná čiara, plná čiara ...)
  • Width - šírka (hrúbka) obrysu (pera) v pixeloch
  • Shape - Toto je to najdôležitejšie! tvar: stCircle-Objekt má tvar kruhu. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.

    stEllipse-Objekt má tvar oválu (elipsy). Roztiahne sa vždy po celom vyhraničeném priestore.

    stRectangle-Objekt má obdĺžnika. Je rovnaký, ako vyhraničený priestor (je to skoro to isté, ako Panel :-) ).

    stRoundRect-Objekt má obdĺžnika so zaoblenými rohmi. Je rovnaký, ako vyhraničený priestor (okrem rohov).

    stRoundSquare-Objekt má tvar štvorca so zaoblenými rohmi. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.

    stSquare-Objekt má tvar štvorca. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.

  • stCircle-Objekt má tvar kruhu. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.
  • stEllipse-Objekt má tvar oválu (elipsy). Roztiahne sa vždy po celom vyhraničeném priestore.
  • stRectangle-Objekt má obdĺžnika. Je rovnaký, ako vyhraničený priestor (je to skoro to isté, ako Panel :-) ).
  • stRoundRect-Objekt má obdĺžnika so zaoblenými rohmi. Je rovnaký, ako vyhraničený priestor (okrem rohov).
  • stRoundSquare-Objekt má tvar štvorca so zaoblenými rohmi. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.
  • stSquare-Objekt má tvar štvorca. Je vždy najväčší, aký môže vo vyhraničeném priestore byť.

A teraz môžete svoj program ozdobiť tvary (bohužiaľ nie trojuholníkom) ...

"AND THAT'S ALL, Folks!" = "A TO JE VŠETKO, PRIATELIA!"

Teraz už len ostáva súhrn tejto časti pomocou príkladu:

S funkciami, ktoré už viete, sa dá urobiť celkom dobrý program: Rozhodol som sa, že si urobíme STOPKY!

O čo ide vo stopkách? O meranie času. A čo je na to treba? TIMER.

Do okna Okno teda vložíme Timer a pomenujeme ho Meric. Interval nastavíme na 100 (urobíme stopky s presnosťou na desatiny sekundy). Enabled ešte nastavíme na False. Aby ste poznali, že sa dá na čokoľvek použiť položka Tag (v tabuľke Properties v Object Inspector - je to Integer), budeme ju používať ako počet desatín sekundy.

A teraz k samotnému času: Kliknite dvakrát na Meric a do procedúry, ktorá sa vytvorí v okne na editáciu textu, píšte:

Meric.Tag := Meric.Tag + 1;

To je zatiaľ všetko, ale neskôr sa ešte vrátime! Teraz vytvoríme 4 labelom. Prvý (volá sa Minúty) dáme naľavo. Napravo od neho dáme druhý (volá sa dvojbodka). Tretia (volá sa Sekundy) umiestnime ešte viac vpravo a štvrtý (volá sa Desatiny) umiestnime na koniec tohto radu (vpravo). Teraz nastavíme položky Caption:
Minuty- 00
Dvojtecka-:
Sekundy- 00
Desetiny-,

Teraz Label usporiadame tak, aby tvorili nápis 00: 00,0

Font a ostatné neškodné veci si nastavte podľa seba! Teraz spustíme program a skontrolujeme, či nápis naozaj vyzerá tak, ako má (nie je nutné kontrolovať, ale je to istejšie a času to moc nezaberie). Vrátime sa do procedúry merača, kam už sme písali. Za to už napísané píšeme ďalej:

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

Nápis Desatiny bude čiarka a posledná číslica počtu desatín sekundy. Vytvoríme si 2 premenné (môžete aj pomocou var pre procedúru, do ktorej práve píšete) Seconds a Second. A píšeme ďalej za predchádzajúci prí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);

Teraz sme sa postarali o zobrazenie počtu sekúnd. Najprv sme určili počet sekúnd (napr. 125). Ďalej sme vyrušili minúty (podľa pr. Zostalo 5). Ak počet vydelíme desiatimi a vyjde nula (pr. 5 delené 10 = 0; zb.5 - takže VYJDE), zapíše sa nula a pripíše počet sekúnd (podľa pr. 05). Pokiaľ ale nevyjde nula, napíše sa len číslo. Bez tohto opatrenia by mal nápis tvar 00: 5, X (X znamená nejaké číslo), ale s opatrením má tvar 00: 05, X (teda tak, ako to má byť)!

Teraz sme si to objasnili a môžeme písať ďalej:

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

Tak sme zapísali počet minút. Funguje až do 99. Akonáhle bude mať hodnotu 100, vynuluje sa čas (k tomu slúži druhý a tretí riadok - príkaz)! Keď teraz program spustíme, rovnako nebude fungovať. Musíme najprv spustiť Meric. Vytvoríme preto dve akákoľvek tlačidlá (čo vás zaujalo - SpeedButton, Button, alebo BitBtn). Jedno pomenujte Stop a druhé Null. U Stop nastavte Caption ako "Spustiť". Kliknite dvakrát na Stop a píšte:

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

Keď na Stop kliknete a Meric bude merať čas, meranie sa zastaví a na Stopu sa objaví nápis Spustiť. Pokiaľ ale merač nebežal, spustí sa a Stop bude mať nápis Zastaviť. Tak, teraz už len kliknite dvakrát na Null a napíšte:

Meric.Tag := 0;

HOTOVO! Stopky sú vyrobené. Vzhľad si zvoľte svoj. Ten bude vždy na vás :-) ! Dúfam, že viete, čo ste naprogramovali a čo k čomu slúži. Ak nie, môžete mi kľudne napísať. A nie len k tejto časti. Prajem veselú zábavu. Schválne zmerajte, či vydržíte merať tak dlho, že sa stopky samé od seba vynulujú :-D . Že si medzitým niekam odskočíte, alebo budete robiť niečo iné ako civieť na vaše graficky krásne stopky, je podvod a pokus už neplatí! Ahoj a programujte (už môžete robiť hŕbu vecí) ...

... Kukensius

PS: V minulom diele som sľuboval, že dnes budem hovoriť o dvojitom kliknutí na okno, ale už sa to sem nevošlo. Nabudúce sa ale už určite dočkáte!

Delphi

 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 798x (222.04 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Delphi

 

Predchádzajúci článok
Podmienky, cykly, premenné, obrázky a ďalšie komponenty
Všetky články v sekcii
Delphi
Preskočiť článok
(neodporúčame)
Udalosti, vlastné procedúry a typy, prevody textu a čísel
Článok pre vás napísal Kukensius
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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