17.9.2002
|
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í,
a keď už nič iné, tak pri programovaní
v 1. ročníku
- 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
- Delphi poskytujú veľmi dobré ladiace
prostriedky
Z čoho sa skladá prostredie Delphi
Prostredie Delphi (budeme popisovať verziu Delphi
6 Professional) vyzerá takto:
a skladá sa z týchto častí:
- horný panel, ktorý obsahuje menu,
lištu povelov a lištu komponentov
- zľava je inšpektor objektov, s ktorým
sa naučíme pracovať neskôr - umožňuje
meniť rôzne parametre použitých komponentov
na formulári
- zvyšok zaberá formulár a editovacie
okno
Ako vytvoríme nový projekt
vo File menu zvolíme New a potom
vyberieme Application:
- Delphi vytvoria nový projekt - súbor
Project1.dpr;
- vytvorí sa prázdny formulár
Form1 - každý projekt (aplikácia)
obsahuje aspoň jeden formulár - je to Windows
okno, ktoré je zatiaľ prázdne, ale
neskôr sem budeme ukladať rôzne komponenty
ako tlačidlá, obrázky, texty, editovacie
okienka a pod. Na formulár Delphi použije
súbor s príponou .dfm, napr. Unit1.dfm;
- vytvorí sa ešte jeden veľmi dôležitý
súbor - bude obsahovať samotný popis
programu, ktorý bude niečo robiť s formulárom.
Na začiatku tento program "skoro" nič
neobsahuje - delphi sem automaticky dalo minimálnu
informáciu, ktorá je potrebná,
aby bol projekt kompletný. Súbor s
pascalovským programom má príponu
.pas, napr. Unit1.pas;
- keď klikneme niekam do editovacieho okna (trčí
pod formulárom), objaví sa momentálny
obsah programu:
Momentálne všetky tri súbory existujú
len v pamäti počítača a treba ich uložiť
na disk.
- Na ukladanie súborov z File menu
zvolíme Save Project As... a určíme
adresár, kam sa má projekt uložiť.
Odporúčame každý projekt ukladať do
samostatného podadresára. Pri ukladaní
môžeme zmeniť meno projektu aj meno programu
k formuláru (momentálne Unit1.pas,
napr. na mojTest.pas);
Projekt spúšťame povelom Run z menu
Run, ale asi si rýchlo zvyknete na klávesovú
skratku F9;
Teraz projekt beží - objaví sa prázdne
okno - projekt ukončíme klávesom Alt-F4
alebo uzavretím aplikácie;
Jednoduchá grafika
Začneme veľmi jednoduchou grafikou: v grafickej ploche
veľkosti aspoň 350x270 budeme pomocou grafického
pera kresliť nejaké geometrické útvary.
Náš prvý program do "grafickej plochy"
nakreslí obdĺžnik.
- Do prázdneho formulára položíme
"grafickú plochu" a jedno tlačidlo:
- ako "grafická plocha" nám
poslúži komponent Image z palety komponentov
"Additional"
- podobne vyberieme tlačidlo Button zo "Štandardnej
palety"
- ak omylom do formulára vložíte
komponent, ktorý tam mať nechcete, jednoducho
naň najprv kliknite myšou a potom ho zrušíte
klávesom Del.
momentálny obsah
editovacieho okna: |
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
|
- Do programu pribudli dva nové riadky,
ktoré definujú dva nové prvky
v našom okne: Image1 (grafická plocha) a
Button1 (tlačidlo).
- Teraz naprogramujeme, ako sa bude správať
program, keď klikneme na tlačidlo -- chceli by sme,
aby sa do "grafickej plochy" nakreslili
nejaké grafické útvary.
- Dvojklikneme vo formulári na tlačidlo
Button1 a vtedy sa nám v editovacom okne
pripraví úsek programu, do ktorého
môžeme písať postupnosť príkazov.
Táto postupnosť sa bude vykonávať
počas behu programu vždy po zatlačení
tlačidla (kliknutí na tlačidlo):
vsunula sa predpripravená
časť programu: |
procedure TForm1.Button1Click(Sender: TObject);
begin
end;
|
aby sa nakreslil obdĺžnik: |
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Canvas.Rectangle(50,100,200,140);
end;
|
- a program spustíme klávesom F9. Po
kliknutí na tlačidlo "Button1" sa v
bielej grafickej ploche objaví obdĺžnik.
- súradnice sú orientované z ľavého
horného rohu do pravého dolného
- ľavý horný roh má súradnice
(0,0) a súradnice pravého dolného
závisia od veľkosti grafickej plochy
- program ukončíme klávesom Alt-F4 alebo
kliknutím na tlačidielko [x] v pravom hornom
rohu
- Aby sme si do budúcna zjednodušili a sprehľadnili
zápis našich programov, namiesto Image1.Canvas
budeme písať jednoducho g (ako grafická
plocha), za ktorým (za bodkou) nasleduje meno
príkazu, ktorý chceme vykonať (Rectangle
znamená obdĺžnik). Na to ale musíme kompilátoru
vysvetliť, čo bude to g znamenať:
- dvojklikneme do formulára mimo Image1 aj mimo
Button1 a vtedy sa v editovacom okne objaví nový
úsek programu - tu budeme definovať príkazy,
ktoré sa majú vykonať pri inicializácii
formulára (t.j. skôr ako sa formulár
objaví)
- sem dopíšeme g:=Image1.Canvas; potom sa vrátime
o niekoľko riadkov vyššie a dopíšeme jeden riadok
aj do definície formulára: var
g:TCanvas;
teraz celý program vyzerá nasledovne:
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
g:TCanvas;
procedure TForm1.Button1Click(Sender: TObject);
begin
g.Rectangle(50,100,200,140);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
g:=Image1.Canvas;
end;
end.
|
- obdĺžnikov môžeme nakresliť aj viac, napr.
3 obdĺžniky pod sebou:
zmenili sme procedúru TForm1.Button1Click:
|
begin
g.Rectangle(50,100,200,130);
g.Rectangle(50,140,200,170);
g.Rectangle(50,180,200,210);
end;
|
- príkazy navzájom oddeľujeme bodkočiarkou
- všetky obdĺžniky boli nakreslené tenkým
čiernym perom a boli vyplnené bielou farbou;
atribúty pera aj výplne môžeme meniť
takýmito priraďovacími príkazmi:
zmenili sme procedúru TForm1.Button1Click:
|
begin
g.Rectangle(50,100,200,160);
g.Pen.Color := clRed;
g.Rectangle(100,130,250,190);
g.Pen.Color := clBlue;
g.Pen.Width := 3;
g.Brush.Color := clYellow;
g.Rectangle(150,160,300,220);
end;
|
- prvý obdĺžnik má čierny obvod, druhý
červený a tretí má hrubý
modrý obvod a je vyplnený žltou farbou:
- rezervované slová begin a end označujú
začiatok a koniec úseku pascalovského
programu
- ďalej ukážeme použitie jednoduchých
premenných a for-cyklu:
zmenili sme procedúru TForm1.Button1Click:
|
var
i:integer;
begin
for i:=1 to 10 do
g.Rectangle(i*30, 10, i*30+20, 200);
end;
|
- tento program nakreslí 10 obdĺžnikov
- prvý riadok var i:integer; definuje jednu
celočíselnú premennú
- (môže
nadobúdať hodnoty z intervalu -2 147 483 648
.. 2 147 483 647, t.j. 231
- celočíselná
aritmetika pascalu pozná tieto operácie:
+, -, *, div a mod
- celočíselné premenné zaberajú
v pamäti počítača 4 bajty, t.j. 32 bitov
- príkaz for-cyklu v pascale má všeobecný
tvar:
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 (označujeme '?')
- Poznámka: Po skončení cyklu riadiaca
premenná nemá hodnotu, ktorú nadobúda
výraz2+1 ani žiadnu inú, jej podobnú.
- ďalší program ukazuje, ako môžeme v
cykle opakovať viac príkazov - uzavrieme ich
medzi begin a end:
zmenili sme procedúru TForm1.Button1Click:
|
var
i:integer;
begin
g.Pen.Width := 3;
g.Pen.Color := clBlue;
for i:=1 to 25 do begin
g.MoveTo(50,i*10);
g.LineTo(350-10*i,i*10);
end;
end;
|
- všimnite si naformátovanie begin
a end - tento spôsob budeme
používať v objektovom pascale - v Delphi
- použili sme ďalšie grafické príkazy:
MoveTo a LineTo, ktoré dostávajú
súradnice bodov v rovine: MoveTo presunie
grafické pero na zadanú pozíciu
a pritom nekreslí čiaru; LineTo tiež
presúva grafické pero, ale za sebou
kreslí čiaru (momentálnou farbou a
hrúbkou, t.j. podľa Pen.Color a Pen.Width)
- doplníme výpis textu do grafickej plochy
príkazom TextOut, ktorý dostane súradnice
a nejaký text:
zmenili sme procedúru TForm1.Button1Click: |
var
i:integer;
begin
g.Pen.Width := 3;
g.Pen.Color := clGreen;
for i:=1 to 15 do begin
g.TextOut(10,i*15-8,IntToStr(i));
g.MoveTo(50,i*15);
g.LineTo(350-10*i,i*15);
end;
end;
|
- použili sme štandardnú funkciu IntToStr, ktorá
z celého čísla vyrobí "text",
aby sme ho mohli vypísať (TextOut vie vypisovať
len znakové reťazce, napr. g.TextOut(100,200,'Ako
sa máš?'))
Zhrnutie grafických príkazov a atribútov
- v grafickej ploche môžeme kresliť pomocou (neviditeľného)
grafického pera (Pen)
- základné príkazy (procedúry)
na prácu s perom:
- g.MoveTo(x,y); // presunie pero bez kreslenia čiary
- g.LineTo(x,y); //
presunie pero s kreslením
čiary
- g.Rectangle(x1,y1,x2,y2); // nakreslí obdĺžnik
- pero je na začiatku nastavené na kreslenie
čiernou farbou - plné (neprerušované)
čiary hrúbky 1; toto môžeme zmeniť priraďovacími
príkazmi:
- g.Pen.Color := clRed; // nastaví
farbu pera na červenú
- ďalšie mená farieb, napr.: clBlack, clWhite,
clRed, clBlue, clYellow, clGreen, ...
- g.Pen.Width := 3; // nastaví
hrúbku pera 3
- g.Pen.Style := psDash; // nastaví
štýl kreslenia čiar na čiarkovaný -- iné
štýly ako psSolid (normálne čiary) fungujú
len pre hrúbku 1
- psSolid, psDash, psDot, psDashDot, psDashDotDot,
...
- obdĺžnik, ktorý sme kreslili na začiatku,
sa neskladá len zo 4 čiar, ale je vyplnený
bielou farbou. Podobne, ako sme menili nastavenia grafického
pera, môžeme meniť aj nastavenia pre vypĺňanie:
- g.Brush.Color := clYellow; // nastaví
farbu výplne
- g.Brush.Style := bsVertical; //
nastaví šrafovanie -- bsSolid je normálne
vypĺňanie, bsClear znamená obdĺžnik bez vyplneného
vnútra
- ďalšie štýly: bsSolid, bsClear, bsHorizontal,
bsVertical, ...
- podobne ako obdĺžnik sa kreslí aj elipsa (nastavené
atribúty pera pre obrys a parametre výplne
pre vnútro):
- g.Ellipse(x1,y1,x2,y2); //
zadávame súradnice opísaného
obdĺžnika, ak je obdĺžnikom štvorec, nakreslí
sa kruh
- výpis textového reťazca
- g.TextOut(x,y,textový-reťazec); //
textový reťazec je buď konštanta 'nejaký
text' alebo funkcia, ktorá vytvára textový
reťazec, napr. IntToStr
- pre písmo:
- g.Font.Color := farba;
- g.Font.Height := veľkosť; // výška,
t.j. veľkosť
písma
- g.Font.Name := meno-fontu; // 'Arial','Times
New Roman', ...
- g.Font.Style := štýl;
- hodnotou je nejaká podmnožina množiny [fsBold,
fsItalic, fsUnderline, fsStrikeOut]
- berie sa do úvahy aj štýl
"štetca" - ak je napr. g.Brush.Style:=bsClear;
tak sa text vypíše na priesvitné
pozadie; ak je g.Brush.Style:=bsSolid;
a g.Brush.Color:=clYellow;
tak sa text vypíše na žltý podklad
niektoré štandardné funkcie v Pascale
- sin, cos
- round, trunc, abs
- random
- IntToStr
Ďalšie dôležité informácie
- Odporúčané nastavenia kompilátora
(menu Project položka Options...):
- nezabudnúť pred spúšťaním ukladať
súbory na disk – bežiaci projekt môže v budúcnosti
zhodiť Delphi alebo systém
- dá sa nastaviť Autosave v menu Tools položka
Environment Options...:
- Súbory projektu:
- .DPR - textový pascalovský súbor
popisuje z čoho sa skladá projekt
- .DFM - môže byť textový (závisí
od nastavení Delphi) - popisuje formulár
- .PAS - pascalovský program
- Pri uložení projektu a neskôr aj po
spúšťaní aplikácie sa často budú
automaticky vytvárať aj súbory s inými
príponami:
- .RES - tento súbor, ak chýba, tak sa
vytvorí automaticky, obsahuje len ikonu aplikácie
- .CFG - (textový súbor) nastavenia kompilátora
(Options)
- .DSK - (textový súbor) informácie
o Delphi prostredí (o oknách)
- .DOF - (textový súbor) nastavenia kompilátora
- .DCU - preložená programová jednotka
- .EXE - spustiteľný program
- Pozor! - pri prenášaní projektu do
iného adresára alebo na iný disk
nekopírujte súbory s príponou .DSK
- prakticky vám stačí preniesť .DPR, .DFM,
.PAS, prípadne .RES, všetko ostatné sa
vytvára kompilátorom, pričom prenesený
.DSK môže narobiť veľké problémy
Nepovinná Domáca Úloha (NDÚ)
- šachovnice pomocou MoveTo a LineTo, resp. pomocou
Rectangle, vypĺňanie rôznymi farbami
- pyramída zo štvorčekov, trojuholníkov
- sústredné kružnice - medzikružia rôznymi
farbami
- priebeh funkcie sin, resp. iných funkcií
- na počítačoch v H3 a H6 je nainštalovaný
aj druhý produkt od Borlandu: C++ Builder – zjednodušene
by sa dalo povedať, že je to Delphi, v ktorom je vymenený
Pascal za C++. Prostredie je veľmi podobné Delphi.
Preskúmajte Builder a zistite, ktoré časti
sú tak podobné, že im asi rozumiete. Hľadajte
súvislosti aj v programoch Objektový Pascal
a C++.
|