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

Začínáme s DelphiX - 1. dílZačínáme s DelphiX - 1. díl

 

Začínáme s DelphiX - 1. díl

Google       zatím neprovedena       12. 9. 2005       18 018×

Toto je první část seriálu o programování v DelphiX pro naprosté začátečníky. Skutečně každý nezkušený programátor si nyní může napsat nějakou aplikaci pod DirectX, aniž by kdy napsal jediný řádek v C++. Seriál byl původně psán pro GameCode, ale vzhledem k přístupu administrátorů k redaktorům (a zrušení webu) jej budu postupně přesunovat sem. Doufám, že ho oceníte tak, jako dříve čtenáři GameCode.

Vykreslování v DelphiX

- Základy v DelphiX a standardní vykreslování

Tento seriál je zaměřen na úplné začátečníky, a podle toho také vypadá. Takže pokud si tento článek otevřel nějaký pokročilý programátor, nechť se neděsí českých překladů a zjednodušených vysvětlivek, které mají tuto problematiku zjednodušit. Ostatně zkušený programátor tady moc nezíská. Také se omlouvám za zdlouhavý začátek, ale jak jsem již řekl. Musím těm, co v DelphiX (resp. Delphi) začínají, vysvětlit podrobnosti. Ti, co už v DelphiX umí, a zajímají je jen zajímavé metody vykreslování, jako vlnění, otáčení, průhlednost apod., nechť přeskočí první dvě části prvního dílu, a možná i celý tento díl. Ale začněme.

- Potřebné komponenty
Prozatím se spokojíme s DelphiX. Nic dalšího potřebovat nebudeme. Už je také na světě verze, která podporuje 3D akceleraci (jmenuje se UnDelphiX) - vzhledem k rychlosti DelphiX při používání speciálních metod vykreslování je to přinejmenším vhodné. Komponentu lze stáhnout zde; pokud již odkaz nefunguje, odkáži Vás na nějaký vyhledávač, třeba Google, který tuto komponentu ochotně vyhledá.

- Sjednocení vzhledu a základní vlastnosti komponent
Aby později nedošlo k nedorozumění, určíme si, jak bude vypadat náš formulář. Toto sestavení budu používat ve všech dílech tohoto seriálu; pokud tomu bude jinak, upozorním na to. Nejprve si přizpůsobíme formulář. Jelikož v DirectX se pracuje v 90% případů ve fullscreenu, ořežeme si pro naše potřeby formulář pouze na vykreslovací plochu, abychom se později nemuseli zabývat zbytečnými výpočty. V object inspectoru (ten panel vlevo) si tedy přepneme položku BorderStyle na bsNone a nastavíme si šířku (width) třeba na 640px a výšku (height) tedy pochopitelně na 480px. Teď vložíme na formulář komponentu DXDraw, což je plocha na kterou budeme kreslit. Tu posuneme na souřadnice 0,0 a nastavíme jí stejné rozměry jako formuláři. Potom si položku Display změníme na „640x480x16“, čímž zajistíme 16 bitové barvy a rozlišení vhodné pro naše okénko. Není problém nastavit si barvy 24 bitové, nebo 32 bitové změnou posledního čísla. Pokud chcete 256 barev, napište osmičku. Další, co budeme potřebovat, je časovač, který nám provede co nejčastěji vykreslení. Pro DX je určen rychlý DXTimer. Vložíme si ho tedy na formulář a nastavíme mu Interval na nulu, čímž dosáhneme nejrychlejšího možného vykreslování. A jelikož pracujeme s obrázky, vložíme si na formulář komponentu DXImageList, která nám bude grafiku „skladovat.“ Nezapomeňte nastavit DXDraw na ten, se kterým budeme pracovat (toto jsem nikdy nepochopil, protože se u každého obrázku stejně tento atribut zadává, ale musí to tak prostě být). A poslední, co uděláme než začneme pracovat, je uložení obrázku do DXImageListu. Dvakrát tedy klikněte na TPictureCollection u položky Items. V zobrazeném okně klikněte na „Add new,“ v object inspectoru si napište název položky (pro naše potřeby zkusme „DelphiX“) a dvojklikem na none u položky Pictures jí přiřaďte obrázek (vyberte bitmapu, s JPG neumí DX přímo pracovat, a postup se mi nechce popisovat). A je hotovo.

- Nutné základy
Nejprve si ukážeme, co musí bezpodmínečně každý program v Delphi X obsahovat. Vše, o čem tu budu psát se řadí do procedury onTimer komponenty DXTimer, na to si dejte majzla, protože standardní na DXTimer je procedura onActivate, a ta by byla pro naše účely k ničemu. A jdeme na kód! Do onTimer musíme zařadit následující řádky:


if not dxdraw1.CanDraw then exit; // ošetří chyby při vykreslování – toto je velmi důležité, pracujete-li např. s canvasem, můžete se vyhnout chybě Access Violation
dxdraw1.Surface.fill(0); // pokryje plochu před kreslením černou barvou – zkuste to vynechat a pochopíte
.
. // tady bude zdrojový kód programu
.
dxdraw1.flip; // tohle bude úplně na konci, vykreslí vše na plochu – to je největší výhoda DX, že vykreslí vše najednou, a zbaví se tak onoho problikávání známého z rychle překreslovaných obrázků

- Standardní vykreslování
A konečně jsme se prokousali k účelu tohoto článku. Odpusťte mi, prosím, ten vláčný začátek. Začneme samozřejmě tím nejjednodušším - vykreslením celého obrázku na souřadnice x,y. K tomu slouží procedura draw. Zde si ji popíšeme:

TDXImageList.Items[x].Draw(plocha, pozice_x, pozice_y, část obrázku);

plocha: To, kam kreslíme. Vždy je to název naší DXDraw, a za tečkou surface. V našem případě tedy místo „plocha“ dosadíme „dxdraw1.surface“ (vždy bez uvozovek).
pozice_x: Určí, jak daleko od levého kraje dxdraw bude vykreslen tento obrázek My si zkusmo dosadíme třeba 20.
pozice_y: Určí výškovou polohu obrázku (vzdálenost od horního okraje). Pro nás třeba 15.
část obrázku: S tou ještě neumíme pracovat, takže dosadíme vždycky nulu.

Takže v našem případě vypadá příkaz takto:
dximagelist1.items.find(‘DelphiX‘).draw(dxdraw1.surface, 20, 15, 0); // v případě, že chceme vykreslit obrázek s názvem „DelphiX“

nebo takto:
dximagelist1.items[0].draw(dxdraw1.surface, 20, 15, 0); // v případě, že chceme vykreslit obrázek z konkrétní pozice v DXImageListu (začíná se od nuly, takže první obrázek má číslo 0, druhý 1, atd)

Jeden z těchto řádků vložte mezi fill a flip, jak bylo řečeno v části Nutné základy. Teď si můžeme program zkompilovat a uvidíme námi zvolený obrázek na souřadnicích x=20 a y=15. Teď si ukážeme praktické využití. Třeba zobrazení grafického kurzoru. Takže si do ImageListu vložte nějaký obrázek šipky pod názvem „Kurzor“ a použijte tento kód:


procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
var x,y:integer; // definice proměnných
begin
if not dxdraw1.CanDraw then exit;
dxdraw1.Surface.fill(0);
	x:=mouse.cursorpos.x-form1.left; // vypočítá polohu x vzhledem k poloze okna a přiřadí ji proměnné x
	y:=mouse.cursorpos.y-form1.top; // vypočítá polohu y vzhledem k poloze okna a přiřadí ji proměnné y
	showcursor(false); // skryje windowsovský kurzor
	dximagelist1.Items.find('Kurzor').Draw(dxdraw1.surface,x,y,0); // vykreslí kurzor na x;y
dxdraw1.flip;
end;

- A ještě pár obrázků


obr. 1: standardní vykreslení na x;y


obr. 2: vykreslení kurzoru na polohu myši

Děkuji za trpělivost, a těším se u dalšího dílu.

×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 Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

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