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

Delphi II - 10. lekceDelphi II - 10. 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 - 10. lekce

Google       Google       19. 5. 2008       23 102×

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.

Reklama
Reklama

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 NVIDIA shrnuje přehled novinek na E3 2018

NVIDIA shrnuje přehled novinek na E3 2018

Společnost NVIDIA si u příležitosti E3 2018 připravila řadu novinek, které uvádí v kompletním přehledu, Například nové hry s podporou NVIDIA Highlights, která je součástí aplikace GeForce Experience, i nadále nabírá na obrátkách. Kromě výše zmíněné Shadow of the Tomb Raider získaly podporu také hry Dirty Bomb a Switchblade.

Reklama
Reklama
Obrázek ke článku SODAT vidí budoucnost datové bezpečnosti ve strojovém učení

SODAT vidí budoucnost datové bezpečnosti ve strojovém učení

Firmy chrání svá citlivá data často nedostatečně. Podle průzkumu společnosti SODAT se v minulém roce setkalo až 80 % z nich s bezpečnostním incidentem ztráty nebo úniku dat. Jedna z pilotních firem, která testovala novou verzi řešení SODAT Protection & Analytics 2.0pro bezpečností analýzu a monitoring dat díky novince zjistila, kdo z disku smazal důležité výkresy a mohla na incident včas reagovat.

Obrázek ke článku Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Kontrolujete pracovní emaily i na dovolené? 7 tipů odborníka, jak nepřijít o data

Letní měsíce jsou pro většinu zaměstnanců spojené s každoroční dovolenou. Z údajů Českého statistického úřadu vyplývá, že v roce 2017 podnikli Češi přes 13 milionů delších cest (tzn. s více než čtyřmi noclehy). Přitom právě na období července, srpna a září připadá více než 7,5 milionů z nich. Nicméně tradiční představu o dovolené jako o čase, kdy má práci na starost někdo jiný, Češi boří. 

Obrázek ke článku 10 SEO mýtů, které už nemusíte v roce 2018 řešit

10 SEO mýtů, které už nemusíte v roce 2018 řešit

„Kolik má být na stránce klíčových slov?“, „Nemáš vyplněný meta tag keywords, to nebude fungovat.“, „Katalogy jsou mrtvý“. Také jste už slyšeli některé z těchto otázek? Pojďme si na ně konečně jednou provždy odpovědět.

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