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.

Diskuze (28) Další článek: Microsoft nabízí čtvrt milionu dolarů za dopadení autora Confickeru

Témata článku: Programování, Třetí rozměr, Průhledné okno, Catch, Form, Okno, Programátor, Efekt, Lin, Zmizení


Určitě si přečtěte

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 65

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

Apple dal do MacBooku procesor Core i9 a 4TB SSD. Ani se neptejte, co za to chce...

** Apple aktualizoval notebooky MacBook Pro, dostaly nový hardware ** Těšit se můžete na nové procesory a větší paměť ** Cena nejvybavenějšího modelu překročí 200 tisíc korun

Martin Miksa | 99

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

Google ADT-2: Miniaturní krabička s Android TV 8.0, kterou si nikdy nekoupíte

** Dlouho se nevědělo, co to přesně má být ** Pak se s krabičkou Google pochlubil na I/O ** Do „Chromecastu“ vtěsnal celý Android TV

Jakub Čížek | 24

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji