Facebook RSS feed

2. díl - Podmínky, cykly, proměnné, obrázky a další komponenty

Zpět do sekce Delphi

Tentokrát se pustíme už do trochu složitějších věcí. Ale nebojte se, tak strašné to zas nebude, přijdou i horší časy! Borland už dříve vyrobil program Pascal (Basic). S ním se programovaly programy v textovém režimu MS-DOS. Vše se navíc muselo psát.

Dalo se pracovat s grafikou, ale složitě. A v Delphi? V Delphi se akorát vloží BitMaPa (soubor s koncovkou .bmp) a v okně máte obrázek. No, ale vy už od minule víte, že vše se musí dělat přes objekty. Proto tentokrát v prvním bodě zavítáme do položky "Additional":

A vložíme si ikonku s obrázkem krajinky:

Obrázek (Image)

Image to je prostý obrázek.

Obrázek má tyto speciální vlastnosti v tabulce Properties v Object Inspectoru:

-Center - obrázek (bitmapa) bude uprostřed objektu Image
-Picture - bitmapa, která bude v obrázku zobrazena a uložena. Po kliknutí na 3tečky se objeví okno. Dáte Load... , vyberete si na disku bitmapu a uzavřeteokna pomocí OK. Bitmapa je nyní uložena v programu a nemusíte ji schovávat na disku.
-Stretch - bitmapa se roztáhne po celé ploše obrázku
-Transparent - když je TRUE bitmapa bude průhledná v místech, kde je stejná barva, jako v levém dolním bodě bitmapy

A to je z vlastností vše. Teď už mohou být vaše programy zajímavější a hezčí.

Tak jsem vám ukázal věc ze složky Additional, ale teď se zase vrátíme do standartní položky "Standard" :-)

Jako druhý objekt si dnes ukážeme panel.

Panel

Je to plocha, vystouplá, propadlá nebo stejně vysoká jako okolí, na kterou pokládáme ostatní objekty! Je ve složce Standard skoro úplně vpravo. Po kliknutí na plochu se objeví jakoby takové tlačítko. Je ale mnohem větší a při klikání se neprohýbá. Ale co když na něj položíme třeba tlačítko, nebo obrázek? Zkuste ho posunout pryč z panelu! Che, che, nejde to, co?

Pokud jste si všimli, v okně Object TreeView se od panelu udělala čára doprava a teprve na ní je navázán objekt v panelu. A k čemu to tedy je? Když třeba chcete část okna jinak barevnou! Co použijete (zatím, protože složitější věci ještě neznáte)? PANEL!

I u panelu vám řeknu pár specialit v tabulce Properties v Object Inspectoru:

  • Align - pokud jste dělali experimenty, možná jste si všimli, že tato položka je i jinde, ale tady mi připadala nejpodstatnější. Je to jakoby takové přilepování:
    • alBottom-objekt se přilepí ke spodku nedřazeného objektu (má jeho šířku a neodtrhneme ho od spodku objektu)
    • alClient-Tak to někdy dokáže pěkně zprzit vaší práci s rozměry objektu! Ten se prostě roztáhne po celé nadřazeném objektu a vy s rozměry nic nenaděláte.
    • alLeft-objekt se přilepí k levé straně nedřazeného objektu (má jeho výšku a neodtrhneme ho od levé části objektu)
    • alNone-objekt zůstane stejný na stejném místě (nepřilepuje se)
    • alRight-objekt se přilepí k pravé straně nedřazeného objektu (má jeho výšku a neodtrhneme ho od pravé části objektu)
    • alTop-objekt se přilepí k vršku nedřazeného objektu (má jeho šířku a neodtrhneme ho od vršku objektu)
  • BevelInner - nastaví druh vnitřní části:
    • bvLowered- je propadlá
    • bvNone-je stejná jako okolí
    • bvRaised-je vystouplá
  • BevelOuter - nastaví vystouplost celého panelu:
    • bvLowered- je propadlý
    • bvNone-je stejný jako okolí
    • bvRaised-je vystouplý

    Pozn.:  Pokud nastavíte BevelOuter a BevelInner každý opačně, bude vnitřek stejně vysoko jako okolí, ale bude ohraničen rantlem (vystouplým či propadlým)

  • BevelWidth - šířka jednoho okraje (délka svahu panelu v pixelech)
  • Caption nápis na panelu (já ho moc nepoužívám, takže ho vždy smažu)<
  • Color - barva pozadí (plochy) panelu

A to je z vlastností vše. Docela dost věcí navíc, tak je využijte!

Tak jdeme dál. Teď vám řeknu (vlastně napíšu), jak si předem vybrat několik věcí:

Checkbox

CHECKBOX je "zaškrtávací krabička". Je to malý rámeček, u nehož je popisek. Když na něj klikneme, objeví se, nebo zmizí "fajfka" v rámečku.

Checkbox

CheckBox má několik speciálních vlastností (překvapení, že?):

  • Alignment - určíte buď že bude rámeček vlevo a nápis vpravo (taRightJustify) nebo naopak - nápis vlevo a rámeček vpravo (taLeftJustify)
  • Caption - Popisek u rámečku
  • Checked - buď TRUE(rámeček je zaškrtnutý), nebo FALSE (je prázdný)
  • Color - barva pozadí textu a okolí rámečku
  • Font - font popisku rámečku
  • State - nastaví obsah rámečku
    • cbGrayed- šedá fajfka
    • cbChecked- černá fajfka
    • cbUnchecked- prázdný

A to je z vlastností vše. Na konci tohoto dílu si ukážeme bližší využití!

A co když chcete ze zaškrtávátek vybrat pouze jedno? K tomu slouží RADIOBUTTON.

Radiobutton

V určité skupině těchto objektů může být zatržen pouze jeden. Akorát narozdíl od CheckBoxu je rámeček ve tvaru kolečka a označen je tečkou! Funkce v tabulce Properties v Object Inspectoru jsou stejné jako u CheckBoxu (3.). V jednom nadřazeném objektu se budou RadioButtony přepínat mezi sebou. V odlišných však vznikají skupiny. Např.: Do Panel1 dáte RadioButton1 a RadioButton2 a do Panel2 dáte RadioButton3 a RadioButton4. Potom se budou přepínat mezi sebou RB1 a RB2, ale když na ně kliknete, nezmizí kolečko z RB3 nebo RB4. A naopak...

V prvním bodě jsem vám ukázal věc ze složky Additional a teď navštívíme položku System:

Začneme prvním objektem zleva a ostatní až jindy Timer.

Timer

Kdo umí anglicky, už si asi domyslel, že to bude něco s časem. Je. Každému se přece do programu hodí načasování. Třeba že když se otevře okno (spustí program), je jeho obsah prázdný - a po pěti sekundách BAF, objeví se tlačítko- dejme tomu na ukončení. Ano i taková blbost je program. A já vám teď napíšu, jak Timer využít. Jako příklad uvedu ten potroublý program: Nejprve to chce znát funkce Timeru v tabulce Properties v Object Inspectoru:

  • Enabled - POZOR!!!!!

    U Timeru je výjimka: nastaví se zde, zda časovač běží(TRUE), nebo ne(FALSE)!

  • Interval - To je základ Timeru. Nastavíte čas v tisícinách sekundy (takže pokud chceme těch 5 sekund, doplníme 5000), po kterém se spustí obsah položky OnTimer; v tabulce Events.

A teď rovnou k příkladu:

Vložíme Timer a Button(Tlačítko)-ten pojmenujeme Konec a VISIBLE nastavíme na FALSE - tlačítko není vidět.

A u Timeru-pojmenujte ho třeba Cas-nastavíme:

  • ENABLED na TRUE, protože chceme, aby Timer běžel.
  • INTERVAL na 5000, což je 5sekund.

Teď už víme, že to, co máme v položce OnTimer se spustí každých pět sekund, ale:

  1. Nic v ní nemáme
  2. Stačí nám to pouze jednou

Proto klikneme na rámeček OnTimer a do okna na editaci textu napíšeme:

Konec.Visible := True;
Cas.Enabled := False;

Tedy tlačítko se zviditelní a časovač se zastaví.

Vidíte, A JE TO! Teď už jen nastavit po kliknutí na tlačítko Close; a je to kompletně, jak jsem nahoře naplánoval...

A teď si řekneme, jak tvořit proměnné (pro ty, co neví co to je: je to část paměti počítače, do které si cokoli uložíte, ale musíte předem určit, co do ní chcete uložit):

Nejprve si najděte v okně s editací textu tento úsek:

private
  { Private declarations }
public
  { Public declarations }
end;

Máte ho? Dobře jdeme dál:

Určovat proměnné budeme za (pod) nápis PUBLIC ve tvaru:

Název : typ proměnné;

Název-může být jakýkoli(bez háčků, čárek - pouze čísla a písmena)

Typ proměnné: dnes si ukážeme jeden:

Integer

Integer je celé číslo od - 2.147.483.648 do 2.147.483.647.

Dá se s ním volně počítat. Standartní znaménka:

  • KRÁT - * (hvězdička)
  • PLUS - + (plus)
  • MINUS - - (minus)

Akorát u dělení je výjimka (dělí se se zbytkem):

  • VÝSLEDEK DĚLENÍ - div (vyjde výsledek, ale zbytek se vypustí)
  • ZBYTEK PO DĚLENÍ - mod (vyjde zbytek a výsledek se vypustí)

Příklady s výsledky:
5 div 2 = 2
5 mod 2 = 1
5 * 2 = 10
5 + 2 = 7
5 - 2 = 3

Tak jsme si ukázali, jak počítat, a teď si ukážeme, jak čísla využít:

Potřebujeme znát příkaz IF.

If (pokud)

Jeden z nejhlavnějších příkazů v Delphi.

Má tvar : if NázevProměnné znaménko výsledek then
NázevProměnné - jméno proměnné, u které zjišťujete danou věc
Znaménko - porovnání, může být:

  • = proměnná je stejná jako výsledek
  • < - proměnná je menší než výsledek
  • > - proměnná je větší než výsledek
  • <> - proměnná je jiná než výsledek
  • <= - proměnná je stejná nebo menší než výsledek
  • >= - proměnná je stejná nebo větší než výsledek

Výsledek - je to číslo nebo název jiné proměnná, kterou porovnáváme s první proměnnou.
Př.:

if Cislo1 = Cislo2 then
Close;

Tento příkaz znamená, že pokud hodnota proměnné Cislo1 bude stejná, jako hodnota proměnné Cislo2, ukončí se program. Pokud chcete, aby se staly dvě věci (nebo více), musíte je ohraničit BEGINem a ENDem!:

if Cislo1 = 57 then
begin
  Button1.Caption := 'Tlačítko';
  Button1.Hint := 'Popisek tlačítka';
end;

Nyní se poté, co bude Cislo1 mít hodnotu 57, objeví na tlačítku Button1 objeví nápis tlačítko a pokud je na něm nastavené, že se zobrazí HINT, po ukázání na tlačítko se objeví pomocný popisek s nápisem "Popisek tlačítka". Vidíte a umíte další věc!

Repeat (Opakování)

Opakování? Ano to lze taky. Pomocí příkazu Repeat (OPAKOVAT). Program bude prostě vyhrazenou část opakovat pořád dokola (ale ne do nekonečna - tedy přesněji: záleží na programátorovi)

Má tvar

repeat
  neco;
until (rovnice);

Něco-část programu, která se má opakovat
Rovnice-část programu se bude opakovat, dokud se nestane to v rovnici

Př.:

repeat
  Cislo := Cislo + 1;
until (Cislo = 100);

Tohle je celkem na nic, ale jako příklad to stačí. K proměnné Cislo se pokaždé přičte 1. A až se hodnota Cislo dostane na stovku, bude program pokračovat dál. P.S.: A co myslíte, že se stane, když nějaký inteligent naprogramuje toto:

repeat
  Button.Visible := True;
until (1=2);

Ano, tlačítko se bude do nekonečna zviditelňovat... (pro ty pomalejší: 1 se nikdy nebude rovnat dvojce!!!!!)

Opakování? Ano to lze taky. Že už jsem to psal? Ano, toto je ještě jeden druh opakování. Ale zde se vám nestane, že se bude opakovat do nekonečna:

For (Pro) cyklus

Ano, není to celý příkaz a tak ho sem rovnou napíšu:

for Integerproměnná := prvníčíslo to posledníčíslo do

O co jde? Tento příkaz bude opakovat část programu za příkazem (buď jeden příkaz, nebo příkazy ohraničené BEGINem a ENDem). Ale: při prvním průběhu části programu se bude Integerproměnná (nějaká proměnná typu Integer) rovnat proměnné, či číslu prvníčíslo. Při dalších opakováních se k Integerproměnné přičte vždy jednička. Jakmile bude mít Integerproměnná stejnou hodnotu jako posledníčíslo, opakování skončí.

Př.:

for Cislo := 0 to 15 do
  Cislo2 := Cislo2 + Cislo;

V prvním kole se k Cislo2 přičte 0, ve druhém 1... a v posledním 15.

Celkem jednoduché a lepší než repeat, ale k něčemu se třeba více hodit nemusí...

Je čas udělat dětem pá pá! Ne, ne, ne! Teletubbies NE! A konec jakbysmet.

Došlo na příklad:

Už toho umíte celkem dost, tak si uděláme kvalitní program:

Form1 přejmenujte na Okno, BorderStyle na bsNone a ostatní jak chcete. Přidejte tlačítko a pojmenujte ho Ukoncit. Caption bude "KONEC" a Visible False. Hlavně to nepouštějte, nejde to zvřít (leda tak pomocí Alt+F4). Nastavte, že po kliknutí na tlačítko se program ukončí(příkaz Close;).

A teď vložte 2 RadioButtony. Jeden pojmenujte On a druhý Off. On bude mít Caption "Lze ukončit" a Off "Nelze ukončit". Klikněte dvakrát na On a objeví se (stejně jako u tlačítka) okno na editaci textu. Napište:

Ukoncit.Visible := True;

To samé udělejte u Off, ale napište:

Ukoncit.Visible := False;

Pro dokonalost u Off v položce Checked nastavte True; A je to při kliknutí na On se tlačítko objeví a když kliknete na Off, zmizí!

Zatím jsme moc věcí zvrchu nevyužili a taky nevyužijeme, ale aby dělal program něco zjímavého, přidáme pár věcí: Pomocí Image můžete přidat obrázky, ale teď se pustíme do něčeho, co vám bude připadat možná trochu ŤUK ŤUK:

Vložte časovač (Timer) a pojmenujte ho Timer (prostě smažte jedničku :) ). Interval nastavte na 250 a Enabled na False. Vytvořte si proměnnou Cislo! Klikněte dvojitě na Okno (sice předbíhám, budu o tom mluvit až příště, ale to snad vydržíte), objeví se odstavec (procedura) v textu, kam se píše to, co se stane při spuštění programu. Sem dejte:

Cislo := 0;

A přidáme zase dva Radiobuttony (na panel!!!Klidně na nevystouplý). Play a Stop. U Stop nastavíme Checked na True. U Play nastavíme, že po kliknutí na něj se spustí Timer (Timer.Enabled := True;) a u Stop Timer.Enabled := False;

A teď Panel. Nastavte Name na Panel a BevelOuter na bvRaised. A nyní se vraťme k Timeru. Klikněte na něj dvakrát (je to to samé, jako kliknout na položku OnTimer v Events). Napište:

Cislo := Cislo +1;
if Cislo = 1 then
  Panel.BevelOuter := bvNone;
if Cislo = 2 then
  Panel.BevelOuter := bvLowered;
if Cislo = 3 then
  Panel.BevelOuter := bvNone;
if Cislo = 4 then
begin
  Panel.BevelOuter := bvRaised;
  Cislo := 0;
end;

A je to! Uvidíte sami, co bude Panel dělat. A to je pro tentokrát vše. Užijte si hraní s Delphi a nestrácejte čas hraním her :-) ! Tak jo, ahoj, asi půjdu pařit Flashpoit :-)..

...Kukensius


 

Stáhnout

2. díl - Podmínky, cykly, proměnné, obrázky a další komponenty 385x (300.24 kB)

 

Č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 vám líbí článek?
Celkem (1 hlasů):
55555


 


Předchozí článek
Úvod do prostředí, Okno a první program
Tento tutoriál vás seznámí s prostředím Delphi. Popíše základní okna a objekty jako tlačítko(button, nápis(label) a Edit. Vytvoříte si první program.
Všechny články v sekci
Delphi
Stránka o Delphi. Programy, hry, komponenty, zdrojáky ke stažení.
Další článek
Text a reálná čísla, náhodnost, tvoříme stopky
V tutoriálu si v delphi ukážeme práci s textem a náhodnými čísly. Představíme si komponenty BitButton a Shape. Nakonec si vytvoříme vlastní stopky.


 

 

Vaše komentáře:

Avatar


Avatar
:

ta transparence image jde jen u formátu .bmp:P

 
Odpovědět 25.12.2011
Avatar
zaza-3
Člen
Avatar
zaza-3:

Supr návod

Odpovědět 12.11.2013
Zklamal si toto město
Avatar


Avatar
:

Ahoj lidi, mám jen jeden dotázek, ve škole se učíme Delphi jako základ k ostatním jazykům a máme takovej úkol kde máme naprogramovat 2 semafory (jen zelená/červená) každej na jednom konci koleje a k tomu máme časy v sekundach kdy má být jaká barva ... semafory jsem si udělal přes Shape ale nevím jak udělat aby se mi měnili ty barvy několikrát během jednoho průběhu timeru

 
Odpovědět 28.12.2013
Avatar
JOF
Redaktor
Avatar
Odpovídá na Morghold
JOF:

Obsluha události Timeru by měla být jednoduchá metoda, která se bude volat v nějakých časových intervalech. Při každém spuštění může (ale samozřejmě nemusí) nějak přepnout semafory a skončí. Nevidím důvod, proč uvnitř té metody měnit ty barvy několikrát.
Přesto, kdyby si ten důvod měl, možná ti pomůže po každé změně barvy zavolat metodu Application.Pro­cessMessages.

 
Odpovědět 28.12.2013
Avatar
-snaživec-
Člen
Avatar
-snaživec-:

Na xubuntu 14.04 mám Lazarusa 1.0.10 a keď kopilujem vyhadzuje mi takýto error:
project1.lpr(20,1) Error: Can't call the resource compiler "/usr/bin/fpcres", switching to external mode
project1.lpr(20,1) Fatal: There were 1 errors compiling module, stopping

Naposledi som to vyriešil reinštalovaním ale nemôžem ho reinštalovať zakaždým keď to spravý.

Odpovědět 4.srpna
Pomali ďalej zájdeš. Smrť Windowsu!

 

Zobrazeno 5 z 5 zpráv

Přidat novou zprávu

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řihlaš. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.