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

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

Obrázek ke článku První český hackathon ve vlaku inspirovaly služby jako  Tinder, Airbnb nebo Uber

První český hackathon ve vlaku inspirovaly služby jako Tinder, Airbnb nebo Uber

Patnáct set kilometrů, cesta přes dva státy, šestnáct hodin programování a přísun energy drinků, tak by se dal shrnout unikátní hackathon ve vlaku pořádaný Kiwi.com. Z Prahy do Košic a zpět se svezlo celkem 13 týmů, každý s originálním nápadem. Hlavní výhru, voucher na letenky v hodnotě 2 500 EUR, si v Praze převzal tým až z Ukrajiny.

Reklama
Reklama
Obrázek ke článku Gamifikace nakupování dorazila i do České republiky

Gamifikace nakupování dorazila i do České republiky

Zákazníci zejména retailových společností jsou často znuděni klasickými věrnostními či motivačními programy. Většinou z toho důvodu, že jsou jeden jako druhý a nepřináší nic nového. Ale i v České republice se projevují zahraniční trendy, nedávno zde totiž vstoupila na trh a rychle se uchytila nová platforma kombinující to nejlepší z věrnostních a motivačních programů, která navíc využívá prvky gamifikace – Rondo.cz. Na hlavní milníky vývoje nálad a motivace zákazníků a nejnovější trendy se zaměřil Jan Hřebabecký, spoluzakladatel Rondo.cz

Celý článekGoogle2. listopadu 2017PR
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ů.

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