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

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

 

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

Google       Google       31. 3. 2006       8 059×

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

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

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ý