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

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.
Vybavení pro Laser Game
Spuštěn Filmový magazín
Laser Game Brno

Delphi II - 3. lekce

Google       Google       6. 12. 2006       35 389×

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

Reklama
Reklama
Obrázek ke článku Pracujete u počítače ve stoje? Dbejte na správné držení těla

Pracujete u počítače ve stoje? Dbejte na správné držení těla

Práce ve stoje je jedna z variant, jak změnit polohu těla při dlouhodobé práci u počítače. Především je důležité nezapomínat na správné držení těla, abychom při práci nenamáhali naší krční páteř. Primářka MUDr. Michaela Tomanová představí hlavní bonusy a rizika práce u počítače ve stoje.

Obrázek ke článku Firmy musejí s nástupem Průmyslu 4.0 více dbát na kyberbezpečnost. V ohrožení je i jejich know-how.

Firmy musejí s nástupem Průmyslu 4.0 více dbát na kyberbezpečnost. V ohrožení je i jejich know-how.

Destabilizace firmy či ukradené know-how. To jsou možná hlavní budoucí rizika spojená s nedostatečnou kybernetickou bezpečností průmyslových firem, na která upozorňují experti. Vzhledem k postupující digitalizaci výrobních či technologických procesů a přechodu k takzvanému Průmyslu 4.0 může těchto hrozeb postupně přibývat. Varují před nimi i nejnovější průzkumy. 

Obrázek ke článku Nový CEBIT je připraven: Pochopit digitální dnešek a objevit digitální zítřek

Nový CEBIT je připraven: Pochopit digitální dnešek a objevit digitální zítřek

Nový veletrh  CEBIT je připraven. V polovině června začne v Hannoveru evropský festival obchodu s radikálně změněnou koncepcí věnovaný inovacím a digitalizaci.  CEBIT jedinečnou formou spojuje obchod v digitálním hospodářství 
s festivalovými prvky a posouvá do středu pozornosti téma digitální transformace hospodářství a společnosti.  

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