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

Delphi II - 10. lekceDelphi II - 10. lekce

 

Delphi II - 10. lekce

Google       Google       19. 5. 2008       26 545×

Dnes se vrátíme k textovému editoru a rozšíříme ho o panel nástrojů a do okna „O aplikaci“ přidáme Easter Egg.

Vítám vás u dalšího dílu kurzu. Dnes se vrátíme k textovému editoru, takže doufám, že jste ho od minula nezlikvidovali :-).


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

Na formulář ke stávajícím komponentám přidejte ještě tyto:

Komponenta Název (name) Další atributy
TToolBar toolbar Přehled tlačítek a popis v tabulce níže
TImageList ikonky žádné

Tlačítka na Tollbaru:

Název (name) Typ Popis (caption)
novy_btn Button Nový
otevrit_btn Button Otevřít
ulozit_btn Button Uložit
-- Separator --
oaplikaci_btn Button O Aplikaci

Také si přes nabídku File → Open otevřete druhý formulář, okno O Aplikaci. Zde vám v návrhu nechám volnou ruku.

Určitě jste již slyšeli o tzv. Easter Eggs (pokud ne, mrkněte sem), takže si do svého editoru také jedno vajíčko vložíme. Po nějaké kombinaci kláves v dialogu O Aplikaci se zobrazí obrázek.

TImage

Komponenta TImage slouží, jak jinak, než k zobrazování obrázků. Plátno této komponenty lze využít i k softwarovému kreslení (vykreslování pomocí příkazů). Obrázek se nahrává přes ObjectInspector do Picture (nebo příkazem Image.Picture.LoadFromFile(soubor: string)). Další významnou vlastností je AutoSize, která je typu boolean a určuje, jestli se rozměry komponenty mají přizpůsobit nahranému obrázku. Opačně funguje vlastnost Stretch, která určuje, jestli se rozměry obrázku mají přizpůsobit rozměrům komponenty. Pokud obě vlastnosti necháte vypnuté (false), zobrazí se výřez.

Toolbar

Komponenta Toolbar slouží jako základ panelu nástrojů. Lze na ni umístit komponentu TCoolBar (přesouvací panel nástrojů), ale umí sama obsahovat i tlačítka. Kromě tlačítek zná i tzv. oddělovače (separators), ty vizuálně oddělují jednotlivé bloky tlačítek.

Tlačítko nebo oddělovač přidáte jednoduše tím, že kliknete pravým tlačítkem myši na Toolbar a v kontextové nabídce vyberete buď Button nebo Separator. Výhodou je, že události tlačítek lze provázat s událostmi položek menu, takže není nutné znovu ručně programovat všechny události.

ImageList

ImageList je speciální komponenta sloužící k přechovávání ikonek tlačítek apod. Výhodou je, že obrázky se automaticky vloží do programu, takže je není nutné potom distribuovat spolu s programem v samostatných souborech.

Programujeme!

Nejdřív začneme tím menu. Ale ještě předtím je nutné nahrát do ImageListu nějaké ikonky. Ikonky si stáhněte zde (ZIP archiv, ~1,3 kB) a rozbalte je do adresáře s programem. Potom dvojklikem na komponentu ImageList otevřete Seznam obrázků. Tlačítkem Add přidejte všechny čtyři ikonky. Delphi pozná, která barva se má nastavit jako transparentní (průhlednou). Tlačítkem OK dialog zavřete. Nyní v Object Inspectoru vyberte komponentu ToolBar a u vlastnosti Images vyberte z rozbalovacího menu komponentu ikonky (ImageList). Na tlačítkách by se měly hned objevit obrázky. Pokud jsou ve špatném pořadí (měly by být Nový, Otevřít,Uložit, O Aplikaci), otevřete Seznam obrázků v ImageListu a tažením myši je prohoďte.

Teď v Object Inspectoru otevřete tlačítko Nový (novy_btn) a u vlastnosti MenuItem vyberte Nov1 (Delphi se snaží pojmenovat položky menu podle popisky. Protože ale je diakritika v názvu nepřípustná, tak tyto znaky vynechává, tedy z Otevřít udělá Otevt apod.). Totéž proveďte s tlačítkem Otevřít (otevrit_btn), akorát zde vyberte položku Otvt1. Stejný postup použijte i na zbylá tlačítka na panelu nástrojů. Tím jsme tlačítka na panelu nástrojů provázali s položkami menu. Pokud teď kliknete na tlačítko, je to stejné, jako kdybyste klikli na to samé v menu. To se dá řešit i tím, že přiřadíme tlačítku událost OnClick patřící příslušné položce v menu, ale tento způsob provázání má ještě další výhody. Například pokud nastavíte Visible položky menu na false, provede se automaticky totéž i s tlačítkem a naopak.

Po těchto odstavcích samozřejmě očekávám divokou diskuzi na téma „klikací programování“. Jak jste si ale jistě uvědomili, ušetřili jsme tím hodně času a kódu. Tohle je jedna ze základních výhod „klikacího programování“. Je nutné se smířit s tím, že toto je kurz programování v Delphi a Delphi jakožto IDE kladou na „klikací programování“ důraz!

Dalším krokem bude Easter Egg v okně O Aplikaci. Vlevo si můžete prohlédnout, jak vypadá moje okno O Aplikaci, ale jak jsem řekl na začátku, jeho provedení nechám na vás. Vyhrajte si, jak jen chcete.

Nejprve nadeklarujte proměnnou egg typu string a rovnou ji inicializujte, stejně tak proměnnou znak typu integer:

   egg: string = 'DELPHI';
   znak: integer = 0;

Jistě vás napadlo, k čemu proměnna egg slouží. Obsahuje text, který musí uživatel napsat, aby na něj ono vajíčko vyskočilo. Proměnná znak slouží k počítání, kolik toho už uživatel napsal.

Dalším krokem je procedura obsluhující událost onKeyDown:

procedure To_aplikaci.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var ea: TForm;
    img: TImage;
begin
  if ssCtrl in Shift then //pokud je sisknuty Control 
   if Key = Ord(egg[znak]) then //pokud stisknuta klavesa odpovida ocekavanemu znaku
      if znak = Length(egg) then begin //pokud uz je napsan cely text, tak udelame Easter Egg
           ea:=Tform.Create(o_aplikaci);    //vytvori za behu novy formular      
           ea.borderStyle:=bsNone;  //bez ramecku
           ea.Position:=poDesktopCenter;  //umistime na stred obrazovky
           ea.OnClose:=OnClose; //priradime mu udalost onClose
           img:=Timage.Create(ea);  //na formular umistime okno
           img.Parent:=ea;
           img.AutoSize:=true;
           img.Picture.LoadFromFile(ExtractFilePath(Application.ExeName)+'easteregg.jpg'); //nacteme obrazek
           ea.Width:=img.Picture.Width; //prizpusobime rozmery okna
           ea.Height:=img.Picture.Height;

           ea.Show; //a zobrazime ho
          znak := 1; //a jeste resetujeme pocitadlo znaku
       end else znak := znak + 1 //pokud jeste neni napsano cele slovo, tak posuneme znak
    else znak := 1; //pokud byl stisknut spatny znak, tak zase na zacatek
end;

Ještě do USES přidejte knihovnu jpeg. Obrázek, který se má zobrazit, uložte do adresáře s programem a nazvěte ho easteregg.jpg (tady nejde o to toto vajíčku nějak skrývat, cílem je ukázat, jak lze zpracovávat vstup z klávesnice a že je možné vytvořit za běhu nejen komponentu, ale i celý formulář a na něj komponentu).

Nyní ještě nadeklarujte obslužnou proceduru k události OnClose formuláře form2:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if (Sender as TForm).Name<>'form2' then //pokud nejde o Form2
    (Sender as TForm).Free; //pak dany formular uvolnit z pameti
end;

Tato událost je volána nejen z formuláře form2, ale i z onoho virtuálního formuláře, který jsme vytvořili, když je uzavřen (lze uzavřít přes Alt+F4). Pokud je Sender (objekt, který danou proceduru zavolal) formulář form2, tak se nic nestane. Pokud je však volajícím objektem formulář easter egg, pak ho uvolníme z paměti.

A jsme zase na konci

Příště pravděpodobně ještě zůstaneme u editoru, ale jaké tam budeme provádět změny, sám ještě netuším :-).

Úkol

Tentokrát žádný není :-).

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

2 názory  —  2 nové  
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ý