Články

Tisk článku Tisk článku

Úvod do grafiky

[Zpět na kategorii]

Datum: 27. 8. 2007 11:52       Autor: Tomáš Herceg       Zobrazeno: 21915x

Kategorie: GDI+

Témata: 2D, VB.NET

Seriál: VB.NET od začátku - Díl 13.

V tomto díle se podíváme na základy grafiky, ukážeme si jednoduché geometrické tvary - obdélníky, elipsy atd., používání výplní (šrafování a přechod barev). Také si na úvod řekněme něco o jmenných prostorech.


V jubilejním 13. díle našeho seriálu pro začátečníky se naučíme, jak vykreslovat základní geometrické obrazce a jednoduché grafické útvary. Jelikož jsme v tutoriálu pro začátečníky, nebudu zabíhat do podrobností. Těm se totiž věnujiv článcích ze seriálu Programujeme hry, který najdete také na tomto serveru. V tomto díle tedy ukážu jen úplné základy a vysvětlím trochu teorie. Ještě doplním, že budeme používat grafické rozhraní GDI+, což je základní grafické prostředí implementované v .NET frameworku.

Jmenné prostory

.NET framework má jednu velmi dobrou a užitečnou vlastnost - přehlednou strukturu tříd a funkcí. To zajišťují tzv. namespaces, česky bychom mohli říci jmenné prostory. Používali jsme již dříve, ale nevysvětloval jsem, jak fungují. Nyní je na to ta správná chvíle. Namespace sdružuje třídy, funkce, struktury apod., které spolu nějak logicky souvisí. V .NET frameworku je základním jmenným prostorem System. Ten se dělí na několik částí, z nichž zmíním ty nejpoužívanější:

  • System
    • Data - vše, co se týká databází a práce s daty
    • Drawing - vše, co se týká grafiky a vykreslování
    • IO - vše, co se týká práce se souborovým systémem
    • Net - vše, co se týká síťové komunikace, např. TCP/IP, UDP, ale i HTTP, FTP protokoly, e-mail atd.
    • Security - vše, co se týká zabezpečení
      • Cryptography - funkce pro šifrování
    • Text - vše, co se týká práce s textem (StringBuilder, regulární výrazy, kódování a znakové sady)
    • Web - prakticky celé ASP.NET
    • Windows
      • Forms - komponenty, formuláře atd.
    • Xml - vše, co se týká práce s dokumenty XML, jejich šablonami a schématy

Pokud chci použít funkci z nějakého namespace, mám několik možností. Vždy můžeme vypsat celou cestu (úrovně se oddělují tečkou) - tzn. např. System.Windows.Forms.Button. Takto bychom se ale asi nikam nedostali, pořád všechno vypisovat není ideální řešení.

Proto existuje v jazyce Visual Basic .NET klíčové slovo Imports, za kterým následuje cesta k nějakému namespace. Řádky Imports se píší do každého souboru úplně nahoru, před deklaraci jakékoliv třídy. Jakmile mám nějaký namespace naimportovaný, nemusím vypisovat celou cestu. Pokud tedy naimportuji System.Windows.Forms, můžu pak klidně napsat Dim b As New Button(). Visual Basic pak prohledá všechny naimportované jmenné prostory, pokud nikde datový typ či třídu nenajde, vyhodí chybu.

Možná je vám divné, že tohle fungovalo i bez klíčového slova Imports. Máte pravdu. Pokud otevřete vlastnosti projektu, na záložce References uvidíte dva seznamy.

Záložka References ve vlastnostech projektu

V horním seznamu jsou knihovny, které naše aplikace vyžaduje. Tlačítkem Add můžeme přidat další knihovny a využívat i jejich funkce. To nás nyní ale moc nezajímá. Hlavní je spodní seznam Imported Namespaces, ve kterém jsou zaškrtnuty jmenné prostory, které jsou naimportovány automaticky. Pokud chceme naimportovat nějaký další, můžeme jej zaškrtnout zde. Je to vhodné zejména v případě, že jej chcete využívat ve více (téměř všech) souborech. Pokud jej potřebujeme použít pouze v jednom či dvou souborech, doporučuji spíše použít klíčové slovo Imports. Občas se totiž stane, že ve dvou jmenných prostorech jsou dvě třídy nebo funkce se stejným názvem. Při použití je tedy nutné použít celou cestu nebo její část (např. Forms.Button, ale jen pokud máme naimportováno System.Windows).

Kdokoliv si může vytvořit i svůj vlastní namespace, často se to využívá ve firmách (každá firma většinou používá svůj namespace, který mívá nějakou vnitřní strukturu, do nějž zařazují veškeré své knihovny a třídy). Deklaraci třídy můžeme "obklíčit" řádky Namespace XY.Z a End Namespace, čímž řekneme, že se třída nachází ve jmenném prostoru XY.Z. Samozřejmě není nutné, aby všechny třídy byly ve stejném souboru mezi řádky Namespace a End Namespace, stačí každou třídu, ať je kdekoliv, uzavřít do namespace se stejným názvem, kde ji poté také najdeme.

Dost už teorie, jdeme kreslit

Pokud jste přetrpěli nudnou část o jmenných prostorech, vězte, že odteď to již bude zábavnější a plné obrázků. Ještě před tím si ale povíme něco o objektu System.Drawing.Graphics, což je prakticky ten nejdůležitější objekt, pokud mluvíme o vykreslování. Tento objekt reprezentuje jakési kreslící plátno, na které můžeme vykreslovat jak základní geometrické tvary (čára, obdélník, elipsa, část obvodu elipsy apod.), ale i např. text. Celé plátno má daleko více funkcí, ty však v tomto článku probrat nestihneme. Ukážeme si tedy jen základní geometrické tvary a výplně.

Vytvořte si ve Visual Basic .NET nový projekt (jako vždy Windows Application) a ihned se přepněte do okna kódu (např. klávesovou zkratkou F7). V horních rozbalovacích seznamech nalistujte Form 1 Events a Paint, čímž vytvoříme proceduru události Paint formuláře. S touto událostí jsme ještě nepracovali, nastane vždy, když je potřeba obsah okna znovu vykreslit. Pokud máme normální okno, které je již na obrazovce, a nakreslíme na něj něco, ihned se informace zobrazí. Pokud ale otevřeme jiné okno a zakryjeme jím část prvního okna, po jejím odkrytí je potřeba obsah vykreslit znovu (Windows XP a nižší si totiž vykreslovaný obsah okna nepamatují, na Windows Vista se v tomto případě událost nevyvolá). Překreslení je také potřeba, pokud jsme okno minimalizovali a pak znovu zobrazili. Ve všech těchto případech se zavolá událost Paint, ve které bychom měli zajistit vykreslení obsahu okna.

Pokud se podíváme na záhlaví události Paint, můžeme si všimnout, že něco je jinak. Druhý parametr e není typu System.EventArgs, jak tomu bývá jinde, ale je typu System.Windows.Forms.PaintEventArgs. To proto, že obsahuje objekt Graphics, na který budeme vykreslovat, a pár dalších informací (pro nás zatím nepodstatných).

Zkuste tedy do procedury vepsat tento řádek:

e.Graphics.Clear(Color.Yellow)

Pokud program spustíte, obsah okna bude žlutý. Toto chování by se samozřejmě dalo nastavit i vlastností BackColor, ale já jsem chtěl demostrovat metodu Clear objektu Graphics. Ta smaže vše, co bylo vykresleno na okně, a obarví to předanou barvou. Jak vidíme, Color je struktura, která obsahuje spoustu již předdefinovaných barev, které můžeme využít. Stačí napsat Color.Yellow a máme žlutou.

Metody DrawLine, DrawRectangle a DrawEllipse

Pro vykreslení základních geometrických tvarů čára, obdélník a elipsa nám objekt Graphics nabízí metody DrawLine, DrawRectangle a DrawEllipse. Všechny tyto metody vyžadují jako první parametr hodnotu typu Pen, která reprezentuje pero, kterým tvar kreslíme. Máme opět předdefnovanou širokou paletu standardních kreslících per, můžeme si ale vytvořit své vlastní a specifikovat mu např. tloušťku a vzorek (plná čára, přerušované čárky, čerchovaně, tečičky atd.). Vytvoříme tedy modré pero tloušťky 3.

Dim p As New Pen(Color.Blue, 3)

Ještě než začneme kreslit tvary, musíme si něco říci o souřadnicích. Protože obrazovka je dvojrozměrná, máme dvě souřadnicové osy X a Y. Výsledný obraz na obrazovce se skládá z tzv. pixelů, česky obrazových bodů. Každý pixel může mít právě jednu barvu, protože pixely jsou malé a je jich hodně, ve výsledku dávají celistvý obraz.

Souřadnicový systém

Počátek souřadnickvé osy je v horním levém rohu formuláře. Osa X je vodorovná a roste směrem doprava, osa Y je svislá a roste směrem dolů. Každý pixel je jednoznačně určen souřadnicemi [X, Y], kde hodnoty X, Y jsou kladná celá čísla. Jednotkou je samozřejmě jeden pixel.

DrawLine

Pokud tedy do události Paint zapíšete tyto řádky, vykreslí se čára. První parametr je pero, druhý a třetí jsou souřadnice X a Y prvního konce úsečky a čtvrtý a pátý parametr jsou souřadnice druhého konec úsečky.

        Dim p As New Pen(Color.Blue, 3)
        e.Graphics.DrawLine(p, 20, 120, 250, 50)

Vykreslená čára z bodu [20,120] do bodu [250,50]

DrawRectangle

Pokud potřebujeme vykreslit obdélník (čtverec je speciální druh obdélníku), máme na to funkci DrawRectangle. Prvním parametrem je opět pero, druhým a třetím jsou souřadnice horního levého rohu obdélníka a čtvrtým a pátým parametrem je šířka a výška obdélníka.

        Dim p As New Pen(Color.Salmon, 3)
        e.Graphics.DrawRectangle(p, 20, 20, 150, 100)

Obrázek s obdélníkem z bodu [20,20], šířkou 150 a výškou 100 pixelů.

DrawEllipse

Touto metodou vykreslíme elipsu (kružnice je zvláštní druh elipsy). Prvním parametrem je klasicky pero, další parametry jsou stejné, jako u obdélníka. Vymezují tedy obdélník, do nějž se elipsa vepíše.

        Dim p As New Pen(Color.Indigo, 3)
        e.Graphics.DrawEllipse(p, 20, 20, 150, 100)

Elipsa vepsaná do předchozího obdélníka

Odbočka - přetěžování metod

Možná jste si všimli, že když zapisujete tyto metody, Visual Studio zobrazuje nápovědu se seznamem parametrů a jejich popisem. Možná vám neunikla minitlačítka nahoru a dolů, které přepínají různé sady parametrů. Díky této pomůcce se dostáváme k termínu přetěžování. Je to v .NET frameworku poměrně využívaná záležitost.

Inteligentní nápověda Visual Studia

Pokud deklarujete proceduru či funkci, můžete ji nadeklarovat vícekrát pro různé datové typy a počty argumentů. Jako příklad napíši proceduru pro dělení - pokud předáme datové typy Integer, vydělíme celočíselně, pokud předáme Double, vydělíme normálně (výsledkem bude desetinné číslo).

    Overloads Function Vydel(ByVal a As Integer, ByVal b As Integer) As Integer
        Return a \ b
    End Function

    Overloads Function Vydel(ByVal a As Double, ByVal b As Double) As Double
        Return a / b
    End Function

 Všimněte si klíčového slova Overloads, které označuje, že se jedná o přetíženou metodu. Ve skutečnosti tam být nemusí, ale je dobrým programátorským zvykem jej používat, aby bylo hned jasné, že máme více možností, jak metodu použít.

Velmi často se přetížení používá tak, že máme funkční kód pouze v jedné variantě a ostatní varianty pouze něco provedou s argumenty (např. je převedou) a zavolají první metodu, která kód obsahuje. Bylo by totiž zbytečné vypisovat prakticky stejný kód na víc míst, vždy je lepší se tomu vyvarovat.

Point a Rectangle

V souvislosti s přetížením metod DrawLine, DrawEllipse a DrawRectangle je nasnadě ukázat si dva datové typy (struktury), které usnadňují práci s body a obdélníky. Jsou jimi Point a Rectangle. Nejde o nic jiného než o struktury, které obsahují několik vlastností. Point je bod a obsahuje vlastnosti X a Y, což jsou jeho souřadnice. Rectangle je obdélník, který má vlastnosti Left, Top (souřadnice X, resp. Y) a Width, Height (šířka a výška). Výhodou je, že je můžeme i snadno vytvořit - stačí napsat New Point(20, 20) či New Rectangle(10, 10, 30, 50). Tyto datové typy se hodí, pokud potřebujete např. ve funkci vracet právě obě souřadnice bodu, nebo 4 údaje pro obdélník.

Existují ještě datové typy PointF a RectangleF, které jsou téměř stejné, až na to, že podporují desetinná čísla.

Výplně a vybarvování

Tři metody, které jsme si právě ukázali, kreslily pouze tvar. Pokud chceme vybarvit obdélník či elipsu, máme k tomuto účelu metody FillRectangle a FillEllipse. Liší se pouze prvním parametrem - není jím Pen, ale Brush (štětec). Zde máme opět široké pole působnosti - buď můžeme využít fádní předdefinované štětce, které jednolitě vyplní celou plochu, nebo si můžeme vytvořit vlastní šrafovací štětce či štětce, které dané místo vyplní přechodem barev.

Jednoduchý štětec plné barvy je reprezentován třídou SolidBrush. Předáme jí akorát barvu štětce. Máme kromě toho také předdefinovanou sadu štětců (Brushes.Green je prakticky to samé).

Pokud budu tedy chtít vybarvit elipsu zeleně, stačí mi tento kód:

        Dim b As New SolidBrush(Color.Green)
        e.Graphics.FillEllipse(b, 20, 20, 150, 100)

Vybarvená elipsa

Pokud chceme oblast vyšrafovat, použijeme Drawing2D.HatchBrush. Pokročilejší štětce jsou v namespace System.Drawing.Drawing2D. V konstruktoru zvolíme styl z výběru, barvu popředí a barvu pozadí, a pak jen vybarvíme elipsu.

        Dim b As New Drawing2D.HatchBrush(Drawing2D.HatchStyle.DiagonalCross, Color.DarkSlateBlue, Color.Yellow)
        e.Graphics.FillEllipse(b, 50, 50, 100, 100)

Vyšrafovaná elipsa

Jako poslední štětec si ukážeme LinearGradientBrush, který vyplní danou oblast plynulým přechodem dvou barev. V konstruktoru zadáme dva body (musíme použít datový typ PointF) a dvě barvy. a prvním bodu bude první barva, na druhém bude druhá barva, a ostatní body se vyplní příslušnou kombinací dvou barev ve správném poměru.

        Dim b As New Drawing2D.LinearGradientBrush(New PointF(20, 20), New PointF(120, 120), Color.Yellow, Color.Green)
        e.Graphics.FillRectangle(b, 20, 20, 100, 100)

Barevný přechod

To je pro dnešek vše, v příštím díle ještě budeme pokračovat s grafikou a napíšeme si jednoduchou aplikaci, která bude vykreslovat jednoduché sloupcové a čárové grafy.


> Na začátek

 

Hodnocení:

Hlasů: 40
Zvolte své hodnocení

Tomáš Herceg

Jsem hlavním softwarovým architektem ve společnosti Riganti. Mám dlouholeté zkušenosti s technologiemi ASP.NET, Silverlight, WPF a XNA. Působím též jako lektor ve společnosti Gopas a již třetím rokem jsem držitelem ocenění Microsoft Most Valuable Professional.

Podpořte vznik dalších článků

Související články

DílNázev článku 
Díl 1. Úvod, vývojové prostředí a základní pojmy 25. 4. 2007
Díl 2. Začínáme programovat 25. 4. 2007
Díl 3. Proměnné a datové typy 25. 4. 2007
Díl 4. Podmínky a operátory 26. 4. 2007
Díl 5. Složitější podmínky a rozhodovací struktury 26. 4. 2007
Díl 6. Cyklus For 5. 5. 2007
Díl 7. Pole 9. 5. 2007
Díl 8. Pole, cykly a práce se soubory 14. 5. 2007
Díl 9. Přidáváme druhý formulář 18. 5. 2007
Díl 10. Funkce a procedury 6. 7. 2007
Díl 11. Kolekce a pole 27. 7. 2007
Díl 12. Práce s textem a řetězci 17. 8. 2007
Díl 13. Úvod do grafiky 27. 8. 2007
Díl 14. Vykreslujeme graf 31. 8. 2007
Díl 15. Práce se soubory, úvod do objektově orientovaného programování 19. 11. 2007
Díl 16. Třídy a funkce .NET frameworku, o kterých je dobré vědět 31. 12. 2007
Díl 17. Objektově orientované programování - základy 30. 6. 2008
Díl 18. Dědičnost 6. 10. 2008

RSS Feed RSS Feed

Diskuse

Aktualizace obrazovky ve VB.NET

Datum: 28.8.2007 9:35
Autor: neregistrovaný (90.176.62.20)
Hodnocení autora: není
Příspěvků: 0
Ve VBA existuje možnost vypínat a zapínat aktualizaci (vykreslování) obrazovky (Application.ScreenUpdating = True nebo False).
Pokud kreslím nějaký složitě vypočítávaný graf, sestávájící z velkého počtu samostatných obrazců pak je žádoucí aby se vykreslil na obrazovce rychle a najednou (což ve VBA umožňuje již zmíněná vlastnost). Existuje analogické nastavení nebo podobné řešení ve VB.NET?
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Re: Aktualizace obrazovky ve VB.NET

Datum: 28.8.2007 10:47
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
Ano, VB.NET má vlastnost DoubleBuffered, která podobné situace řeší. Ale problém VBA byl hlavně v tom, že se jednalo o interpretovaný jazyk, který je sám o sobě pomalý už tím, že je interpretovaný. Vykreslování v GDI+ je velmi výkonné, takže se není čeho bát.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Re: Aktualizace obrazovky ve VB.NET

Datum: 28.8.2007 16:30
Autor: neregistrovaný (90.176.62.20)
Hodnocení autora: není
Příspěvků: 0
Díky za informace. Vyzkouším.
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

děkuji

Datum: 13.3.2008 12:07
Autor: neregistrovaný (82.208.13.137)
Hodnocení autora: není
Příspěvků: 0
děkuji za návody z vbnet.cz díky němu sem se naučil programovat ve visual basic 2005 expres edition pisp
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

Jak udělat ten nejjednodušší zápis do souboru.

Datum: 17.10.2008 17:07
Autor: neregistrovaný (193.86.143.79)
Hodnocení autora: není
Příspěvků: 0
'Prosím o shovívavost, neb nejsem programátor ani se do toho nechci moc plést. Jsem projekant staveb a v programu DesignCAD si v implementovaném BasicCAdu mohu napsat makra pro kreslení některých prvků. Ve vbnetu potřebuji vytvořit exe soubor kde bude formulář s obrázkem kde budou okotované rozměry, které chci zadat. Tyto rozměry prostě napsat a zapsat do souboru, třeba "okno.dta" . Po použití tento zápis smazat. Čili jaksi data pro jedno použití, bez uchovávání. Nic víc nechci. VBnet mám, návody zde čtu.
Další již umím v makru:
t.j. vyvolání formuláře (run xx.exe následně čtení proměnných ze souboru .dta a kompletní vykreslení do hladiny, barvy, typ čar, zavěšení na kurzor, umístění, natočení a odkliknutí a tím zafixování.)
V podstatě bych potřeboval navést jak tu proceduru začít. Stačí mně pro jeden údaj, ostatní už půjde.
Děkuji za pomoc.
Ing. Kareš'
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: Jak udělat ten nejjednodušší zápis do souboru.

Datum: 23.11.2008 20:47
Autor: neregistrovaný (193.86.143.79)
Hodnocení autora: není
Příspěvků: 0
Jak vidím tak vice než za měsíc mně nikdo nedpověděl, což je také odpověď. Asi ve msylu : "dej nám pokoj".
 
           [Odpovědět]
 
Hodnocení: -4 Čekejte, prosím...

Re: Jak udělat ten nejjednodušší zápis do souboru.

Datum: 23.11.2008 21:03
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
My máme povinnost Vám odpovídat na Vaše dotazy? Zajímavé, o tom nic nevím. A Vaše schopnosti dedukce jsou také mizivé - to, že Vám nikdo neodpoví, neznamená "dej nám pokoj", ale jednu ze 3 variant: 1) dotaz je položen blbě, 2) nikdo si ho nevšimnul (máme tady desítky článků, nesledujeme diskuse pod každým) anebo 3) odpověď neznáme a nemáme čas ani motivaci jí hledat. Příště hledejte chyby nejprve u sebe a pak až buzerujte, takové lidi mám vůbec nejraději.
 
           [Odpovědět]
 
Hodnocení: 2 Čekejte, prosím...

Re: Jak udělat ten nejjednodušší zápis do souboru.

Datum: 24.11.2008 20:36
Autor: neregistrovaný (193.86.143.79)
Hodnocení autora: není
Příspěvků: 0
Ano, děkuji.
Nechtěl jsem se Vás dotknout. Nemáte žádnou povinnost. Nic takového jsem nenapsal. Povzdechnul jsem si a to je vše.
 
           [Odpovědět]
 
Hodnocení: 4 Čekejte, prosím...

Re: Jak udělat ten nejjednodušší zápis do souboru.

Datum: 9.12.2009 15:51
Autor: neregistrovaný (78.98.14.2)
Hodnocení autora: není
Příspěvků: 0
daj mi na teba kontakt najlepsie skype, to co potrebujes je pomerne jednoduche..
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Kreslení do PictureBoxu

Datum: 13.12.2008 11:37
Autor: Petr Doleček
Hodnocení autora: 29
Příspěvků: 133
Prosím,
jaké má vb.net příkazy pro vykreslení pixelu do PictureBoxu(zadájí se souřadnice a barva) a zjištění barvy pixelu (zadají se souřadnice pixelu PictureBoxu).
Nebo existuje nějaký příkaz na vyříznutí obráku z obrázku?

Potřeboval bych udělat z obrázku několik výřezů o velikosti 128x128pix. Přemýšlel jsem že bych překresloval pixel po pixelu do jiného PictureBoxu a ten pak uložil. Pokud má vb.net funkci pro vyříznutí obrázku bylo by o něco jednoduší :-)

Předem děkuji za případnou odpověď.
 
           [Odpovědět]
 
Hodnocení: -2 Čekejte, prosím...

vybarvení oblasti

Datum: 2.1.2009 13:31
Autor: neregistrovaný (88.103.125.130)
Hodnocení autora: není
Příspěvků: 0
Mám v pictureboxu načtený .bmp obrázek (mapu Evropy). Potřeboval bych mít možnost vybarvit kliknutím jednotlivé státy, které mají hranice vyznačeny černou barvou a vnitřek je bílý. Odpovídá to funkci Plechovka v Malování. Ale nemůžu se nikde shnat kód. Můžete mi někdo poradit pomocí jaké funkce se toho dá docílit?
 
           [Odpovědět]
 
Hodnocení: -1 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 2.1.2009 13:32
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
No, to si asi budete muset sám napsat, je to poměrně hezké cvičení.
 
           [Odpovědět]
 
Hodnocení: -3 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 2.1.2009 14:04
Autor: Petr Bělaška
Hodnocení autora: 0
Příspěvků: 8
Děkuji za rychlou, ale ne úplně povzbudivou odpověď. Našel jsem jeden příspěvek, kde něco takového řešili pomocí fce ExtFloodFill - máte s ní nějaké zkušenosti?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 2.1.2009 15:31
Autor: Tomáš Herceg
Hodnocení autora: 1673
Příspěvků: 3536
No, vím akorát, že WinAPI pro tohle nějaké funkce mělo (FloodFill a ExtFloodFill), ale nejsem si jistý, jestli zrovna tyto dvě jdou použít v .NETu.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 3.1.2009 10:24
Autor: Petr Bělaška
Hodnocení autora: 0
Příspěvků: 8
Už jsem našel, co jsem hledal. Zdrojový kód pro využití fce Extfloodfill ve vb.net je na této stránce
http://www.planetsourcecode.com/vb/scrip...
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 5.1.2009 11:37
Autor: Petr Bělaška
Hodnocení autora: 0
Příspěvků: 8
Mám jesště jeden dotaz. V pictureboxu mám mapu států, jeden z nich chci vybarvit třeba modrou barvou tak, že kliknu na talčítko Vyber barvu, zvolím modrou a dám OK a pak kliknu na vnitřek daného státu. Jak mám ale zařídit, aby se událost např. pocBox1_MouseDown aktivovala jen v situaci, že vyberu danou barvu? Jinými slovy, abych po otevření formuláře mohl do picBox1 klikat bez nebezpečí, že se mi bude pořád něco vybarvovat.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Re: vybarvení oblasti

Datum: 10.1.2009 16:53
Autor: Petr Bělaška
Hodnocení autora: 0
Příspěvků: 8
Nedivím se, že nikdo neodpověděl - spravila to obyčejná proměnná a podmínka If.
Ale než to člověku dojde :-)
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Tetris

Datum: 2.1.2009 17:27
Autor: Vítězslav Grygar
Hodnocení autora: 5
Příspěvků: 17
dobrý den,
nechal jsem se trochu inspirovat hrou bubble breaker a vrhnul jsem se na tvorbu hry Tetris. Zasekl jsem se ale u funkce vytvoření nové kostky, kdy potřebuji zjistit, jestli již nejsou kostky navrstvené až nahoru(tedy konec hry). chtěl jsem to řešit tak, že zjistím barvu všech políček, kde by se měla vytvořit nová kostka. Při použití tohoto kódu:

 For i As Integer = 1 To UBound(pozicekostky, 1)
                        pixel = b.GetPixel(pozicekostky(i, 1), pozicekostky(i, 2)) ' zde se stane chyba
                        If pixel <> Color.Black Then gameover()
                    Next i
 
, kdy pozicekostky je pole souřadnic jednotlivých kostiček v kostce, mi to nahlásí chybu "Odkaz na objekt není nastaven na instanci objektu."(NullReferenceException). Mám VB.NET 2005 express edition. Neví někdo, kde jsem udělal chybu (případně jak se to dá řešit lépe)? Děkuji za odpovědi a postřehy.
 
           [Odpovědět]
 
Hodnocení: 1 Čekejte, prosím...

refresh grafiky v textovem poli

Datum: 23.3.2009 20:32
Autor: neregistrovaný (78.45.121.111)
Hodnocení autora: není
Příspěvků: 0
ahoj
vykresluju si graf primo do textoveho pole,ale nevim si rady jakym zpusobem naprogramomat obnovu grafiky tohoho textoveho pole pokud dojde k minimalizaci nebo k prekryti jinym oknem.par navodu sem nasel ale vsechny se vztahovali k udalostni procedure paint, kterou textove pole nema.pouzivam VB 08 express.
diky
Petr Z.
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

jak rozpohybovat hruh?

Datum: 31.7.2009 10:31
Autor: neregistrovaný (80.188.229.84)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,

přečetl jsem si úvod do grafiky ve vb.netu od vás a velmi se mi líbí.

Ve svém volném čase se věnuji různým výpočtům z oblasti astronomie a nebeské mechaniky; mám již naprogramovanou simulaci pohybu dvojhvězdy ale jen v číslech; rád bych tyto výpočty převedl do grafiky.

Prosím o radu, nebo nasměrování na knihu, blog, cokoliv, jak zpusobit pohyb kruhu.
Bude tam třeba přiřazení vymalovaného kruhu k objektu? Lze něco takového? FillEllipse je metoda.

Vladimír
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Výplň

Datum: 5.12.2009 8:28
Autor: neregistrovaný (89.103.203.86)
Hodnocení autora: není
Příspěvků: 0
Dobrý den,
co bych měl napsat když potřebuju vyplnit obrazec těmito * ?
Děkuji
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Aktualizace vykreslení

Datum: 6.11.2010 13:13
Autor: neregistrovaný (88.146.209.100)
Hodnocení autora: není
Příspěvků: 0
Nazdar, zkoušel jsem udělat takovou aplikaci, ve které jako uživatel měním souřadnice x a y. Chtěl jsem, aby se při kliknutí na tlačítko aktualizovat, vykreslil bod ve stejných souřadnicích, jako jsem uvedl. Procedura paint se ale vyvolá jen když minimalizuju a následně zobrazím okno. Jak tedy vyvolat tuto proceduru?
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...

Měřítko na Lajně

Datum: 13.3.2011 14:57
Autor: neregistrovaný (89.24.137.114)
Hodnocení autora: není
Příspěvků: 0
Prosí Vás, mám dotaz jak udělám na čáře měřítko. Chci ji rozdělit na stejné dílky.
Tuším že to půjde smyčku While/for, ale to je všechno co tuším .
 
           [Odpovědět]
 
Hodnocení: 0 Čekejte, prosím...
 

VBNET.CZ | © 2007 Tomáš Herceg, Tomáš Jecha | Kopírování a přejímání jakéhokoliv obsahu z tohoto webu je bez písemného svolení autorů zakázáno.