Ops! fiz o upload dos arquivos em: http://groups.google.com.br/group/flexdev/web/ButtonBarMultiline.zip
[]'s Beck Novaes On 31 jan, 14:15, "Beck Novaes" <[EMAIL PROTECTED]> wrote: > João, > > O problema da quebra de linha é devido ao método layoutContent do > Button. Ele define um tamanho para o label do botão menor do que seria > necessário para mostrar duas linhas. Aí vai um exemplo que pode > resolver o seu problema. > > App.mxml > ======== > > <?xml version="1.0" encoding="utf-8"?> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > xmlns:local="*"> > > <local:ButtonBarMultiline dataProvider="vs" height="40" > paddingTop="0"/> > > <mx:ViewStack id="vs" borderStyle="solid"> > > <mx:Canvas label="Tab 1 test"> > <mx:Label text="Tab1 Content"/> > </mx:Canvas> > > <mx:Canvas label="Tab 2 test"> > <mx:Label text="Tab2 Content"/> > </mx:Canvas> > > </mx:ViewStack> > > </mx:Application> > > ButtonBarButtonMultiline.as > ================ > > package > { > > import mx.controls.Button; > import mx.core.UITextFormat; > import mx.core.mx_internal; > > use namespace mx_internal; > > public class ButtonBarButtonMultiline extends Button > { > > > //-------------------------------------------------------------------------- > // > // Constructor > // > > //-------------------------------------------------------------------------- > > /** > * Constructor. > */ > public function ButtonBarButtonMultiline() > { > super(); > } > > > //-------------------------------------------------------------------------- > // > // Variables > // > > //-------------------------------------------------------------------------- > > /** > * @private > */ > private var inLayoutContents:Boolean = false; > > > //-------------------------------------------------------------------------- > // > // Overridden methods: UIComponent > // > > //-------------------------------------------------------------------------- > > /** > * @private > */ > override public function > determineTextFormatFromStyles():UITextFormat > { > if (inLayoutContents && selected) > return textField.getUITextFormat(); > else > return super.determineTextFormatFromStyles(); > } > > > //-------------------------------------------------------------------------- > // > // Overridden methods: Button > // > > //-------------------------------------------------------------------------- > > /** > * @private > */ > override mx_internal function layoutContents(unscaledWidth:Number, > > unscaledHeight:Number, > > offset:Boolean):void > { > // Fix for bug 122684: > // layoutContents() internally calls measureText(), which > calls > // determineTextFormatFromStyles() to get the UITextFormat > object. > // For a selected button, the textField's text styles can > differ from > // the button's text styles. So we need to return the right > // UITextFormat in determineTextFormatFromStyles() > inLayoutContents = true; > super.layoutContents(unscaledWidth, unscaledHeight, offset); > inLayoutContents = false; > > /*********************************** > * ESTES DOIS MAGIC NUMBERS SÃO A SOLUÇÃO PARA O SEU PROBLEMA. > Fiquei > com preguiça > * de fazer o cálculo correto para definir estes > valores > *************************************/ > textField.y = 5; > textField.height *= 2; > > } > > } > } > > ButtonBarMultiline.as > ================ > > package > { > > import mx.controls.ButtonBar; > import mx.core.ClassFactory; > import mx.core.mx_internal; > > use namespace mx_internal; > > public class ButtonBarMultiline extends ButtonBar > { > public function ButtonBarMultiline() > { > super(); > navItemFactory = new ClassFactory(ButtonBarButtonMultiline); > } > > } > } > > []'s > Beck Novaes > > On 31 jan, 02:41, João Saleiro <[EMAIL PROTECTED]> wrote: > > > Comecei a embirrar com a ButtonBar, e entrei em desespero. O que queria > > era começar por adicionar a funcionalidade de usar htmlText nos botões > > ao invés de text normal, e permitir pelo menos 2 linhas (através de \n, > > por exemplo). Para tal, teria que extender a classe ButtonBar para que > > usasse uma versão extendida da classe Button (HTMLButton, por exemplo). > > Fiz alguns progressos com o meu HTMLButton, consegui colocar-lhe > > HTMLText, mas através de aldrabices, e com algumas falhas. Por exemplo, > > no rollover o botão perdia o valor do HTMLButton. A minha aldrabice foi > > fazer uma função que alterava directamente o htmltext do textfield. Mas > > não chegou... > > > O ideal era conseguir sobrepor a função > > > override protected function updateDisplayList(unscaledWidth:Number, > > unscaledHeight:Number):void > > > da classe Button, de forma a que onde está textField.text passasse a > > textField.htmlText > > > e outra (talvez mx_internal function > > layoutContents(unscaledWidth:Number, unscaledHeight:Number, > > offset:Boolean):void ) para poder mudar o height. > > > Mas não consegui... > > Além de que o avanço da hora já não ajuda! > > > Por isso, no mais profundo dos desesperos, pergunto como posso extender > > a classe ButtonBar e a classe Button para poder suportar HtmlText em > > duas linhas nos botões da ButtonBar? > > > Obrigado, > > > João Saleiro > > > João Saleiro wrote: > > > Já descobri o que era... estupidez minha :) > > > É ridículo mais uma vez, mas tirando o opaqueBackground="false" ficou > > > bom. Vendo na documentação, o valor deveria ser null. > > > Já está tudo ok. > > > > Vou agora descobrir como aplicar um estilo de texto diferente a cada > > > botão. Mas já tenho uma ideia: através do Button(bb.getChildAt(0)) , > > > onde bb é o id da ButtonBar. > > > > O Glow é deverá ser mais complicado... Veremos :) Sugestões aceitam-se! > > > > João Saleiro > > > > João Saleiro wrote: > > > >> Yeap, estou. Se fizer um novo botão com a skin, funciona > > >> perfeitamente. Se o usar dentro de um mx:ButtonBar fica com esse fundo > > >> preto. > > > >> Quanto ao Glow, a ideia é fazê-lo animado. Não é só passar em cima e > > >> mostrar outra skin, é mesmo fazer um efeito animado de Glow in. :) > > > >> Mas o fundo é que me está a deixar louco... :| :| :| > > > >> João Saleiro > > > >> Beck Novaes wrote: > > > >>> Olá João, > > > >>> Você está usando skins desta forma? > > > >>> <mx:Style> > > > >>> .myButtonSkin > > >>> { > > >>> up-skin:Embed("upSkin.png"); > > >>> over-skin:Embed("overSkin.png"); > > >>> down-skin:Embed("downSkin.png"); > > >>> } > > > >>> </mx:Style> > > > >>> <mx:ButtonBar dataProvider="{vs}" buttonStyleName="myButtonSkin"/> > > > >>> Se sim, não entendo porque não consegue retirar a borda do botão. Até > > >>> mesmo o Glow deveria ser simples, bastando para isto criar um skin > > >>> (over-skin) já com este efeito. > > > >>> []'s > > >>> Beck Novaes --~--~---------~--~----~------------~-------~--~----~ Você recebeu esta mensagem porque está inscrito na lista "flexdev" Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---