Olá Beck,

só cheguei agora a casa. Vou experimentar a sua sugestão, mas antes de 
mais muito obrigado pela ajuda!!
Depois digo como correu :)

João Saleiro


Beck Novaes 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 &#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