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 -~----------~----~----~----~------~----~------~--~---