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 306×

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 Bezrealitky.cz na novém webu rychleji propojí vážné zájemce s majiteli nemovitostí

Bezrealitky.cz na novém webu rychleji propojí vážné zájemce s majiteli nemovitostí

Největší platforma pro přímý prodej a pronájem domů a bytů Bezrealitky.cz představila novou podobu svého portálu. Redesign zásadně zjednodušuje všechny transakce, mění způsob, jakým zájemci o bydlení komunikují s majiteli nemovitostí, přináší nejpřesnější filtrování nabídek na trhu, ale také umožňuje prověřovat důvěryhodnost zájemců. 

Obrázek ke článku Samba.ai: Personalizační nástroje hlásí připravenost na GDPR

Samba.ai: Personalizační nástroje hlásí připravenost na GDPR

Do ostrého nasazení nařízení GDPR, které upravuje nakládání s osobními údaji, zbývá pár dní, a vzbuzuje vrásky u řady provozovatelů služeb, které pracují s profilací návštěvníků na stránkách a personalizací obsahu. Český personalizační nástroj Samba.ai(dříve Yottly) zajišťující personalizaci webu a prediktivní automatizaci email marketingu je však slovy svého CEO Davida Vyskočila na GDPR plně připraveno. 

Obrázek ke článku Jak se liší metody šifrování dat?

Jak se liší metody šifrování dat?

Jaké výhody má celodiskové a souborové šifrování? A co vám přinese šifrování virtuálního disku? Ochranu důležitých dat řeší firmy různě. Mohou využít přístupových práv, zálohování, VPN nebo šifrování. Právě šifrování považují odborníci na kybernetickou bezpečnost za nejspolehlivější řešení.

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