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

Delphi II  - 3. lekceDelphi II - 3. lekce

 

Delphi II - 3. lekce

Google       Google       6. 12. 2006       39 699×

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…

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 Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

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