Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Flex 4: začínáme

V tomto seriálu článků o Flexu 4 projdeme od základů programování ve Flexu 4 – ActionScriptovém frameworku pro tvorbu RIA aplikací. Uvidíte, že programování ve Flexu je zábava a spoustu věcí výrazně zjednodušuje. V prvním díle si probereme základy ActionScriptu, Flexu a ukážeme si vytvoření aplikace zobrazující stavy z Twitteru.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

S Flexem 4 jsme se již setkali v článku Jak na to: Spojení Flex 4 a PHP ve Flash Builderu 4. V tomto seriálu se budeme věnovat frameworku Flex podrobněji, a to především vlastnostem jeho čtvrté verze.

Pár slov o ActionScriptu

ActionScript je objektový jazyk, kterým se programuje pro Flash Player, a který vychází z ECMAScriptu. Je podobný JavaScriptu, Javě, C# či dalším „C-like“ jazykům (kam patří třeba i PHP), takže pro čtenáře, co některý z těchto jazyků znají (a takových je na Zdrojáku jistě naprostá většina), bude ActionScript hračka.

Nyní se nachází ActionScript ve verzi 3.0 a od svého oficiálního vzniku v roce 1998 ušel značný kus cesty. Nebudeme se zatěžovat předešlými verzemi, ale projdeme si rovnou pár ukázek syntaxe ActionScriptu na rozehřátí:

var toggled:Boolean = true; // booleovská hodnota
var x:int = 100; // definice proměnné celého čísla
var y:Number = 123.456; // definice proměnné čísla s pohyblivou desetinnou čárkou, identické s JavaScriptovým Number
var str:String = "Ahoj"; // řetězec
var arr:Array = ["prvek 1", "prvek 2"]; // dynamické pole
var arr2:Array = new Array("prvek 1", "prvek 2"); // taky pole
var vector:Vector.<Number> = [2231,5435,4350,6905]; // Vector je typové pole, v tomto případě pole celých čísel, operace nad Vectorem jsou mnohonásobně rychlejší než nad dynamickým polem, Vector je k dispozici od Flash Playeru 10.
var obj:Object = {jmeno:"Tom",prijmeni:"Krcha"}; // definice objektu
trace(obj.jmeno); // trace je funkce, která v debug módu vypíše řetězec do konzole (Console, najdete zpravidla naspodu obrazovky ve Flash Builderu)
var neco:*; // definice proměnné neznámého typu

Definice třídy

 Např. třída RozsirenePole rozšíří Array o pár funkcí:

package balicek
{
    public class RozsirenePole extends Array
    {
        // neveřejná proměnná přirozeného čísla
        private var i:uint = 123;

        // konstanta
        private const MAX:uint = 200;

        // Konstruktor
        public function RozsirenePole(...parameters)
        {
        // Volání konstruktoru rodičovské třídy
            super(parameters);
        }

        private function neverejnaFunkce():void{
        }

        public function verejnaFunkce():Array{
        }

        // tuhle funkci můžou používat všechny další sub-třídy a třída sama, jinak je privátní
        protected function chráněnáFunkce():Array{
        }

        // statická funkce přístupná jako RozsirenePole.maximalniHodnota();
        public static function maximalniHodnota():uint{
            return MAX;
        }

        // getter/setter
        private var _promenna:Number;

        public function get promenna():Number{
            return _promenna;
        }
        public function set promenna(value:Number):void{
            _promenna = value;
        }
    }
}

K dispozici máme i atributy dynamic, final, internal, native či override. Bližší informace naleznou zájemci v kapitole Statements v ActionScript 3.0 Language Reference.

Cykly

K dispozici jsou standardní cykly jako např. while, do/while, for, for each. Např:

for(var i:uint = 0;i<100;i++){
    trace(i);
}

Kompilátor mxmlc je volně k dispozici v rámci Flex SDK.

Toto byl nezbytný základ a „crash course“ ActionScriptu. Další vlastnosti ActionScriptu si ukážeme v průběhu práce.

Flex 4

Pojďme se tedy podívat na Flex.

Co je vlastně Flex? Potřebuju nějaký Flex Player

Ne, vše je Flash. Flex je knihovna pro Flash – sada ActionScriptových tříd, které použijete pro tvorbu výsledného SWF a ve finále spustíte ve Flash Playeru. Není tedy potřeba žádný Flex Player.

Flex je jednodušší a rychleji v něm složíte RIA aplikaci než v prostém Flashi. I když se zcela jistě najdou lidé, kteří s tímto názorem nebudou souhlasit, a zčásti mají pravdu. V dnešní době existuje spousta ActionScript frameworků, které tvorbu RIA ve Flashi usnadňují (BaseUI, MinimalComps…), ale ve spoustě případů narazíte na něco, co vám bude chybět.

Adobe se tedy rozhodlo vytvořit jednotný framework, který se postupem času stal open-source a má otevřený bug tracker, kde můžete vznášet připomínky na bugy i s případným návrhem na opravu. Flex v dnešní době obsahuje téměř vše pro tvorbu standardních RIA. Jeho poslední verze, Flex 4, navíc uvedla řadu podstatných novinek, které posouvají možnosti zase o kus dál. Zejména při práci s grafikou – stylování, skinování ve spojení s Flash Catalyst, ale i další výhody, které si postupně v seriálu představíme.

Flex 1

Když se bavíme o Flashi, myslíme tím vetšinou čistý ActionScript projekt vytvořený v nějakém IDE (Flash Professional, Flash Builder, FDT, IntelliJ, TextMate, Notepad) a zkompilovaný pomocí MXMLC. Hlavní výhodou je v tomto případě optimalizace – kompletní kontrola nad tím co se ve finále zkompiluje. Týká se to nejenom rychlosti, ale i velikosti výsledného souboru. Proto spousta lidí dává přednost psaní čistého ActionScriptu. (Já osobně preferuji Flex právě kvůli své lenosti a lepší teamové spolupráci, kterou Flex nabízí. – pozn. aut.) Na druhou stranu třeba zobrazení dat ze serveru a jejich editaci

uděláte ve Flexu za pár minut bez nějakých výrazných znalostí.

Základní komponenty Flexu jsou: Seznamy, tlačítka, datagridy, slidery, checkbox, combobox, video přehrávač a spousty dalších.

Pro návrh layoutu nabízí Flex kontejnery, které zjednodušují seskládání aplikace a dávají výslednému zobrazení pravidla.

Navigátory: Akordéon, ButtonBar, Taby apod.

Grafy: Zobrazení grafů je pomocí grafových komponent hračka.

Pro práci s Flexem si stáhněte a nainstalujte Flash Builder 4.Výsledný projekt se všemi příklady si můžete stáhnout zde: Flex 4 – Hello World. Importovat jej můžete přes  File -> Import Flex Project (FXP)

První aplikace: HelloWorld s bindingem

Binding je velmi užitečná vlastnost Flexu, která vám umožní v reálném čase mapování proměnných na komponenty.

Vytvoříme nový projekt: File -> New -> Flex Project. Nazveme jej HelloWorld a dáme Finish. Otevřeme si Design view a drag-and-dropneme NummericStepper z Controls do aplikace. Nastavíme v properties Id: stepper, Minimum: 100, Maximum: 200 a Step size: 10. Když zobrazíme zdroj – Source view, měli bychom tam mít tohle:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <s:NumericStepper x="10" y="10" minimum="100" maximum="200" stepSize="10" id="stepper"/>
</s:Application>

Jazyk MXML, který se při práci s Flexem hojně používá je pouhý XML zápis ActionScriptu. Jmennými prostory definují různé sady tříd, které právě používáte: s – nové Spark komponenty, mx – Halo komponenty z Flexu 3, fx – základní třídy. Později si k tomu řekneme víc, zatím zůstaneme u NumericStepperu a přidáme do aplikace pod něj ještě TextInput.

<s:Button x="10" y="45" label="Button {stepper.value}" id="btn" width="{stepper.value}" height="{stepper.value/2}"/>

Složené závorky definují binding. Když se změní hodnota NumericStepperu, projeví se v popisu tlačítka. Tuto hodnotu projevíme i do šířky a výšky. Spustíme aplikaci. Změnou hodnoty NumericStepperu nyní ovlivňujeme parametry tlačítka. Vidíme, že binding je velmi silný a ušetří nám spoustu kódu. Flex 4 navíc uvedl two-way binding – nejenom, že hodnotu propagujete někam, navíc ji můžete i přijímat.

Druhá aplikace: Two-way binding

Vytvořte v našem projektu aplikaci HelloWorld2.mxml ( File -> New -> MXML application) a vložte do ní 2 TextInputy:

    <s:TextInput x="10" y="10" id="txt1"/>
    <s:TextInput x="10" y="40" id="txt2" text="@{txt1.text}"/>

Zavináč definuje two-way binding. Když změníme hodnotu v txt1, změní se tatáž hodnota v txt2. Nově však můžeme změnit hodnotu v txt2 a ta se projeví do txt1. Tato technika výrazně zjednodušuje editaci ve formulářích. K two-way bindingu se ještě vrátíme v dalších dílech.

Třetí aplikace: Layout

Dynamický layout je další silná zbraň Flexu. U každého prvku můžete nastavit parametry left, right, top, bottom a různě je kombinovat. Jednoduchým příkladem může být např. VideoPlayer, který mění velikost podle velikosti prohlížeče.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark">
    <s:VideoPlayer left="0" right="0" top="0" bottom="0"/>
</s:Application>

Ano. Výše uvedený kód je opravdu celý. Pokud bychom chtěli v přehrávači spustit video, stačí nastavit parametr source např. takto:

    <s:VideoPlayer source="http://www.flashrealtime.com/tuts/video/FlashCatalyst-screencast-czech.mov" left="0" right="0" top="0" bottom="0"/>

Tímto se spustí video pomocí progressive download přes HTTP.

Čtvrtá aplikace: Layout podruhé

Pro další pochopení layoutování si zkuste zkompilovat následující příklad HelloWorld4:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">
    <s:Panel width="250" top="10" bottom="10" x="10">
    </s:Panel>
    <s:Panel left="275" right="10" top="10" height="250">
    </s:Panel>
    <s:Panel left="276" right="10" bottom="10" top="275">
    </s:Panel>
</s:Application>

Pátá aplikace: Pokročilejší layout s HGroup, VGroup a TileGroup

Pokud vám něco říká Flow layout, tak přesně o to zde jde. Prvky se budou pozicovat relativně za sebou. V případě HGroup horizontálně, VGroup vertikálně a s TileGroup  do matice. Všechny tři kontejnery dědí od Group, což je de-facto základní Canvas s absolutním pozicováním.

 <?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx">

    <s:HGroup x="10" y="10">
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
    </s:HGroup>
    
    <s:VGroup x="10" y="40">
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
    </s:VGroup>
    
    <s:TileGroup x="86" y="39" width="298" height="130">
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
        <s:Button label="Button"/>
    </s:TileGroup>
    
</s:Application>

Šestá aplikace: Script blok a Twitter timeline

Asi si celou dobu říkáte, kam zmizel slibovaný ActionScript. Nyní si vytvoříme aplikaci, která zobrazí poslední stavy z Twitter účtu. Použijeme knihovnu twitterscript. Stáhněte si poslední verzi ActionScript knihovny SWC – v tomto případe TwitterApi.1.3­.swc. Vytvořte novou aplikaci PosledniTweety.mxml. V horním menu zvolte Project -> Properties. Otevřete Flex Build Path. Přejděte na Library Path tab, klikněte na Add SWC a vyberte stažený *.swc soubor – tím nalinkujete knihovnu.

Flex 1

Stažení timeline bude tedy vypadat nějak takto: Všechny síťové operace ve Flash Playeru jsou asynchronní, tudíž přídáme EventListener – funkci, která je vyvolána, když vznikne určitá událost – v tomto případě TwitterEvent.ON_U­SER_TIMELINE_RE­SULT.

private function stahniTimeline():void
{
    var twit:Twitter = new Twitter();
    twit.addEventListener(TwitterEvent.ON_USER_TIMELINE_RESULT, stahniTimelineResult);
    twit.loadUserTimeline(txtUser.text);
}

Timeline chceme zobrazit v seznamu, proto přídáme [Bindable] proměnnou timeline a tu nabindujeme na seznam. Data se nachází v event.data – co vrací si můžeme v Debug módu zobrazit v okně Variables, když přídáme na daný řádek breakpoint. My víme, že vrací jedno pole v druhém poli – to vyjmeme pomocí pop() a převedeme na ArrayCollection.

Knihovna twitterscript vám umožňuje vytvořit kompletní Twitter klient jako je např. TweetDeck či Seesmic Desktop za velmi krátkou dobu. Pokud vám dostupní Twitter klienti nevyhovují, zkuste si vytvořit vlastního, lepšího…Výsledná aplikace PosledniTweety.mxml bude tedy vypadat takhle:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" applicationComplete="stahniTimeline()">
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
           
            import twitter.api.*;
            import twitter.api.data.*;
            import twitter.api.events.*;
           
            [Bindable]
            private var timeline:ArrayCollection;
               
            private function stahniTimeline():void
            {
                var twit:Twitter = new Twitter();
                twit.addEventListener(TwitterEvent.ON_USER_TIMELINE_RESULT, stahniTimelineResult);
                twit.loadUserTimeline(txtUser.text);
            }
           
            private function stahniTimelineResult(event:TwitterEvent):void{
                timeline = new ArrayCollection(new Array(event.data).pop());
            }
               
            private function lblFunction(item:Object):String{
                return item.createdAt+" | "+item.text;
            }
        ]]>
    </fx:Script>
   
    <s:List dataProvider="{timeline}" labelFunction="lblFunction" top="100" bottom="0" left="0" right="0"></s:List>
    <s:Button x="142" y="10" label="Stáhnout" click="stahniTimeline()"/>
    <s:TextInput x="10" y="10" id="txtUser" text="tomkrcha"/>
</s:Application>

V článku jsme si ukázali základy práce ve Flexu 4. Dalšími hezkými věcmi, které Flex 4 vývojářům RIA nabízí, jsou např. drag-and-drop, stavy, navigátory apod. Se všemi se postupně seznámíme v dalších dílech.

Tom Krcha

Tom Krcha

Tom Krcha (blog, twitter) zastává pozici Gaming Evangelist v Adobe Systems.

Školení Google+ pro firmy

DW - Školení PPC
  • Jak využít Google+ pro firemní komunikaci a marketing.
  • Čím se liší Google+ od Twitteru a Facebooku z pohledu firemního využití.
  • Jak využít Google+ v souladu s pravidly užívání.
  • Založení Google+ Page (Stránky) krok po kroku, včetně praktických tipů.

Detailní informace o školení Google+ »

Přehled názorů

Re: Flex 4: začínáme
Ruthion Bisclaveret 25. 1. 2010 12:47
Nový
├ 
Re: Flex 4: začínáme
Pavel Šimek 25. 1. 2010 15:34
Nový
│
└ 
Re: Flex 4: začínáme
Ruthion Bisclaveret 25. 1. 2010 16:08
Nový
│
 
├ 
Re: Flex 4: začínáme
Tom Krcha 25. 1. 2010 16:25
Nový
│
 
└ 
Re: Flex 4: začínáme
Pavel Šimek 25. 1. 2010 16:31
Nový
│
 
 
├ 
Re: Flex 4: začínáme
Pavel Šimek 25. 1. 2010 16:36
Nový
│
 
 
│
├ 
Re: Flex 4: začínáme
Ruthion Bisclaveret 25. 1. 2010 16:47
Nový
│
 
 
│
│
├ 
Re: Flex 4: začínáme
Pavel Šimek 25. 1. 2010 16:52
Nový
│
 
 
│
│
└ 
Re: Flex 4: začínáme
Tom Krcha 27. 1. 2010 17:45
Nový
│
 
 
│
└ 
Re: Flex 4: začínáme
Ruthion Bisclaveret 25. 1. 2010 16:51
Nový
│
 
 
└ 
Re: Flex 4: začínáme
Ruthion Bisclaveret 25. 1. 2010 16:45
Nový
│
 
 
 
└ 
Re: Flex 4: začínáme
n00b 2. 2. 2010 21:26
Nový
└ 
Re: Flex 4: začínáme
Tom Krcha 26. 1. 2010 16:53
Nový
 
└ 
„binding“
Franta Kučera 26. 1. 2010 18:16
Nový
 
 
├ 
Re: „binding“
Tom Krcha 26. 1. 2010 18:57
Nový
 
 
│
├ 
Re: „binding“
Ruthion Bisclaveret 26. 1. 2010 21:46
Nový
 
 
│
│
└ 
Re: „binding“
Pavel Šimek 27. 1. 2010 00:48
Nový
 
 
│
└ 
Uzavřenost
Franta Kučera 27. 1. 2010 13:17
Nový
 
 
│
 
├ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 13:34
Nový
 
 
│
 
│
├ 
Re: Uzavřenost
Tom Krcha 27. 1. 2010 13:53
Nový
 
 
│
 
│
└ 
Re: Uzavřenost
Ruthion Bisclaveret 27. 1. 2010 13:59
Nový
 
 
│
 
│
 
└ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 14:14
Nový
 
 
│
 
│
 
 
├ 
Re: Uzavřenost
Peter Rybar 27. 1. 2010 14:46
Nový
 
 
│
 
│
 
 
│
└ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 15:03
Nový
 
 
│
 
│
 
 
└ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 15:21
Nový
 
 
│
 
│
 
 
 
└ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 16:12
Nový
 
 
│
 
│
 
 
 
 
└ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 16:35
Nový
 
 
│
 
│
 
 
 
 
 
├ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 16:42
Nový
 
 
│
 
│
 
 
 
 
 
└ 
Re: Uzavřenost
Tom Krcha 28. 1. 2010 22:43
Nový
 
 
│
 
├ 
Re: Uzavřenost
Tom Krcha 27. 1. 2010 13:45
Nový
 
 
│
 
│
└ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 15:46
Nový
 
 
│
 
│
 
└ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 16:35
Nový
 
 
│
 
│
 
 
├ 
Re: Uzavřenost
Tom Krcha 27. 1. 2010 17:41
Nový
 
 
│
 
│
 
 
│
├ 
Java FX
Franta Kučera 27. 1. 2010 18:36
Nový
 
 
│
 
│
 
 
│
└ 
Re: Uzavřenost
Peter Rybar 27. 1. 2010 20:11
Nový
 
 
│
 
│
 
 
│
 
├ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 20:23
Nový
 
 
│
 
│
 
 
│
 
│
└ 
Re: Uzavřenost
Peter Rybar 27. 1. 2010 20:48
Nový
 
 
│
 
│
 
 
│
 
│
 
└ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 21:21
Nový
 
 
│
 
│
 
 
│
 
└ 
Re: Uzavřenost
dc 27. 1. 2010 20:47
Nový
 
 
│
 
│
 
 
├ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 18:15
Nový
 
 
│
 
│
 
 
│
├ 
Re: Uzavřenost
Pavel Šimek 27. 1. 2010 18:29
Nový
 
 
│
 
│
 
 
│
│
└ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 20:54
Nový
 
 
│
 
│
 
 
│
│
 
└ 
Re: Uzavřenost
Tom Krcha 28. 1. 2010 15:50
Nový
 
 
│
 
│
 
 
│
└ 
IE a video tag - proc?
Tom Krcha 27. 1. 2010 18:42
Nový
 
 
│
 
│
 
 
│
 
└ 
Re: IE a video tag - proc?
Ruthion Bisclaveret 29. 1. 2010 08:31
Nový
 
 
│
 
│
 
 
└ 
Re: Uzavřenost
Franta Kučera 27. 1. 2010 18:28
Nový
 
 
│
 
│
 
 
 
└ 
Re: Uzavřenost
Ruthion Bisclaveret 29. 1. 2010 08:25
Nový
 
 
│
 
└ 
Re: Uzavřenost
Diakritikav vo FLAxi 1. 3. 2010 08:42
Nový
 
 
│
 
 
└ 
Re: Uzavřenost
Franta Kučera 1. 3. 2010 13:10
Nový
 
 
│
 
 
 
└ 
Re: Uzavřenost
Tom Krcha 1. 3. 2010 15:32
Nový
 
 
│
 
 
 
 
└ 
Re: Uzavřenost
Franta Kučera 1. 3. 2010 15:58
Nový
 
 
└ 
Re: „binding“
Pavel Šimek 26. 1. 2010 20:51
Nový
 
 
 
└ 
Tlustý klient
Franta Kučera 27. 1. 2010 13:28
Nový
 
 
 
 
└ 
Re: Tlustý klient
Ruthion Bisclaveret 27. 1. 2010 14:14
Nový
 
 
 
 
 
└ 
Re: Tlustý klient
Pavel Šimek 27. 1. 2010 14:25
Nový
 
 
 
 
 
 
└ 
Re: Tlustý klient
Franta Kučera 27. 1. 2010 15:03
Nový
 
 
 
 
 
 
 
├ 
Re: Tlustý klient
Pavel Šimek 27. 1. 2010 16:25
Nový
 
 
 
 
 
 
 
└ 
Re: Tlustý klient
Tom Krcha 27. 1. 2010 18:46
Nový
 
 
 
 
 
 
 
 
└ 
Re: Tlustý klient
dc 27. 1. 2010 20:36
Nový
 
 
 
 
 
 
 
 
 
└ 
Re: Tlustý klient
Pavel Šimek 27. 1. 2010 20:45
Nový
Pochybnosti
Tomáš Hofman 25. 1. 2010 13:31
Nový
├ 
Re: Pochybnosti
Tom Krcha 25. 1. 2010 14:35
Nový
│
├ 
Re: Pochybnosti
Tom Krcha 25. 1. 2010 14:53
Nový
│
│
└ 
Re: Pochybnosti
dc 25. 1. 2010 16:03
Nový
│
│
 
└ 
Re: Pochybnosti
Tom Krcha 25. 1. 2010 16:34
Nový
│
│
 
 
├ 
Jedna platforma místo několika
Franta Kučera 25. 1. 2010 17:56
Nový
│
│
 
 
│
└ 
Re: Jedna platforma místo několika
Tom Krcha 26. 1. 2010 10:54
Nový
│
│
 
 
└ 
Re: Pochybnosti
dc 25. 1. 2010 19:07
Nový
│
│
 
 
 
└ 
Re: Pochybnosti
Pavel Šimek 25. 1. 2010 21:37
Nový
│
└ 
Re: Pochybnosti
Tomáš Hofman 25. 1. 2010 17:15
Nový
│
 
├ 
Re: Pochybnosti
Pavel Šimek 25. 1. 2010 17:26
Nový
│
 
└ 
Re: Pochybnosti
Pavel Šimek 25. 1. 2010 17:49
Nový
│
 
 
└ 
Re: Pochybnosti
frankiex 25. 1. 2010 21:22
Nový
│
 
 
 
└ 
Re: Pochybnosti
JT 26. 1. 2010 00:09
Nový
├ 
Re: Pochybnosti
frankiex 25. 1. 2010 14:52
Nový
├ 
Re: Pochybnosti
Pavel Šimek 25. 1. 2010 15:45
Nový
└ 
Re: Pochybnosti
David Grudl 25. 1. 2010 15:49
Nový
Hmm. I wonder if HTML5 can do this?
Tom Krcha 25. 1. 2010 16:36
Nový
└ 
Re: Hmm. I wonder if HTML5 can do this?
Ruthion Bisclaveret 29. 1. 2010 08:52
Nový
 
├ 
Re: Hmm. I wonder if HTML5 can do this?
Ruthion Bisclaveret 29. 1. 2010 08:56
Nový
 
└ 
Re: Hmm. I wonder if HTML5 can do this?
Tom Krcha 29. 1. 2010 11:37
Nový
 
 
└ 
Re: Hmm. I wonder if HTML5 can do this?
Ruthion Bisclaveret 29. 1. 2010 19:41
Nový
TileGroup chybí
Gebauer 22. 2. 2010 08:29
Nový
└ 
Re: TileGroup chybí
SimPod 28. 2. 2010 01:36
Nový
 
└ 
Re: TileGroup chybí
Tom Krcha 1. 3. 2010 16:48
Nový
 
 
└ 
Re: TileGroup chybí
Tom Krcha 22. 3. 2010 21:57
Nový
Flex - jak vypadá DOBRÁ stránka ve Flexu?
Honza 7. 9. 2010 18:52
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem