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

Delphi II - 10. lekceDelphi II - 10. lekce

 

Delphi II - 10. lekce

Google       Google       19. 5. 2008       21 280×

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 Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

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.

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ý