Robinho, a rstSucessoGetMenus recebe um ArrayCollection com os menus que estão cadastrados no banco, um dos parâmetros retornados é um bytearray que é o retorno do blob, ou seja, o ícone cadastrado. O primeiro laço monta as abas (navigatorContent). O loaderCustomizado teve que ser feito para adicionar um parâmetro customizado (paramCustom) que recebe o navigatorContent. Depois é adicionado um listener para o contentLoaderInfo, quando o loaderCustomizado estireceber o listener (Event.COMPLETE), ele dispara o getBitmapDataAbas que faz justamente o que o nome sugere, ele recupera a imagem e seta no menu no item, no caso na aba (var icone:Class = RuntimeBitmapAsset.getClass(bitmapDataAbas);evt.target.loader.paramCustom.icon = icone;). O segundo laço monta o tree executanto a mesma lógica das abas, porém com a necessidade de usar uma recursividade pois o tree pode ter filhos, netos, bisnetos, etc.
Minha sugestão pra você é ler linha por linha tentando entender cada uma. Veja as classes que são usadas, entenda cada uma. Postei o código foi pra você estudar mesmo. Estude-o e fará um menu com ícones dinâmicos. O código seta ícone em navigatorContent e tree, mas pode ser usado pra setar ícones em qualquer coisa que os receba. Mas se não quiser ou não tiver tempo de estudar, a solução do Bruno atende, basta colocar as imagens no servidor. Em quinta-feira, 24 de outubro de 2013 23h02min17s UTC-2, Robinho de Morais escreveu: > > Leonardo, obrigado pelo ajuda, mas entendi muito não.... > > Qualquer dúvida estou a disposição. > > *Robinho* > *Analista/Programador de Sistemas* > *Skype: robinhocne* > *"A fé em Deus nos faz crer no incrível, ver o invisível e realizar o > impossível."* > > > Em 24 de outubro de 2013 16:50, Leonardo Oliveira > <[email protected]<javascript:> > > escreveu: > >> Ha! O loader customizado é só uma extensão de loader: >> >> package Modulos.Financeiro.Componentes.CmpLoaderCustomizado >> { >> import flash.display.Loader; >> public class LoaderCustomizado extends Loader >> { >> public var paramCustom:Object = new Object(); >> public function LoaderCustomizado() >> { >> super(); >> } >> } >> } >> >> e as principais variáveis são essas: >> private var loaderCustomizado:LoaderCustomizado; >> private var bitmapData:BitmapData; >> private var loaderCustomizadoAbas:LoaderCustomizado; >> private var bitmapDataAbas:BitmapData; >> >> Em quinta-feira, 24 de outubro de 2013 16h46min43s UTC-2, Leonardo >> Oliveira escreveu: >> >>> Robinho, como eu não tenho problema nenhum em ajudar quem quer aprender, >>> dá uma olhada nesse código, é o que eu uso. Ele traz os ícones do banco em >>> um campo blob e monta em abas e em tree. Cada aba, que também têm seus >>> ícones, possui um tree. Já vou avisando aos corneteiros de plantão que fiz >>> o código quando estava aprendendo, há anos, nunca mais voltei nele pra >>> melhorar. >>> >>> private function rstSucessoGetMenus(evt:**ResultEvent):void{ >>> if (evt.result != null){ >>> /* >>> * RECEBE OS MENUS >>> */ >>> menus = new ArrayCollection(Array(evt.**result)); >>> /* >>> * MONTA ABAS (MENU PRINCIPAL) >>> */ >>> for(var i:uint; i<evt.result.length; i++){ >>> if(evt.result[i].children != null){ >>> var navigatorContent:**NavigatorContent = new NavigatorContent(); >>> navigatorContent.label = evt.result[i].label; >>> //navigatorContent.icon >>> navigatorContent.percentWidth = 100; >>> navigatorContent.percentHeight = 100; >>> navigatorContent.id = "_tab"+navigatorContent.label.**replace(" ", "_"); >>> navigatorContent.**addEventListener(MouseEvent.**CLICK, >>> handlerSelectAba); >>> _abas.addChild(**navigatorContent); >>> if(evt.result[i].icone != null){ >>> loaderCustomizadoAbas = new LoaderCustomizado(); >>> loaderCustomizadoAbas.**paramCustom = navigatorContent; >>> loaderCustomizadoAbas.**contentLoaderInfo.**addEventListener(Event.**COMPLETE, >>> >>> getBitmapDataAbas); >>> loaderCustomizadoAbas.**loadBytes(evt.result[i].icone)**; >>> } >>> } >>> } >>> /* >>> * MONTA MENU TREE >>> */ >>> for(var j:uint=0; j<evt.result.length;j++){ >>> if(evt.result[j].children != null){ >>> montarMenuTree(j); >>> return; >>> } >>> } >>> } >>> } >>> private function rstFalhaGetMenus(evt:**FaultEvent):void{ >>> Funcoes.mensagem("Falha ao retornar lista de menus autorizados:\n" + >>> evt.message,"E",null); >>> } >>> private function montarMenuTree(index:uint):**void{ >>> /* >>> * MONTA O TREE CONFORME ÍNDICE >>> */ >>> acChildrens = new ArrayCollection(); >>> acChildrens = ArrayCollection(menus[index].**children); >>> var obj: Object = new Object(); >>> obj.label = menus[index].label; >>> obj.type = "Normal"; >>> obj.id = 466; >>> obj.children = acChildrens; >>> acMenusPai = new ArrayCollection(); >>> acMenusPai.addItem(obj); >>> _menuTree.dataProvider = acMenusPai; >>> callLater(expandFirstNode); >>> _menuTree.width = 240;//reseta o tamanho do menu tree >>> /* >>> * FUNÇÃO RECURSIVA PARA SETAR OS ÍCONES NO TREE: VER COMO CONVERTER >>> BYTEARRAY PARA BITMAPDATA EM TEMPO DE EXECUÇÃO >>> */ >>> setarIconesRecursivo(**ArrayCollection(_menuTree.**dataProvider)); >>> } >>> private function setarIconesRecursivo(**dataProvider:ArrayCollection):* >>> *void{ >>> for(var i:uint=0; i<dataProvider.length;i++){ >>> if(dataProvider[i].icone != null){ >>> loaderCustomizado = new LoaderCustomizado(); >>> //passo o parâmetro para o loader >>> loaderCustomizado.paramCustom = dataProvider[i]; >>> loaderCustomizado.**contentLoaderInfo.**addEventListener(Event.**COMPLETE, >>> getBitmapData); >>> loaderCustomizado.loadBytes(**dataProvider[i].icone); >>> } >>> if(dataProvider[i].children != null){ >>> setarIconesRecursivo(**ArrayCollection(dataProvider[**i].children)); >>> //return; >>> } >>> } >>> } >>> private function getBitmapData(evt:Event):void{ >>> //recupero a imagem e o parâmetro no evento >>> var conteudo:* = evt.target.content; >>> bitmapData = new BitmapData(conteudo.width,**conteudo.height,true,** >>> 0x00000000); >>> var matrix:Matrix = new Matrix(); >>> bitmapData.draw(conteudo, matrix,null,null,null,true); >>> var icone:Class = RuntimeBitmapAsset.getClass(**bitmapData); >>> _menuTree.setItemIcon(evt.**target.loader.paramCustom, icone, null); >>> } >>> private function getBitmapDataAbas(evt:Event):**void{ >>> //recupero a imagem e o parâmetro no evento >>> var conteudo:* = evt.target.content; >>> bitmapDataAbas = new BitmapData(conteudo.width,**conteudo.height,true,* >>> *0x00000000); >>> var matrix:Matrix = new Matrix(); >>> bitmapDataAbas.draw(conteudo, matrix,null,null,null,true); >>> var icone:Class = RuntimeBitmapAsset.getClass(**bitmapDataAbas); >>> evt.target.loader.paramCustom.**icon = icone; >>> } >>> private function expandFirstNode():void{ >>> /* >>> * EXPANDE O PRIMEIRO NÓ (PASTA PAI: NOME DO MÓDULO) >>> */ >>> _menuTree.expandItem(**acMenusPai[0], true, true); >>> } >>> private function handlerSelectAba(evt:**IndexChangedEvent):void{ >>> /* >>> * REMONTA MENU TREE CONFORME ÍNDICE DA ABA >>> */ >>> montarMenuTree(evt.newIndex); >>> } >>> private function handlerSelectTree(evt:**ListEvent):void{ >>> /* >>> * VERIFICA SE É PASTA OU JANELA (PAI OU FILHO) >>> */ >>> var item:Object = Tree(evt.currentTarget).**selectedItem; >>> if(_menuTree.dataDescriptor.**isBranch(item)){ >>> /* >>> * EXPANDE PASTA >>> */ >>> _menuTree.expandItem(item, !_menuTree.isItemOpen(item), true); >>> } >>> else{ >>> /* >>> * ABRE JANELA CORRESPONDENTE >>> */ >>> //é link: abre _blank >>> /* if(evt.itemRenderer.data.**interfaces.substr(0,4) == "http"){ >>> var request:URLRequest = new URLRequest(); >>> request.url = evt.itemRenderer.data.**interfaces.toString(); >>> //nota fiscal eletrônica: enviar usuário e senha >>> if(evt.itemRenderer.data.**interfaces == "http://200.150.159.134:8080/" >>> **){ >>> var params:URLVariables = new URLVariables(); >>> params.login = parentApplication.**nomeLoginPVDA; >>> params.senha = parentApplication.senha; >>> request.method = URLRequestMethod.POST; >>> request.data = params; >>> } >>> navigateToURL(request,"_blank"**); >>> return; >>> } */ >>> var ClassReference:Class = >>> getDefinitionByName(evt.**itemRenderer.data.interfaces) >>> as Class; >>> var instance:Object = new ClassReference(); >>> /* >>> * Verifica quem é o avô (ex: FrmCadUsuarios->**ClasseFrmCadUsuarios->** >>> ClasseMDIBasico) >>> */ >>> var SuperClassName:String = getQualifiedSuperclassName(**instance); >>> ClassReference = getDefinitionByName(**SuperClassName) as Class; >>> var classeSuperPai:String = getQualifiedSuperclassName(** >>> ClassReference); >>> /* >>> * Outros tipos de avôs devem ser tratados com antecedência no switch >>> */ >>> switch(classeSuperPai){ >>> case "Interfaces.Global.Basico::**ClasseMDIBasico": >>> //inclui a janela >>> MDIWindow(instance).left = 0; >>> MDIWindow(instance).top = 0; >>> MDIWindow(instance).resizable = true; >>> _cnvAreaTrabalho.**windowManager.add(MDIWindow(**instance)); >>> break; >>> case "MDIWindow::**ClasseCmpMDIWindow": >>> //inclui a janela >>> MDIWindow(instance).left = 0; >>> MDIWindow(instance).top = 0; >>> MDIWindow(instance).resizable = true; >>> _cnvAreaTrabalho.**windowManager.add(MDIWindow(**instance)); >>> break; >>> case "mx.containers::TitleWindow": >>> //inclui o popup >>> //Observação importante: ao incluir spark em módulos é obrigatório >>> passar o parâmetro moduleFactory. >>> //neste exemplo, existe um s:RadioButton no popup para envio de aviso >>> de vencimento de duplicatas >>> PopUpManager.addPopUp(**TitleWindow(instance), parent, true, null, >>> moduleFactory); >>> PopUpManager.centerPopUp(**TitleWindow(instance)); >>> break; >>> default: >>> MDIWindow(instance).left = 0; >>> MDIWindow(instance).top = 0; >>> MDIWindow(instance).resizable = true; >>> _cnvAreaTrabalho.**windowManager.add(MDIWindow(**instance)); >>> } >>> } >>> } >>> >>> Em sábado, 19 de outubro de 2013 21h53min47s UTC-3, Robinho de Morais >>> escreveu: >>>> >>>> Tenho esse tree e queria no Cadastro colocar um icone, no do Processos >>>> outro icone e do Relatório outro icone... >>>> >>>> como eu mudo.. >>>> >>>> >>>> <https://lh3.googleusercontent.com/-kIUtUaXKGqQ/UmMpalw1UQI/AAAAAAAAC6A/HJxbcrS20ho/s1600/tree.png> >>>> >>>> >>>> >>>> -- >> -- >> Você recebeu esta mensagem porque está inscrito na lista "flexdev" >> Para enviar uma mensagem, envie um e-mail para >> [email protected]<javascript:> >> Para sair da lista, envie um email em branco para >> [email protected] <javascript:> >> Mais opções estão disponíveis em http://groups.google.com/group/flexdev >> --- >> Você está recebendo esta mensagem porque se inscreveu no grupo "flexdev" >> dos Grupos do Google. >> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, >> envie um e-mail para [email protected] <javascript:>. >> Para obter mais opções, acesse https://groups.google.com/groups/opt_out. >> > > -- -- Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para [email protected] Para sair da lista, envie um email em branco para [email protected] Mais opções estão disponíveis em http://groups.google.com/group/flexdev --- Você está recebendo esta mensagem porque se inscreveu no grupo "flexdev" dos Grupos do Google. Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [email protected]. Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
