Archiv ‘Flex’ kategorie

Invalid Embed directive in stylesheet

Pátek, Květen 15th, 2009

Pomalý nájezd od stavby k programování mě neustále něčím překvapuje. Poslední nepříjemností bylo po otevření jednoho projektu se zhruba 100 chybových hlášek v CSS souboru projektu. Co se za tu dobu, kdy byl projekt uzavřen, mohlo sakra stát? Začal jsem znovu linkovat objekty ze SWC knihovny, ale stále se chyby objevovaly a co hůře, vůbec nemizely. Zapátral jsem tedy přes Google a naleznul cestu k řešení problému. Stačí, aby jediný soubor embedovaný nebo jinak nalinkovaný v CSS byl přesunut a ihned může vyskočit řada chyb typu "Invalid Embed directive in stylesheet". Podíval jsem se detailně na CSS soubor a opravdu našel jeden soubor, který změnil umístění a nebyla opravená jeho cesta. Po nápravě zmizel i zbytek zhruba stovky chybových hlášek.

Digest mismatch with RSL

Úterý, Březen 24th, 2009

Při používání RSL (Runtime Shared Library) ve Flex Builderu jsem po aktualizaci zjistil nekompatibilitu s novou verzí Flex 3.2 SDK:

V nastavení kompileru, respektive u Library Path zůstal odkaz na starou verzi SWF+SWZ knihoven, takže při exportu došlo k chybnému načtení. Jednoduché řešení spočívá v doplnění poslední verze knihoven framework_3.2.0.3958 , které najdeme v balíčku Flex 3.2 SDK

validateNow() ve Flexu

Čtvrtek, Březen 19th, 2009

Vložení komponenty v žádném případě neznamená, že lze ihned přistoupit k jejím vlastnostem, které plynou z její následné vizualizace a to především velikosti. Příkaz trace v tomto případě vrátí nulovou hodnotu:

var newBtn:Button = new Button();
newBtn.label = "Tlačítko";
container.addChild(newBtn);
trace("šířka: "+newBtn.height);//vrací nulovou hodnotu

Je to z toho důvodu, že vykreslení a aktualizace vlastností komponenty se děje postupně až při nejbližší "příležitosti" - novému renderování scény. Pomocí metody validateNow() lze spustit okamžitou aktualizaci komponenty, takže pak už je možné pracovat s její velikostí:

var newBtn:Button = new Button();
newBtn.label = "Tlačítko";
container.addChild(newBtn);
newBtn.validateNow();
trace("šířka: "+newBtn.height);
//vrátí hodnotu 22
//- defaultní u Button komponent

Pokud ovšem potřebujeme pracovat i se změnou velikosti komponenty, do které je například nové tlačítko vloženo, je nutné zavolat metodu validateNow() pro nadřazenou komponentu. Obecně je ale vždy vhodnější volat uvedenou metodu vždy z komponenty, která je nadřazená té, u které chceme okamžitě zjistit nové rozměry. Pro nadřazenou komponentu "container" z příkladu by tedy bylo vhodnější použít příkaz:

var newBtn:Button = new Button();
newBtn.label = "Tlačítko";
container.addChild(newBtn);
container.parent.validateNow();
trace("šířka: "+container.height);//vrátí
//novou výšku nadřazené komponenty containe

Flex - kulaté rohy komponent

Středa, Březen 11th, 2009

Chvilička zkoušení, abych zjistil, že kulaté rohy pro Canvas a HBox/VBox komponenty nejsou jenom díky stylu cornerRadius, ale že se k tomu musí doplnit i styl pro ohraničení komponenty, tedy borderStyle:

Canvas
{
backgroundColor: #FFFFFF;
borderColor: #FFFFFF;
borderStyle: solid;
borderThickness: 5;
cornerRadius: 10;
}

List komponenta a pořadí vybraných položek

Středa, Březen 4th, 2009

Při použití List komponenty, u které máme povolen výběr více položek přes atribut allowMultipleSelection="true", nám vrací pole vybraných prvků vždy v tom pořadí, ve kterém provedl uživatel výběr. V některých případech ale potřebujeme získat seznam vybraných prvků přesně v tom pořadí, v jakém jsou umístěn v komponentě, bez ohledu na způsob výběru. Řešením je přistoupení k vybraným objektů pomocí atributu selectedIndices, který vrací indexy vybraných položek (opět v pořadí dle volby uživatele). Před jejich dalším zpracováním stačí už jenom provést seřazení v poli:

var arr:Array = komponentaList.selectedIndices;
trace("Původní pořadí prvků
podle výběru uživatele: "+arr);
arr.sort(Array.NUMERIC|Array.DESCENDING);
trace("Nové pořadí prvků podle
jejich umístění v komponentě: "+arr);

Flex 3.2 a export AIRu

Neděle, Únor 8th, 2009

Při aktualizaci Flex Builderu 3.2 na AIR runtime na 1.5 je při exportu/testování zobrazena chyba:

Napravení exportu provedeme opravou xml konfiguračního souboru aplikace Nazev_aplikace-app.xml, kde v řádku:

<application xmlns="http://ns.adobe.com/air/application/1.5">

změníme verzi AIR prostředí na nově používané.

undo/redo textové pole

Středa, Únor 4th, 2009

Právě jsem se chtěl pustit do vytvoření jednoduché komponenty, která si bude pamatovat svojí historii a umožňovat tak undo/redo kroky. Náhodně jsem ale objevil, že už něco takového je k dispozici na google code: http://code.google.com/p/undo-textfields/ , vypadá to zajímavě

Flex - export SWF

Pátek, Leden 23rd, 2009

Při finálním publikování SWF souboru ve Flex Builderu bychom měli využívat tlačítko "Export Release Build"

Výsledný SWF soubor bude po exportu znatelně menší (zhruba o 20%-30%), než kdybychom využili SWF soubor vytvořený v rámci testování aplikace.

Flex Formatter, konečně!

Středa, Leden 21st, 2009

Tak jsem se konečně dočkal a po předlouhé době se objevil plugin pro Flex Builder(Eclipse), který formátuje ActionScript, naprosto dokonalé: http://sourceforge.net/projects/flexformatter/ Pro instalaci stačí soubor zkopírovat do adresáře plugins.

Spuštění JavaScriptu v ActionScriptu

Úterý, Leden 13th, 2009

Na Flash.cz jsem už dříve psal o možnosti volání JS funkcí pomocí ActionScriptu. Pomocí ExternalInterface třídy ale můžeme JS funkce sestavit přímo v ActionScriptu a spustit je bez jejich vypsání v HTML kódu stránky. Taková funkce pak vypadá třeba takto:

private function setHTMLTitle():void {
ExternalInterface.call("function(){document.title='"+ti.text+"'}");
}

A umožňuje přímo měnit titulek stránky:

Na první pohled se tak odkrývají značné možnosti při manipulaci se stránkou, ovšem jen vybrané vlastnosti a funkce fungují.  Testováním vlastností: https://developer.mozilla.org/en/DOM/document zjistíme, že máme přístup jen k několika vybraným (zmíněný titulek, zjištění URL stránky, nastavení status titulku...). Ono je to dobře, protože pak by se z obyčejných flashových bannerů mohly stát nebezpeční útočníci.