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

Začínáme s DelphiX - 2. dílZačínáme s DelphiX - 2. 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 - 2. díl

Google       Google       11. 11. 2005       10 105×

Tentokrát si v seriálu procvičíme dvě zajímavé metody vykreslování - StretchDraw a DrawAlpha.

Reklama
Reklama

Vykreslování v DelphiX

Díl druhý – Roztažení do obdélníku a kreslení s průhledností

Po zdlouhavém prvním dílu se dáme rovnou na věc a ukážeme si další dvě užitečné metody vykreslování. Tentokrát to bude StretchDraw, který nám přizpůsobí obrázek čtverci, resp. obdélníku, jaký si definujeme a kreslení s Alpha průhledností. Tak hurá do toho a půl je hotovo.

Roztažení do obdélníku
Toto je velmi užitečná věc, pokud chcete například zobrazit pulzující srdíčko signalizující život v nějaké plošinovce, apod. Zkrátka a jednoduše můžete mít libovolně veliký obrázek a ten průběžně zvětšovat či zmenšovat podle Vašich potřeb (i když, s tím zvětšováním opatrně, lepší je mít obrázek v největší variantě a pouze ho zmenšovat, tak se vyhnete nepříjemnému rozmazání). Rozeberme si tedy příkaz:

TDXImageList.Items[x].StretchDraw (plocha, obdélník, část obrázku);

plocha: To už známe, o čem jsem už mluvil, budu nyní vypouštět.
obdélník: Sem si dosadíme název obdélníku, do kterého budeme kreslit. My si ho pojmenujeme „obdelnik“.

Náš příkaz tedy vypadá takto:


dximagelist1.Items.find('DelphiX').StretchDraw(dxdraw1.surface, obdelnik, 0); // v případě, že chceme vykreslit obrázek s názvem „DelphiX“ do obdélníku „obdelnik“

resp. takto (druhou variantu budu pro příště také vynechávat - myslím, že je to jasné):


dximagelist1.Items[0].StretchDraw(dxdraw1.surface, obdelnik, 0);

Zkuste si program zkompilovat; pravděpodobně Vám bude hlásit, že „obdelnik“ je nesmysl. To není divu, protože jsme žádný nevytvořili. Tak to změníme. Definujte si tedy globální proměnnou obdelnik, která bude typu TRect (pro ty, co v Delphi neumí vůbec nic: uděláte to příkazem „obdelnik: Trect;“ - bez uvozovek - který vložíme před příkaz „implementation,“ za příkaz „var“, který určuje definici proměnných) a programově si určíme rozměry obdélníku hned na spuštění programu (tyto hodnoty se týkají mého obrázku, vy si je přizpůsobte):


procedure TForm1.FormCreate(Sender: TObject);
begin
	obdelnik.Left:=10; // určí vzdálenost levého okraje obdélníku od levého okraje dxdraw
	obdelnik.Top:=10; // určí vzdálenost horní strany
	obdelnik.Right:=212; // vzdálenost pravého okraje obdélníku od levého okraje dxdraw (nikoli od levého okraje obdélníku, na to pozor!)
	obdelnik.Bottom:=94; // vzdálenost spodní strany (platí totéž jako u „obdelnik.Right“)
end;

A pustíme se do kreslení. Zkusíme si rovnou něco, kde se projeví funkčnost příkazu. Obrázek se bude roztahovat na polohu myši tím, že se pravý dolní roh přizpůsobí poloze myši. Opět použiji „-form1.left“ a „-form1.top,“ abych ošetřil vzdálenost okna od okrajů plochy. Ovšem pozor! Zatímco zvětšovat obrázek si můžete do aleluja, se zmenšováním to není tak jednoduché, když to přeženete, začnou se objevovat nesmysly (to je vidět i v mém příkladu). Tomu se dá předejít pomocí vypočítávání obrázku a ukládání do DIBu, ale to je záležitost pro můj seriál příliš komplikovaná a nemá s příkazem StretchDraw vůbec nic společného, takže nevidím důvod, proč to sem psát. Nejjednodušší je zkoušet si, kam až je možno zajít, metodou pokusu a omylu. Ale tady už je finální procedura onTimer:


procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not dxdraw1.CanDraw then exit;
dxdraw1.Surface.fill(0);
	obdelnik.Right:=mouse.cursorpos.x-form1.left; // spočítá vzdálenost pravé strany s přihlédnutím k poloze okna
	obdelnik.Bottom:=mouse.cursorpos.y-form1.top; // spočítá vzdálenost spodní strany s přihlédnutím k poloze okna
	dximagelist1.Items.find('DelphiX').StretchDraw(dxdraw1.surface, obdelnik, 0); // vykreslí na obdélník obrázek
dxdraw1.flip;
end;

Tentokrát si už program zaslouží zdrojový kód ke stažení (v Delphi 5).
Jinak, zkuste si za domácí úkol zkusit to výše zmiňované pulzující srdíčko. Věřím, že to nebude pro většinu z Vás problém.

- A tady jsou obrázky


obr. 1, 2: obrázek přizpůsobený obdélníku


obr. 3, 4: takhle to může vypadat, když to přeženete se zmenšováním do některého ze směrů

- Kreslení s průhledností
Tak tohle bude o něco stručnější, neboť problematiku s obdélníkem již umíme (roztažení do obdélníku je vlastnost skoro všech vykreslovacích metod). Aby si někteří z Vás doplnili mezeru ve vzdělání, můžu Vám prozradit, že průhlednosti, se kterou budeme pracovat, se říká Alpha [alfa] průhlednost. Ten příkaz se podle toho také jmenuje, takže je dobré si to pamatovat. Praktické využití si doufám dovedete představit, takže jdu rovnou na věc. Tady je příkaz (nezapomeňte si vytvořit obdélník):

TDXImageList.Items[x].DrawAlpha(plocha, obdélník, část obrázku, index průhlednosti);

index průhlednosti: Sem si dosadíme číslíčko od 0 do 255 (resp. proměnnou, která toto číslo obsahuje), které nám určí, jak moc bude obrázek průhledný (0-neviditelný, 255-neprůhledný).

A teď konkrétně:


dximagelist1.Items.find('DelphiX').DrawAlpha(dxdraw1.surface, obdelnik, 0, 125); // průhlednost bude přibližně poloviční

Myslím, že k tomu není co dodat. Ukážeme si příklad, kde se pomalu zjeví obrázek. Nejprve si vytvořte proměnnou typu Integer jménem „alpha“, která bude určovat aktuální průhlednost. A nezapomeňte jí na onCreate formuláře nastavit hodnotu nula. Není to nutné (Delphi nastavují automaticky nulovou hodnotu), ale je to profesionálnější přístup. A tady je obsah procedury onTimer:


procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
if not dxdraw1.CanDraw then exit;
dxdraw1.Surface.fill(0);
	if alpha<255 then inc(alpha); // navýší hodnotu proměnné alpha při každém průběhu procedury, pokud ovšem není její hodnota větší nebo rovna 255
	dximagelist1.items.find('DelphiX').DrawAlpha(dxdraw1.surface, obdelnik, 0, alpha);
dxdraw1.Flip;
end;

Pochopitelně by nebyl problém udělat obrázek, který se průběžně skrývá a zase vynořuje, ale to už Vám nechám jako druhý domácí úkol.
A tady je zdrojový kód ke stažení (opět v Delphi 5).

- Tady jsou další obrázky


obr. 1, 2: průběh programu

A je to. Máte-li nějaké dotazy, pište na ICQ#299-545-993 (nebo raději do diskuze). Těším se na Vás u třetí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.

1 názor  —  1 nový  
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.
Společně naprogramovali aplikaci Fly2event, která vytváří cestovatelské balíčky ušité
uživatelům na míru podle toho, co si „olajkovali“ na Facebooku. Projekt má i podle
organizátorů budoucnost a jeho tvůrci ho v současnosti už spouští na webové stránce
fly2event.com.

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

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