Začínáme s DelphiX – 4. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
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 355×

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 Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

Obrázek ke článku Cloud computing je využíván stále intenzivněji

Cloud computing je využíván stále intenzivněji

Využívání cloud computingu nabývá na intenzitě. Jen v letošním roce vzroste podle analytiků trh se službami veřejného cloudu o 18 %, přičemž o téměř 37 % vzrostou služby typu IaaS. Růst o více než pětinu pak čeká služby poskytování softwaru formou služby, tedy SaaS. Aktuálním trendům v oblasti využívání cloudu se bude věnovat konference Cloud computing v praxi, která se koná 23. března. 2017 v pražském Kongresovém centru Vavruška na Karlově náměstí 5.

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 © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý