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 &#13; test">
                        <mx:Label text="Tab1 Content"/>
                </mx:Canvas>

                <mx:Canvas label="Tab 2 &#13; 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
-~----------~----~----~----~------~----~------~--~---

Responder a