Delphi II - 3. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Delphi II  - 3. lekceDelphi II - 3. lekce

 
Hledat
Moderní platforma pro vytvoření vašeho nového webu – Wix.com.
Nyní už můžete mít web zdarma.
Vytvořte si vlastní webové stránky. Snadno, rychle a levně přes Saywebpage.com
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno
Laser Game Ostrava

Delphi II - 3. lekce

Google       Google       6. 12. 2006       37 444×

V dnešním díle se podíváme na procedury a funkce a nakonec si uděláme i nějaký ten prográmek…

Reklama
Reklama

Dnes se podíváme na hlavní část programů (nejen) v Delphi – na proceduryfunkce a nakonec využijeme dosavadních poznatků a vytvoříme jednoduchý program.


Procedury

Každá aplikace se skláda z procedurfunkcí. V této kapitole se budeme věnovat procedurám. Procedura je ohraničený úsek kódu. Pokud chceme proceduru spustit, provedeme tzv. zavolání procedury.


procedure TForm1.Button1Click(Sender: TObject);
begin
 ...
 ...
end;

Takto vypadá procedura Button1Click. Tato procedura je potomkem třídy TForm1. Samotný kód procedury se poté píše mezi tzv. klíčová slova beginend.

A takto je procedura deklarována:


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  ...

Když vytvoříte proceduru události u některé z komponent, procedura se sama nadeklaruje a vytvoří se její základní kostra.


Funkce

Funkce je jakási obdoba procedury, jenom s tím rozdílem, že má tzv. návratovou hodnotu – tzn. že vy ji zavoláte, ona provede nějakou operaci a vrátí určitou hodnotu (výsledek oné operace). K tomuto výsledku se poté přistupuje přes název funkce.

Pro ujasnění zde uvádím ukázku:


procedure TForm1.Button1Click(Sender: TObject);
var c:integer;
begin
  ...
  c:=secti(1,2); //volám fci SECTI s parametry 1 a 2...výsledek funkce se poté
                 //přiřadí do proměnné c
  ...
end;

function TForm1.secti(a: integer; b: integer): integer; //vlastní funkce, kterou jsme si sami vytvořili a nadeklarovali
var vysledek: integer;
begin
  vysledek:=a+b; //tohle asi ani komentář nepotřebuje
  result:=vysledek;
end;

Ve funkci jste si určitě všimli proměnné result, kterou jsme nikde předem nedeklarovali. Tato proměnná je deklarávána automaticky v každé funkci a přiřazuje se do ní ona výsledná hodnota, kterou má funkce vrátit.

Funkci secti mám samozřejmě definovanou o pár řádek výše:


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    function secti(a:integer; b: integer): integer;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Zde se ještě na chvilku vrátím k procedurám. Aby vše bylo úplně jasné, uvádím ještě, že jako můžeme definovat vlastní funkce, lze stejně definovat i vlastní procedury. Zároveň také mohou obsahovat vlastní parametry:


procedure TForm1.vlastniprocedure(cislo: integer; slovo: string; pravda: boolean);
...

Konec, zpět k funkcím…

Určitě jste si všimli oné zvláštní věci, že funkce má za výčtem parametrů ještě typ proměnné. Ten určuje, jakého typu bude návratová hodnota – tedy hodnota, kterou fce vrátí. V našem případě bude funkce vracet celočíselné hodnoty.


Přetížené procedury

Přetížené procedury je něco, co se v Delphi objevilo až od 4. verze. Pokud tedy máte verzi 3 a nižší, můžete tuto část v klidu přeskočit.

Princip přetížených procedur je celkem jednoduchý: Potřebujete jednoduchou proceduru, která bude měnit popisku tlačítka. OK, v tom by nebyl problém, ale co když předem nevíte, jekého typu bude ta hodnota, která se má zobrazit na tlačítku – integer, string, real, …? Přetížené procedury to zvládnou: jednoduše nadefinujete tu jednu proceduru třeba třikrát, jednou u ní nastavíte parametr typu integer, podruhé typu string a potřetí typu real:


procedure zmenpopisku(text: string); overload;
begin
 Button1.Caption:=text;
end;

procedure zmenpopisku(celecislo: integer); overload;
begin
 Button1.Caption:=IntToStr(celecislo);
end;

procedure zmenpopisku(desetinnecislo: integer); overload;
begin
 Button1.Caption:=FloatToStr(desetinnecislo);
end;

No a takto budeme postupně procedury volat:


...
zmenpopisku('Nová popiska');
zmenpopisku(15);
zmenpopisku(3.3658);
...

Tyto procedury se nemusí deklarovat, protože není definován jejich vlastník (není tam to TForm1 před názvem procedury) a lze je libovolně volat odkudkoliv z programu. Další věcí, které jste si asi všimli, je klíčové slovíčko overload uvedené za názvem procedury. To informuje Delphi, že se jedná o přetíženou proceduru.


Program

A je to tady – vrchol našeho dílu, na který jste se již všichni určitě těšili ;) Náš program totiž bude fungovat jako VELMI jednoduchá kalkulačka. Využijeme zde lokálně i globálně deklarované proměnné, procedury, funkce, přetížené procedury a další věci… Jdeme na to.

Na formulář umístěte komponenty podobně jako na obrázku:

TEditTButton najdete na paletě Standart. Události OnClick vytvoříte buď dvojklikem na komponentu, nebo když v Object Inspectoru v záložce Events poklepete na to bílé pole na řádku OnClick.

A teď už k programování:

Nejprve globálně deklarujte proměnnou predchozi typu real (pokud nevíte jak na to, tak se podívejte do předchozího dílu). Následně 2× nadefinujte přetíženou proceduru s názvem zobrazokno:


procedure zobrazokno(zprava:string); overload;
begin
  ShowMessage(zprava); //zobrazí v dialogu zprávu
end;

procedure zobrazokno(vysledek: real); overload;
begin
  ShowMessage('Minulý výsledek: '+FloatToStr(predchozi)+#13+'Výsledek: '+FloatToStr(vysledek)); //zobrazí v dialogu předchozí a aktuální výsledek
end;

Znak #13 je v sadě znaků ASCII reprezentuje klávesu ENTER a s ní související zalomení textu na další řádek.

Takto bude vypadat procedura OnButton1Click:


procedure TForm1.Button1Click(Sender: TObject);
var vysledek: real;
begin
  if Edit2.Text='+' then //podle znaménka v poli Edit2 provedeme příslušnou operaci
    vysledek:=StrToFloat(Edit1.Text)+StrToFloat(Edit3.Text)
    else if Edit2.Text='-' then
      vysledek:=StrToFloat(Edit1.Text)-StrToFloat(Edit3.Text)
      else if Edit2.Text='*' then
        vysledek:=StrToFloat(Edit1.Text)*StrToFloat(Edit3.Text)
        else if Edit2.Text='/' then
          vysledek:=StrToFloat(Edit1.Text)/StrToFloat(Edit3.Text)
          else zobrazokno('Špatné znamínko!'); //pokud bylo zadáno jiné znaménko, zobrazí se přes proceduru zobrazokno chybová hláška
  zobrazokno(vysledek); //přes proceduru zobrazokno se vypíše výsledek
  predchozi:=vysledek; //a aktualizuje proměnná predchozi
end;

Tato procedura by se dala řešit i elegantněji, než přes if else if else, ale to zatím neumíme, takže si vystačíme s tímto provedením. Funkce StrToFloat slouží k přetypování proměnné z typu string na reálný typ (v našem případě na typ real, protože proměnná výsledek je právě typu real).

Nakonec ještě vytvořte událost tlačítka Button2 (tlačítko vynulování):


procedure TForm1.Button2Click(Sender: TObject);
begin
  Edit1.Text:=''; //vynulujeme jednotlivá pole
  Edit2.Text:='';
  Edit3.Text:='';
end;

Tím je náš program hotový. A také končí i dnešní lekce. Ale ještě tu pro vás nakonec něco mám:

Úkol

  1. Jako vždy – naučte se, co jsou to procedury a funkce a jaký je mezi nimi rozdíl.
  2. Dobrovolný úkol: naučte se používat přetížené funkce a procedury (opravdu myslím, že není nutné je úplně znát, že je stejně moc často nevyužijete…)
  3. Vytvořte program, který po stisku tlačítka zavolá funkci, která provede operaci a:=i+1 (i nadefinujte jako konstantu o libovolné výchozí hodnotě). Výsledek této operace (tedy proměnná a) bude návratovou hodnotou funkce. Pomocí jiné procedury pak nastavte popisek tlačítka na onu hodnotu a. Je to jistá obdoba toho, co bylo úkolem minule, takže z toho můžete vycházet.

Na závěr

Pro dnešek je to tedy úplně vše. V příštím díle se podíváme na tzv. řídící struktury a řekneme si něco o základech OOP.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se zabývá tvorbou webových stránek na zakázku, dále programujte v Delphi a zajímá se o Linux a open source
Web    

Nové články

Obrázek ke článku Využití .htaccess na malém webu

Využití .htaccess na malém webu

V dnešní době existuje spoustu cms, které mnohdy ale vůbec nepotřebujeme a stačila by nám pouze základní funkčnost k úpravě url, přesměrování. K tomuto účelu je ideální .htaccess soubor, který nám se všemi těmato úpravami umí pomoct.

Reklama
Reklama
Obrázek ke článku Češi tlačí obce do otevřené komunikace – Mobilní Rozhlas si loni pořídilo dalších 171 měst a obcí

Češi tlačí obce do otevřené komunikace – Mobilní Rozhlas si loni pořídilo dalších 171 měst a obcí

Obyvatelé Česka se mnohem více zapojují do veřejného dění. Umožňují jim to přímo samosprávy, které stále častěji využívají nástroje takzvané chytré komunikace a participace. Dokládají to data za rok 2019 ekosystému Mobilní Rozhlas, lídra v oblasti chytré obecní komunikace. Zapojilo se do něj 171 nových měst a obcí, zaregistrovalo celkem 100 tisíc občanů a místní samosprávy jeho prostřednictvím rozeslaly třikrát více adresných zpráv než v roce 2018

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý