1. Úvod do prostredia Delphi6


Posledná zmena: 1.10.2002

Banner Text 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;
  • pridali sme jeden riadok

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++.


© 2002 AB, KVI
blaho@fmph.uniba.sk