Staňte se programátorem: Linuxové efekty levou zadní

Linuxové grafické desktopy se chlubí poutavými efekty, některé z nich lze ale velmi snadno napodobit i na Windows. Dnes si takové efekty napíšeme v programovacím jazyku C#.

V dnešní části si s námi budete moci vytvořit jednoduché animační efekty oken, kterými se chlubí například mnohé „FX“ desktopy z Linuxu včetně oblíbeného a téměř všudypřítomného Compizu – dříve známého jako Beryl.

Konkrétně se zaměříme na tři efekty. První vytvoří „klikací“ miniatury oken a umístí je na plochu. Pokud nad miniaturu najedete myší, miniatura se zvýrazní, a pokud na ni kliknete, zobrazí se odpovídající okno programu. Druhý efekt pro změnu vytvoří animaci, při které se okno zmenší a třetí efekt bude postupně zvětšovat průhlednost okna, dokud zcela nezmizí.

Klepněte pro větší obrázek
Zkušební okna se kterými si můžete naše efekty vyzkoušet
Přeložený program najdete na konci článku
Zde je jediným efektem akcelerované prostředí Vista Aero

V dnešním díle se naučíme základy, příště se pak podíváme na kód konkrétních efektů. Efekt seřazených miniatur a postupně se zmenšujících oken vytvoříme pomocí skutečných miniatur formuláře. Efekt průhlednosti pak vytvoříme prostým nastavením vlastnosti okna.

První efekt: seřazení a vytvoření klikacích miniatur

Klepněte pro větší obrázek
Okna vypadají a chovají se jako ikony

Druhý efekt: zmenšení

Klepněte pro větší obrázek  Klepněte pro větší obrázek  Klepněte pro větší obrázek
Pokud budete postupně zobrazovat menší a menší miniaturu okna, vznikne pěkný efekt

Třetí efekt: zmizení

Klepněte pro větší obrázek  Klepněte pro větší obrázek  Klepněte pro větší obrázek
Pokud budete průhlednost měnit spojitě, ve smyčce nebo pomocí časovače, vznikne pěkný mizící efekt

Základní dovednosti

Před tím, než začneme psát efekty okna, měli bychom se seznámit s několika základními funkcemi a vlastnostmi okna a práce s obrázky:

Pro zobrazení okna použijeme metodu Show:

Form f = new Form();
f.Show();

Pro skrytí okna použijeme metodu Hide:

f.Hide();

Pro nastavení rozměru okna slouží vlastnost Size, které přiřadíme instanci třídy System.Drawing.Size představující nové rozměry okna:

Form f = new Form();
f.Size = new Size(200,400); // šířka 200, výška 400
f.Show();

K nastavení pozice okna slouží vlastnost Location, které je nutné přiřadit instanci struktury System.Drawing.Point představující bod, kam bude umístěn levý horní roh okna.

Form f = new Form();
f.Location = new Point(0,0); // Posune okno do levého horního rohu obrazovky
f.Show();

Nastavení průhlednosti okna

Pro nastavení průhlednosti okna použijeme vlastnost Opacity, které přiřadíme číslo datového typu double v intervalu <0,1> představující stupeň průhlednost okna. Hodnota 0 představuje zcela průhledné okno, zatímco hodnota 1 představuje okno neprůhledné.

Form f = new Form();
f.Show();
f.Opacity = 0.5; // Nastaví poloprůhledné okno

Získání obrazu okna

Pro získání snímku okna je určena metoda DrawToBitmap třídy Form, která jako argument očekává odkaz na instanci třídy System.Drawing.Bitmap představující bitmapu do které bude obsah okna zakreslen. Druhý argument je typu System.Drawing.Rectangle a představuje výseč bitmapy, do které bude obrázek zakreslen.

Form f = new Form();
f.Show();
Bitmap obr = new Bitmap(f.Width, f.Height);
f.DrawToBitmap(obr, new Rectangle(0,0, f.Width,f.Height);
obr.Save(@“C:\obrazek.bmp“);

Pro zobrazení obrázku slouží komponenta PictureBox. K nastavení obrázku, který se v této komponentě zobrazí, slouží vlastnost Image, které je nutné přiřadit odkaz na instanci třídy System.Drawing.Image představující daný obrázek.

Form f = new Form();
PictureBox p = new PictureBox();
f.Controls.Add(p); // Přidá na formulář PictureBox
// Nahraje obrázek do paměti a zobrazí jej v komponentě PictureBox
p.Image = Image.FromFile(@“C:\img.bmp“);
p.Show();

Vytvoření miniatury

Pro získání zmenšeniny obrázku slouží metoda GetThumbnailImage třídy System.Drawing.Image představující obrázek. Metoda jako první dva argumenty očekává novou šířku a výšku obrázku a jako třetí argument je nutné uvést delegát na metodu, která bude zavolána v případě vyvolání chyby při změnách rozměrů obrázku.

bool Chyba()
{
  MessageBox.Show(“Nastala chyba při manipulaci s obrázkem“);
  return false;
}

Image UpravRozmerObrazku(Image i, int vyska, int sirka)
{
  try
  {
    return i.GetThumbnailImage(vyska, sirka,
    new Image.GetThumbnailImageAbort(Chyba), IntPtr.Zero);
  }
  catch
 
{
    return null;
  }
}


Dnes jsme si ukázali tři efekty, které sice na první pohled vypadají velmi jednoduše, v reálném nasazení jsou ale velmi pěkné a s naprostým minimem programování. Nakonec si můžete program jako vždy vyzkoušet. Z Linuxu jsme se vrátili na Windows (ale v Monu program také spustíte, i když efekty pravděpodobně nebudou fungovat, zobrazí se pouze samotná okna), ke spuštění tedy budete potřebovat platformu Microsoft .NET Framework.

Samozřejmě nechybí ani zdrojový kód, který je upravený pro bezplatné vývojové prostředí Microsoft Visual C# 2008 Express Edition.

Témata článku: Programování, Form, Catch

28 komentářů

Nejnovější komentáře

  • Antibuntu 13. 2. 2009 22:23:02
    ROFL :-D
  • Jerome McElroy 13. 2. 2009 18:58:16
    Dik za radu. Vo Windowse je AA defaultne zapnutý a tak ma nenapadlo to...
  • Jan Tomášek 13. 2. 2009 12:49:39
    pche klikaci
Určitě si přečtěte

Nové úlovky kamer Googlu: Šmírovačka na Street View nepřestává bavit

Nové úlovky kamer Googlu: Šmírovačka na Street View nepřestává bavit

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

19.  5.  2017 | redakce | 38

Nastal čas znovu vynalézt klávesnici. Anebo vám ta současná opravdu vyhovuje?

Nastal čas znovu vynalézt klávesnici. Anebo vám ta současná opravdu vyhovuje?

**Měli bychom provést revoluci klávesnice? ** Anebo je její dnes už hodně zastaralý koncept prostě nejlepší? ** Budeme na klávesnici odkázaní už navždy?

20.  5.  2017 | Jakub Čížek | 58

WannaCry se neměl vůbec rozšířit. Stačilo, abychom používali Windows Update

WannaCry se neměl vůbec rozšířit. Stačilo, abychom používali Windows Update

** WannaCry se masivně rozšířil kvůli zranitelnosti ve Windows ** Ta mu umožnila, aby se pokusil sám napadnout další počítače ** Jenže ta chyba už je dva měsíce opravená!

22.  5.  2017 | Jakub Čížek | 84


Aktuální číslo časopisu Computer

Supertéma: moderní cestování

Kdy opravdu přijdou nové baterie?

Velké testy: 6 herních notebooků a 8 volantů

Recenze: AMD Ryzen řady 5