Trochu teórie  
  
Prečo ideme programovať v Delphi?       
- Delphi je vizuálne programové prostredie, ktoré slúži na vývoj aplikácií pre OS Windows (podobne ako Visual Basic, C++Builder a pod.) - takéto prostredia zjednodušujú programovanie Windows aplikácií - vzhľad aplikácie pod Windows môžeme zostavovať z ponuky komponentov, pričom samotné vývojové prostredie (napr. Delphi) pomáha pri začleňovaní zodpovedajúceho kódu 
 
  
- takéto moderné programovacie jazyky umožňujú začať programovať objektovým prístupom – je to metodológia, bez ktorej sa v súčasnosti nezaobídeme pri práci v tíme, pri práci s veľkými projektmi, pri tvorbe Windows aplikácií
 
  
- v Delphi sa programuje moderným programovacím jazykom objektovým pascalom - tento vychádza z Turbo Pascalu, ale pritom si treba uvedomiť, že 
Pascal sa v informatickej komunite považuje za "esperanto" programovacích jazykov 
 
  
- 
je ideálny jazyk ako úvodný pri vyučovaní programovania - môžeme sa v ňom naučiť veľmi efektívne programovať modernými metódami, 
kto ovláda Pascal, ľahko neskôr prejde na iné procedurálne programovacie jazyky 
  
  
Čo znamená objektovo - orientovaný jazyk?       
V doterajších príkladoch sme zadefinovali a používali buď jednoduché premenné (integer, real, char, ...), štruktúrované premenné (array, set, record, ...). V predchádzajúcom príklade sme však pouťili premenné typu grafická plocha TImage, typu tlačidlo TButton atď. Tieto premenné sa líšia od "obyčajných" premenných tým, že 
  
- 
pamätajú  si svoj momentálny stav v svojich tzv. stavových premenných (napr. pozícia, farba, tvar, ...)
    
- 
majú svoje súkromné príkazy, pomocou ktorých ich nejako riadime, resp. meníme ich stavové premenné - takýmto príkazom  (sú to procedúry) hovoríme metódy
 
  
- 
musia byť vytvorené (nie deklarované) špeciálnym spôsobom - konštruktorom ( Create(...); ) a kým sa takto nevytvoria, nesmú sa vôbec používať 
 
  
- 
takýmto premenným hovoríme OBJEKT - object a typom, z ktorých vytvárame objekty (napr. TCanvas) hovoríme TRIEDA - class,  niekedy sa objektu hovorí aj inštancia triedy 
 
  
- 
 stretli sme sa už s objektmi ako sú napr. Form1, Image1, Button1 aj premenná g, ktoré sú  inštanciou triedy TCanvas
 
  
- 
zatiaľ si o objektoch treba zapamätať, že sú to premenné, ktoré môžu v sebe obsahovať veľa stavových premenných a tiež "v sebe" obsahujú nejaké svoje procedúry (metódy) => tomuto hovoríme zapuzdrenie - enkapsulácia, lebo v jednom "puzdre" sú aj údaje (stavové premenné) aj algoritmy (metódy), ktoré vedia s týmito údajmi pracovať 
  
 
- okrem zapuzdrenia medzi ďalšie vlastnosti objektov patrí dedičnosť - inheritance 
- od definovaného objektu môžeme odvodiť celú hierarchiu objektov t.j. potomkov, ktoré dedia prístup k dátovým aj programovým zložkám a polymorfizmus - zdielanie akcií v hierarchii objektov.
 
  
 
  
Zopakujme si, čo vieme z "Pascalu"!        
Logické hodnoty, logické výrazy
  
- každý výraz sa vyhodnocuje zľava doprava  
- vždy je buď pravdivý alebo nepravdivý, má jednu z dvoch logických hodnôt true alebo false  
- logickú hodnotu vrátia napr. relácie: <, <=, =, <>, >=, >  
- logické operátory: not, or, and, xor  
- priorita operátorov: 
    not 
    *, /, div, mod, and 
    +, –, or, xor 
    =, <>, <, >, <=, >=, in 
    unárne 
    multiplikatívne 
    aditívne 
    relačné 
 
 |  
  |  
FOR - cyklus = cyklus a určitým počtom opakovaní
  
for riadiaca_premenná:=výraz1 to výraz2 do príkaz
  
Pre riadiacu premennú (premennú cyklu for) platí:  
- priradí sa jej hodnota akú nadobúda výraz1 
- výraz2 sa vyhodnotí na začiatku cyklu 
- ak je jeho hodnota menšia ako hodnota výraz1, cyklus sa nevykoná  
- ak je výraz1=výraz2, cyklus prebehne práve raz  
- inak riadiaca_premenná prechádza rozsahom hodnôt medzi výraz1 a výraz2  
- musí byť ordinálneho typu (zatiaľ poznáme len celočíselný ordinálny typ - integer)  
- jej hodnotu programátor v priebehu cyklu nesmie meniť, t.j. nesmie byť na ľavej strane žiadneho priraďovacieho príkazu počas prechodu for-cyklu  
- po skončení cyklu má nedefinovanú hodnotu 
Poznámka: Po skončení cyklu riadiaca premenná nemá hodnotu, ktorú nadobúda výraz2+1 ani žiadnu inú, jej podobnú.  
 |  
  |  
While - cyklus = cyklus s podmienkou na začiatku
  
Táto programová konštrukcia slúži na opakovanie príkazov, kým je splnená nejaká podmienka  
Všeobecný tvar príkazu je: 
  
while podmienka do príkaz
  
- otestuje sa podmienka a ak je pravdivá (true), tak sa vykoná príkaz (t.j. telo cyklu) a celé sa to opakuje  
- ak bude podmienka nepravdivá (false), tak sa telo cyklu už nevykoná a pokračuje sa na príkaze za cyklom  
- ak podmienka bude mať stále hodnotu true, tak vznikne nekonečný cyklus 
- ak nekonečný cyklus (alebo veľmi dlho trvajúci cyklus) neobsahuje špeciálnu vsuvku pre Windows, tak počas cyklu sa systém nedostane ku slovu a tým sa napr. normálne nedá zhodiť bežiaci program    
- jedným z riešení je raz začas použiť volanie Application.ProcessMessages;, ktoré pustí Windows na chvíľu ku slovu a tým dovolí používateľovi ukončiť aplikáciu alebo zatlačiť tlačidlo a pod. - toto volanie ale trochu spomalí priebeh výpočtu  
 |  
  |  
Repeat - cyklus = cyklus s podmienkou na konci
  
Táto programová konštrukcia slúži na opakovanie príkazov,  až kým nie je splnená nejaká podmienka  
Všeobecný tvar príkazu je: 
  
repeat 
    príkaz 1 
    príkaz 2 
    ... 
    príkaz k
  
until podmienka
  
 
- tento cyklus opakovane vykonáva telo cyklu (príkazy medzi slovami repeat a until) a po každom takomto vykonaní týchto príkazov, otestuje podmienku cyklu (logický výraz za slovom until)  
- keď je podmienka splnená (hodnota je true), cyklus končí a pokračuje sa príkazmi za cyklom  
- keď je podmienka nepravdivá (hodnota je false), cyklus pokračuje - hovoríme tomu podmienka ukončenia cyklu  
- tento cyklus sa správa "opačne" ako cyklus while  
- telo cyklu sa vykoná vždy aspoň raz, aj keď je podmienka hneď na začiatku splnená
 |  
  |  
If a Case
  
if  podmienka  then  príkaz 1 else príkaz 2
   
- ak je podmienka splnená, vykoná sa vnorený príkaz 1, ak je hodnota podmienky nepravda, tak sa vykoná vnorený príkaz 2. Neúplný príkaz nemá časť "else".
  
case výraz of
    konštanta1: príkaz1; 
    konštanta2: príkaz2; 
    ... 
    else príkazy 
end; 
pričom vetva else (podobne ako pri if) môže chýbať,  
výraz aj konštanty môžu byť len celočíselného typu
 |  
  |  
Procedúry - podprogramy
  
procedure meno;  
    ... // lokálne deklarácie pre procedúru  
    begin  
    ... // telo procedúry  
    end;  
- pri volaní podprogramu mu môžeme poslať nejaké hodnoty, aby sme nemuseli rôzne špeciality nastavovať v globálnych premenných,  v podprograme zadefinujeme špeciálne lokálne premenné, tzv. formálne parametre, do ktorých sa pred samotným volaním priradia (inicializujú) hodnoty skutočných parametrov.  
 |  
  |  
Štandardné jednoduché typy INTEGER, REAL, BOOLEAN, CHAR
  
Integer  
- hodnoty sú z intervalu -2147483648 .. 2147483647  
- zaberá 4 bajty = 32 bitov, 1bit znamienko  
- definované sú aritmetické operácie +, -, *, div, mod, obidva operandy sú celé čísla  
- relačné operácie <, <=, ..., funkcie pred a succ, príkazy inc a dec  
- štandardné funkcie, napr. sqr, abs  
- šestnástkové konštanty - $, napr. $1e=30 
  
Real  
- čísla vyjadrené desatinným zápisom aj s exponentom  
- obsahuje des. bodku, exponent približne ±300  
- real ± (5.0 x 10^–324 .. 1.7 x 10^308 ) 15-16 číslic 8 bajtov  
- ukážky reálnych čísel 1.23, -3.23989E+02, 9.89E-01  
- pre každé číslo nevieme určiť nasledovné reálne číslo,
t.j. medzi 0 a 0.0001 možno existuje číslo, nemá zmysel nasledovník,
t.j. nefunguje pred ani succ, inc, dec   
- operácie -  +, -, *, /  
- automatická konverzia - keď sa pri reálnej operácii vyskytne celočíslený operand konvertuje sa na reálne číslo, napr. 1+1.5, 1/3 = 1.0/3.0  
- reálne operácie veľmi často majú chyby spôsobené realizáciou v počítači  
- štandardné funkcie, napr. sqrt, sqr, sin, cos, abs 
  
Boolean 
- konštanty - predefinované identifikátory konštanty true, false (ako predtým definované naše konštanty), v pamäti zaberá 1 bajt  
- operácie and, or, not, xor  
- FALSE
- štandardné funkcie: ord, boolean( 0 alebo 1), napr. boolean(0)=FALSE, 
pred,  succ   
Char  
- ordinálny typ, ktorý obsahuje sadu 256 znakov (tzv. ASCII), tieto sú usporiadané 
vnútorne sú reprezentované číselným kódom 0..255, t.j. zaberajú 1 bajt (8 bitov) 
- znakové konštanty v apostrofoch alebo #kód  
- treba si pamätať: 
' '<...<'0'<'1'<...<'9'<...<'A'<'B'<...<'Z'<...<'a'<'b'<...<'z' 
- znakové funkcie: pred, succ, ord, chr (char)  
- treba si pamätať: 
ord(' ')=32; ord('0')=48; ord('1')=49; ...
alebo #32=' '; #48='0'; #49='1'; ... 
ord('A')=65; ord('a')=ord('A')+32=97; ...
t.j. #65='A'; #97='a'; ...  
- ak c obsahuje znak cifry ('0'..'9'), tak ord(c)-ord('0')=cifra (podobne pre písmená)  
- príkazy inc, dec fungujú aj pre znaky (napr. c:='A'; inc(c,32); )  
 |  
  |  
 
  
Práca s farbami       
Už sme sa zoznámili s niekoľkými situáciami, keď sme zadávali nejakú farbu (farba pera, farba výplne, farba pera) - doteraz sme používali preddefinované konštanty, napr. clBlack, clRed, clBlue a pod. 
  
Vo Windows sa farba určuje trojicou čísel, ktoré vyjadrujú v akom množstve treba "namiešať" tri základné farby  - červenú, zelenú a modrú, aby vznikla žiadaná farba - množstvá týchto zložiek sa zadávajú celým číslom od 0 do 255 , 
napr. ak namiešame 0 červenej, 0 zelenej a 255 modrej, vznikne jasná modrá farba; 
0 červenej, 0 zelenej a 0 modrej je čierna; všetky zložky po 255 znamená bielu; 
255 červenej, 255 zelenej a 0 modrej vyrobí žltú a pod. 
  
Vo Windows sa tieto zložky nazývajú Red Green Blue a v Delphi môžeme farby definovať aj pomocou funkcie RGB, ktorá dostáva 3 čísla popisujúce zastúpenie zložiek.
  
Mená niektorých preddefinovaných farieb: 
clBlack 
clMaroon 
clGreen 
clOlive 
clNavy 
clPurple 
clTeal 
clGray 
clSilver 
clRed 
clLime 
clYellow 
clBlue 
clFuchsia 
clAqua 
clLtGray 
clDkGray 
clWhite |  
 RGB(0,0,0) 
RGB(128,0,0) 
RGB(0,128,0) 
RGB(128,128,0) 
RGB(0,0,128) 
RGB(128,0,128) 
RGB(0,128,128) 
RGB(128,128,128) 
RGB(192,192,192) 
RGB(255,0,0) 
RGB(0,255,0) 
RGB(255,255,0) 
RGB(0,0,255) 
RGB(255,0,255) 
RGB(0,255,255) 
RGB(192,192,192) 
RGB(128,128,128) 
RGB(255,255,255)
 |    
 
   
   
 
 
 |