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

Delphi II – 7. lekceDelphi II – 7. lekce

 

Delphi II – 7. lekce

Google       Google       17. 4. 2007       29 302×

V tomto díle začneme programovat a vrhneme se na komponenty.

Reklama
Reklama

Úvod

Vítám vás v dalším dílu našeho kurzu. Tento díl je pro náš kurz zcela zlomový, protože se konečně vrhneme na komponenty a na programování. Jako hlavní program jsem zvolil nápad Seberma, jednoho ze čtenářů tohoto kurzu. V následujících dílech budeme vytvářet MP3 přehrávač. Nenadchlo vás to? Nevadí. Protože na MP3 přehrávači nelze demonstrovat použití všech komponent (asi tam těžko budeme komponovat tabulku nebo rich-textové pole), budeme vytvářet i textový procesor. Na úroveň Microsoft Wordu nebo OpenOffice.org Writeru se asi nedostaneme, ale myslím, že nakonec budeme mít celkem profesionální programy. Je možné, že v jednom dílu budeme pracovat na obou programech, například až se naučíme pracovat s dialogovými okny (Otevřít, Uložit atd.) tak je zakomponujeme jak do editoru, tak do přehrávače.

V dnešním dílu začneme pouze s MP3 přehrávačem (když jsme u toho – vyhlašuji soutěž o nejvhodnější název). Naučíme se pracovat s několika nejzákladnějšími komponentami, které se vyskytují asi v každém programu: Formulář, Label, Button, Edit, dále se podíváme na komponenty Timer a Gauge a ukážeme si tzv. runtimové vytvoření komponent – tedy vytvoření komponenty za běhu aplikace.

Na úvod vše, jdeme na to!


Návrh uživatelského prostředí

Když vytváříme aplikaci, je nutné si nejprve navrhnout uživatelské rozhraní (teď nemluvím o konzolových aplikacích, tam žádné není:)).

Zde je seznam všeho, co je nutné umístit na formulář a co se musí nastavit. V prvním sloupci je uvedena komponenta, resp. její typ. V druhém sloupci je uvedeno, jak bude komponenta pojmenována (mění se v Object Inspectoru u položky Name), ve třetím sloupci je pak seznam dalších atributů, které se mají změnit a hodnoty, které se mají nastavit. Atributy, které zde nejsou uvedené, nechte, jak jsou.

Komponenta Název (Name) Další atributy
Formulář Form1
Caption: MP3 přehrávač
BorderStyle: bsToolWindow
Button prehrat_btn
Caption: Přehrát
Button zastavit_btn
Caption: Zastavit
Enabled: false
Label původní (Label1)
Caption: Soubor:
Edit soubor
Text: žádný
Gauge ukazatel
Height: 12
ShowText: false
Timer casovac
Enabled: false
Interval: 250

Tady je návrh, jak by mohlo rozložení komponent vypadat (fotka z doby návrhu, za běhu není komponenta Timer vidět):

A teď si rozebereme jednotlivé komponenty:

Button

Tlačítko patří mezi nejzákladnější komponenty vůbec. Z těch nejčastějších věcí u něj lze nastavit jen popisku (samozřejmě toho je mnohem víc – rozměry, název, pozice a hromady dalších věcí, ale to vše lze buď nastavit na formuláři, nebo je to nastavení, které se nepoužívá). Popiska (caption) je typu string.

Při kliknutí se vyvolá událost OnClick, další události se opět příliš nepoužívají.

Label

Label, česky popiska, slouží k zobrazení needitovatelného textu. Nejčastěji se mění pouze Caption (text popisky), který je typu string, a poté ještě atribut Font. Pokud v Object Inspectoru rozbalíte položku Font, dostáváte k dispozici nastavení písma (Name), velikosti (Size), barvy (Color), znakové sady (Charset) a dalších vlastností.

Edit

Komponenta Edit by se dala česky nazvat jako vstupní pole a slouží k jednořádkovému zadávání textu. Text je poté uložen v atributu Text a je typu string. Stejně jako u komponenty Label lze nastavit písmo. Při jakékoliv změně textu se vyvolá událost OnChange.

Gauge

Tato komponenta funguje jako ukazatel průběhu, umožňuje i zobrazení procent. Zobrazení procentuálního stavu se dá nastavit pomocí booleanovského atributu ShowText (true zobrazí, false vypne). Minimální hodnota se nastavuje u atributu MinValue, maximální pak u MaxValue, oba jsou typu integer. Samotný stav ukazatele se nastavuje pomocí Progress, též typu integer. Ještě lze pomocí atributu ForeColor nastavit barvu ukazatele (typ TColor).

Timer

Časovač patří mezi tzv. nevizuální komponenty. V době návrhu je na formuláři vidět jako ikonka, za běhu programu se nezobrazuje. Vlastnost Interval (typ integer) je udávána v milisekundách a určuje interval, ve kterém se má vyvolat událost OnTimer. Atribut Enabled (typ boolean) určuje, jestli má být časovač aktivní, či ne. Pokud například nastavíte interval na 2000, vyvolá se každé dvě sekundy událost OnTimer.

Formulář

Ano, i formulář je komponentou. Stejně jako ostatní komponenty i on má mnoho vlastností, událostí a metod. Mezi nejčastěji používané vlastnosti patří BorderStyle, která určuje typ okraje okna. Caption (typ String) udává text v titulkovém pruhu okna, dále atribut FontFormStyle. Myslím, že to teď stačí, v průběhu kurz případně objasním další.

Komponenty máme pro dnešek za sebou. A teď začneme programovat, ne?


Programujeme!

Jdeme na to. Nejprve do USES přidejte knihovnu MPlayer (ta nám poté umožní vytvořit komponentu MediaPlayer za běhu aplikace) a nadeklarujte globální proměnné pauza typu booleanprehravac typu TMediaPlayer.

Teď vytvořte událost formuláře OnCreate. Tato procedura se zavolá, když je vytvořen formulář, tzn. při spuštění aplikace. My si v ní vytvoříme novou instanci třídy TMediaPlayer. MediaPlayer je sama o sobě také komponenta, ale protože by nám na formuláři teď jen překážela, vytvoříme si ji až za běhu.


procedure TForm1.FormCreate(Sender: TObject);
begin
  pauza:=false;
  prehravac:=TMediaPlayer.Create(Form1); //vytvoří novou instanci objektu TMediaPlayer
  prehravac.Parent:=Form1; //nastaví vlastníka komponenty
  prehravac.Visible:=false; //a skryje ji
end;

Dále vytvořte událost formuláře OnClose a do ní vložte příkaz na uvolnění přehrávače z paměti. U komponent, které vložíte na formulář v době návrhu, se to provádí automaticky, ale pokud komponentu vytvoříte sami až za běhu, musíte ji také sami smazat.


  prehravac.free; //zruší instanci objektu TMediaPlayer

Nyní vytvořte událost tlačítka prehrat_btn OnClick: ta se skládá ze dvou částí rozdělených podmínkou. Toto tlačítko se totiž chová jako přehrávací i jako pauzovací. Pokud je tedy popiska tlačítka Přehrát, tak zkontroluje, jestli je zadán soubor, a pak začne přehrávat (pokud je přehrávání zapauzováno, pak pouze odpauzuje přehrávač). Pokud je popiska tlačítka Pauza, pak proběhne pouze druhá část procedury, kdy se přehrávání zapauzuje.


procedure TForm1.prehrat_btnClick(Sender: TObject);
begin
  if prehrat_btn.Caption='Přehrát' then begin //pokud má tlačítko popisku Přehrát...
    if soubor.Text='' then begin //pokud je pole soubor prázdné...
      MessageDlg('Nebyl zadán soubor',mtError,[mbOK],0); //..vyhodit hlášku...
      Exit; //...a skončit proceduru
    end;
    if not FileExists(soubor.Text) then begin  //pokud soubor neexistuje...
      MessageDlg('Zadaný soubor neexistuje',mtError,[mbOK],0); //...vyhodit hlášku
      Exit; //...a skončit proceduru
    end;
    prehrat_btn.Caption:='Pauza'; //změnit popisku tlačítka
    if not pauza then begin  //pokud není pauza... (pokud pauza má hodnotu false)
      prehravac.FileName:=soubor.Text; //...otevře v přehrávači ten soubor...
      prehravac.Open; //...načte ho...
      prehravac.Play; //...a začne ho přehrávat...
      zastavit_btn.Enabled:=true; //...zpřístupní tlačítko Zastavit...
      soubor.Enabled:=false; //...a znepřístupní pole pro název souboru
    end else prehravac.Resume; //...pokud je pauza (pauza má hodnotu true tak pokračovat v přehrávání
    casovac.Enabled:=true; //zapne časovač
    ukazatel.MinValue:=0; //nastaví ukazatel (minimální hodnota)
    ukazatel.MaxValue:=prehravac.Length; //(maximální hodnota=délka souboru)
    ukazatel.Progress:=prehravac.Position;  //pozice ukazatele=pozice přehrávání
  end else begin //pokud je má tlačítko popisku Pauza
    pauza:=true;
    prehrat_btn.Caption:='Přehrát'; //změní popisku tlačítka
    prehravac.Pause; //zapauzuje přehrávání
  end;
end;

Zde se pozastavím nad příkazem MessageDlg. Tato funkce slouží k zobrazení dialogového okna. Parametry okna jsou následující:

MessageDlg(text,typ,tlačítka,help_kontext)

Text je samozřejmě typu string, typ může být mtError (chyba), mtInformation (informace), mnConfirmation (potvrzení) nebo mtWarning (varování). Tlačítka jsou mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbNoToAll, mbYesToAllmbHelp. Seznam tlačítek se udává jako výčet, tedy v hranatých závorkách (např. [mbYes, mbNo] zobrazí tlačítka AnoNe). Help kontext je obvykle 0, jinak slouží k odkazu na položku nápovědy.

Další událostí je událost OnClick tlačítka zastavit_btn, která zastaví přehrávání a vypne časovač


procedure TForm1.zastavit_btnClick(Sender: TObject);
begin
  prehravac.Stop; //zastaví přehrávání
  casovac.Enabled:=false; //vypne časovač
  soubor.Enabled:=true; //nastaví vše do původního stavu
  prehrat_btn.Caption:='Přehrát';
  pauza:=false;
end;

A nakonec událost časovače OnTimer. Ta nám obstará, aby se každou ¼ sekundy obnovil ukazatel stavu přehrávání. Pokud se pak přehrávač dostane na konec (to se zjišťuje porovnáváním délky písničky a aktuální pozicí přehrávání), tak se přehrávání zastaví.


procedure TForm1.casovacTimer(Sender: TObject);
begin
  ukazatel.Progress:=prehravac.Position; //obnoví pozici ukazatele
  if prehravac.Position=prehravac.Length then begin //pokud se přehrávač dostane na konec...
    pauza:=false; //nastaví původní hodnoty
    prehrat_btn.Caption:='Přehrát';
    soubor.Enabled:=true;
    casovac.Enabled:=false;
    zastavit_btn.Enabled:=false;
  end;
end;

Pokud jste vše udělali správně, pak by vám pro přeložení (Run → Run nebo klávesa F9) mělo vše fungovat. Do vstupního pole zadáte cestu a název souboru, kliknete na Přehrát a je to.


Závěr

No a pro dnešek končíme. Doufám, že se vám povedlo aplikaci vytvořit, pokud ne, zkuste to znovu, musí to jít ;), a že se vám tento díl líbil (pokud ne, tak nevím, co budete dělat v dalších dílech – asi je přestanete číst:)). Příště rozebereme další komponenty, ale už začneme pracovat na našem textovém editoru.


Úkol

Už jste se těšili, že dneska žádný úkol nebude? Smůla:) I dneska pro vás něco mám;)

Vytvořte aplikaci, kde bude jeden Label, jeden Edit a tři Buttony. Po kliknutí na tlačítko se text v Editu zobrazí v Labelu, při kliknutí na druhé tlačítko to bude naopak. Při kliknutí na třetí tlačítko se budou podle popisky toho tlačítka přepínat styly písma na komponentě Label. Při prvním kliknutí bude popiska třeba Změnit a písmo bude třeba Verdana, při dalším kliknutí se změní popiska na Vrátit zpět a písmo se změní třeba na Arial. Při dalším kliknutí se to zase vrátí do stavu, který byl při prvním kliknutí.

Snad jsem to podal dost jasně, pokud přesto budou nějaké problémy, očekávám vaše dotazy na fóru, emailu, ICQ nebo formou úkolu.

×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 Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý