Začínáme s DelphiX – 4. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Začínáme s DelphiX – 4. dílZačínáme s DelphiX – 4. díl

 
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

Začínáme s DelphiX – 4. díl

Google       Google       31. 3. 2006       8 745×

Je tu další díl seriálu, tentokrát na kombinované metody vykreslování.

Reklama
Reklama

Vykreslování v DelphiX

Díl čtvrtý – kombinované příkazy a výpočet pro zarovnání na střed

Po trochu náročnějším třetím díle přicházím s něčím oddychovějším. Ti zvídavější z Vás, nebo ti, kteří mají zapnutý autocomplete (automatické doplnění příkazu), si jistě všimli, že DelphiX nabízí příkazy DrawRotateAlpha a DrawWaveXAlpha (DrawAdd, DrawSub a jejich kombinace si popíšeme v některém z příštích dílů, jsou totiž také velmi zajímavé, ale zatím je nepotřebujeme). Ti chytřejší už přišli na to, k čemu vlastně slouží. Jejich popis nám nezabere příliš místa, ale dnešní poněkud krátký článek si plně vynahradíme příštím dílem, který bude celkem dlouhý, a jeho obsah bude opravdovým bonbónkem pro ty, kteří nemají s programováním zkušenosti. Ale nechte se překvapit, dneska je náplň jiná. Ale trochu místa si vyplníme alespoň jedním důležitým výpočtem, který se v práci s grafikou hodí.


Otáčení obrázku s průhledností

Výpočty spojené s otáčením jsme si vytrpěli už minule, takže dneska jen stručný rozbor příkazu:

TDXImageList.Items[x].DrawRotateAlpha(plocha, pozice_x, pozice_y, šířka, výška, část obrázku, střed_x, střed_y, úhel, index průhlednosti);

Tady není co vysvětlovat, vše už umíme z minulých dílů. Jenom opět přidám příklad:


dximagelist1.Items.find('DelphiX').DrawRotateAlpha(dxdraw1.surface, 200, 200, 202, 84, 0, 0.5, 0.5, 32, 125); // obrázek otočený o 45 stupňů s poloviční průhledností

A jak jsem slíbil, tak jsem splnil. Toto bylo velice jednoduché a abych Vám udělal radost, další příkaz na tom bude v tomto směru stejně.


Zvlnění s průhledností

A máme tu další příkaz. Tentokrát to bude mé oblíbené zvlnění, ovšem s průhledností.

TDXImageList.Items[x].DrawWaveXAlpha(plocha, pozice_x, pozice_y, šířka, výška, část obrázku, amplituda, šířka_vlny, perioda, index průhlednosti);

Kdo to říkal? Já jsem to říkal! Je to snadné. A ještě příklad, jako vždy:


dximagelist1.Items.find('DelphiX').DrawWaveXAlpha(dxdraw1.surface, 33, 33, 202, 84, 0, 5, 30, 0, 150); // zvlněný obrázek s poloviční průhledností

Výpočty pro vycentrování

Jistě jste si všimli, že všechny naše obrázky jsou jen tak pohozeny více či méně v levém horním rohu. Ale velmi často budeme potřebovat zarovnání přesně doprostřed obrazovky. A dneska si to ukážeme pomocí operátoru div, což je to stejné, jako / (lomítko) – slouží tedy pro dělení, ale s tou výjimkou, že se jedná o dělení celočíselné (nebo, chcete-li, se zbytkem). Případný zbytek se pak spočítá pomocí mod, ale to už je jenom pro zajímavost. Takže si ukažme výpočty:

V případě, že chcete určit pouze střed otáčení u příkazu DrawRotate a odvozených, je výpočet jednoduchý:


x:=dxdraw1.Width div 2; // přiřadí x polovinu šířky dxdraw
y:=dxdraw1.Height div 2; // přiřadí y polovinu výšky dxdraw

Pokud ale potřebujeme určit levý a horní okraj, jak tomu je u Draw a DrawWaveX (a samozřejmě odvozených), je to maličko složitější. Musíme totiž ještě odečíst polovinu obrázku. Totéž samozřejmě platí i pro výpočet levé a horní strany obdélníku, který používáme pro StretchDraw a DrawAlpha.


x:=(dxdraw1.Width div 2) - (dximagelist1.items.Find('DelphiX').Width div 2); // od poloviny šířky dxdraw odečteme ještě polovinu šířky obrázku
y:=(dxdraw1.Height div 2) - (dximagelist1.items.Find('DelphiX').Height div 2); // od poloviny výšky dxdraw odečteme polovinu výšky obrázku

Je to vlastně úplně logické. Normální matematika. Vidíte, že je občas i užitečná. Teď si uděláme jenom jednoduchý prográmek, který na prostředku formuláře otočí pomalu se zjevující obrázek o 360 stupňů a poté ho natrvalo zastaví. Budeme potřebovat Integery x, y a index, kde index bude určovat průhlednost a zároveň natočení. Nezapomeňte jim na začátek programu přiřadit správné hodnoty (pro x a y to bude to, co jsem Vás právě naučil, a pro index jako vždy nula). A zde je obsah procedury onTimer i s komentáři:


procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin

if not dxdraw1.CanDraw then exit;
dxdraw1.Surface.Fill(0);

    if index<256 then inc(index); // pokud je index roven 255 nebo menší, navyš ho o jeden
    dximagelist1.items.Find('DelphiX').DrawRotateAlpha(dxdraw1.surface, x, y, 202, 84, 0, 0.5, 0.5, index, index); // a nakreslíme to

dxdraw1.flip;

end;

To je vše. Myslím, že obrázky nejsou třeba. Tady je zdrojáček v Delphi 5.

Tímto končím tento díl. Dotazy prosím pište na ICQ 299-545-993, nebo jako příspěvek do diskuze. A příště se můžete těšit na velice zajímavý díl, který nám vynahradí ten nepříjemně zkrácený dnešní. Zkusíme si konečně něco naprogramovat, ale víc neprozradím. Tak zase příště!

P.S.: Omluvte celkovou slohovou stránku. Psal jsem to už před dlouhou dobou a nepřepisuju to po sobě. Děkuju za pochopení.

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

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v DelphiX, má rád mobily se Symbianem a PDA s Windows Mobile.

Nové články

Reklama
Reklama
Obrázek ke článku NopCommerce – datová vrstva a přístup k datům – 2. díl

NopCommerce – datová vrstva a přístup k datům – 2. díl

V minulém článku jsme si představili platformu NopCommerce z globálního pohledu. V dnešním díle se již zaměříme na konkrétní část systému, a to datovou vrstvu. Představíme si základní stavební kameny systému v podobě doménových objektů. Ukážeme si, jakým způsobem rozšířit doménové objekty a jakým způsobem přistupuje NopCommerce k nastavení systému a modulů.

Obrázek ke článku Seznamte se s open source platformou NopCommerce – 1. díl

Seznamte se s open source platformou NopCommerce – 1. díl

Hledáte e-commerce řešení, které si dokážete přizpůsobit podle vašich požadavků? Chcete čistý a srozumitelný kód, se kterým bude radost pracovat? Prozkoumejte s námi možnosti open source projektu NopCommerce. Seriál programování pod NopCommerce vám pomůže překonat první kroky nejistoty a úspěšně zvládnout vývoj pod platformou NopCommerce.

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