1. It seems a little bit odd, having to help you identify such obvious
bugs, who knows what else we can expect then. I have an issue with
your bug report system, where people are just marking everything as
"Cannot Reproduce". See this page:
http://bugs.adobe.com/jira/secure/IssueNavigator.jspa?reset=true&customfield_10100=Beta%20App

And if you take a look at issue SDK-10800, you'll find the boundaries
bug there. I don't know if it applies to AIR but I'm pretty sure
nobody took a good look into any bugs on that page. 

2. I'm sorry I don't understand. All I wanted is to extend TextArea in
order to get access to TextField. I don't want to add any children, I
just want a subclass of TextArea. You're saying it's not possible to
subclass a component without adding something to it? Isn't that a bit
bizarre? I'm posting the class at the bottom.


3a. OK, there obviously is access to the TextField since I am using it
and writing about it in the current thread. What I meant was there is
no clear, straightforward and documented way of accessing it. You have
to hack your way through by relying on information found on blogs and
forums. I mean it's just a TextField for god's sake :)

3b. So it's documented that it's undocumented. Perfect documentation, lol.

3c. I appreciate and support this kind of product development where
user community is involved. But I seriously think that you haven't
done exactly a great job designing it internally, maybe relying to
much on the community. It's also our fault we started using it while
in beta, but hey, who could resist :) The only sad thing is that in
the real world you have to deliver to get paid. 

4. Back to the callLater. I don't think it's such a bad idea. In the
docs and on the blogs it says that it gets called "once all the
properties are set". So I figure, it's the same as capturing the
nonexistent ALL_PROPERTIES_SET event.


package
{
        import mx.controls.TextArea;
        import mx.core.IUITextField;

        public class TextAreaExtended extends TextArea
        {
                public function TextAreaExtended()
                {
                        createChildren(); // doesn't work without this

                }
                
                public function get _textField():IUITextField{
                        return textField;
                }
        }
}

then I'm just using it like this and it works:

var actualyUsefulTextArea:TextAreaExtended = new TextAreaExtended();

actualyUsefulTextArea._textField.text = "whatever";

callLater(getCharBounds);


function getCharBounds(){
  var rect:Rectangle =
actualyUsefulTextArea._textField.getCharBoundaries(4);


}





--- In [email protected], "Gordon Smith" <[EMAIL PROTECTED]> wrote:
>
> 1. I don't think AIR and Flash Player should have different timing. If
> the Flash Player knows the correct bounds immediately after setting the
> text, AIR should too. Please file a bug.
>  
> 2. You get a null object exception because you're expecting children to
> exist after newing a component, and that's not the way any of our
> framework components work. You have to first do the addChild().
>  
> 3a. The textField of a TextArea is a protected var accessible by any
> subclass, and there is a public getTextField() method in the mx_internal
> namespace, so it's not accurate to say "no access to TextField".
>  
> 3b. The mx_internal namespace has the documentation 
>  
> /**
>  *  This namespace is used for undocumented APIs -- usually
> implementation
>  *  details -- which can't be private because they need to visible
>  *  to other classes.
>  *  APIs in this namespace are completely unsupported and are likely to
>  *  change in future versions of Flex.
>  */
>  
> We don't want to advertise it heavily because that would defeat the
> entire purpose of it.
>  
> 3c. I'm sorry that your experience with Flex 3 makes you feel that it's
> half-baked. We have a public bugbase so that you can let us know what
> we're doing wrong in a way that gets tracked. Complaints on flexcoders
> don't always get tracked.
>  
> Gordon Smith
> Adobe Flex SDK Team
> 
> ________________________________
> 
> From: [email protected] [mailto:[EMAIL PROTECTED] On
> Behalf Of b_alen
> Sent: Wednesday, February 20, 2008 9:51 PM
> To: [email protected]
> Subject: [flexcoders] Re: getCharBounds not working on AIR?
> 
> 
> 
> 
> > 1. If the same code produces different character bounds in AIR than in
> > the Flash Player, that's a bug and you should file it.
> 
> It produces the same bounds, you just can't access the function at the
> same time, that is upon setting the text property. You have to do it
> later at some point in time.
> 
> > 2. A constructor should not call createChildren(). The framework
> > automatically calls createChildren() at the appropriate time, which is
> > when the component is added to the display list.
> 
> If I don't call createChildren() I get null object exception. 
> 
> > 3. If you find yourself having to use callLater(), you're probably
> doing
> > something the wrong way. In general, you should use events rather than
> > just waiting awhile. If the framework doesn't provide the event you
> > need, please file an enhancement request.
> 
> Or it might be that Adobe is doing something the wrong way and we're
> just forced to use all sorts of hacks to work with half baked
> products. (no access to TextField, no documentation on mx_internal,
> AIR bounds vs. FP bounds, etc, etc...)
> 
> Cheers
> 
> > Gordon Smith
> > Adobe Flex SDK Team
> > 
> > ________________________________
> > 
> > From: [email protected] <mailto:flexcoders%40yahoogroups.com>
> [mailto:[email protected] <mailto:flexcoders%40yahoogroups.com>
> ] On
> > Behalf Of b_alen
> > Sent: Wednesday, February 20, 2008 8:48 AM
> > To: [email protected] <mailto:flexcoders%40yahoogroups.com> 
> > Subject: [flexcoders] Re: getCharBounds not working on AIR?
> > 
> > 
> > 
> > Great, it seems like callLater saved my butt. Luckily i also found the
> > blog which explains in short the WHY's and HOW's of the callLater.
> > Title of the blog is callLater() - The Function That Saved My Butt.
> > It's here:
> > 
> >
> http://www.kylehayes.info/blog/index.cfm/2007/5/31/callLater--The-Functi
> <http://www.kylehayes.info/blog/index.cfm/2007/5/31/callLater--The-Funct
> i> 
> > on-That-Saved-My-Butt
> >
> <http://www.kylehayes.info/blog/index.cfm/2007/5/31/callLater--The-Funct
> <http://www.kylehayes.info/blog/index.cfm/2007/5/31/callLater--The-Funct
> > 
> > ion-That-Saved-My-Butt> 
> > 
> > The function actually broke because I had to use it within the for
> > loop. The solution was to to get rid of the for loop and instead split
> > the iteration into several functions that were calling each other upon
> > completion.
> > 
> > --- In [email protected]
> <mailto:flexcoders%40yahoogroups.com>
> <mailto:flexcoders%40yahoogroups.com>
> > , "Daniel Freiman" <FreimanCQ@> wrote:
> > >
> > > If you want a simple wait, you can use uicomponent.callLater(). 
> > (See the
> > > docs). The other alternative is to listen for an event but which
> > even to
> > > listen for depends on your use case. (for example if this is
> > happening when
> > > the application is loaded applicationComplete would probably be the
> > correct
> > > event.) Check out the events thrown by the components involved to
> > see if one
> > > jumps out at you.
> > > 
> > > - Dan Freiman
> > > 
> > > On Wed, Feb 20, 2008 at 10:53 AM, b_alen <alen.balja@> wrote:
> > > 
> > > > Wow, that was fast, I didn't even manage to finish the cigarette
> :)
> > > >
> > > > And it works. Now, should I use the interval or is there a more
> > > > elegant way to know that the component is ready? You were
> mentioning
> > > > "refresh".
> > > >
> > > > Thanks a ton buddy
> > > >
> > > >
> > > > --- In [email protected]
> <mailto:flexcoders%40yahoogroups.com> 
> > <mailto:flexcoders%40yahoogroups.com> <flexcoders%40yahoogroups.com>,
> > "Daniel
> > > > Freiman" <FreimanCQ@> wrote:
> > > > >
> > > > > Try getting the rect later (Put a button somewhere and click it
> > after
> > > > > everything is finished loading) to make sure the UITextField
> > doesn't
> > > > just
> > > > > need to be refreshed first. If that doesn't work, I'd file a bug
> > if
> > > > I were
> > > > > you.
> > > > >
> > > > > - Dan Freiman
> > > > >
> > > > > On Wed, Feb 20, 2008 at 10:20 AM, b_alen <alen.balja@> wrote:
> > > > >
> > > > > > It seems a bit ridiculous but it's true. Not just that you
> have
> > > > to use
> > > > > > all sorts of hacks to get access to good old TextField
> > (IUITextField)
> > > > > > in Flex in order to even think of accessing characters'
> > Rectangles.
> > > > > > Once you do manage to cut your way through, you get a very
> nasty
> > > > > > disappointment that IUITextField.getCharBounds() works
> > perfectly in
> > > > > > Flex Web apps, but returns some bizarre incorrect values when
> > running
> > > > > > on AIR.
> > > > > >
> > > > > > If anyone has any suggestion, I'd really appreciate it very
> > much.
> > > > > > We're in terrible deadline and this is one of the crucial
> > > > functionalities.
> > > > > >
> > > > > > var tf:TextAreaExtended = new TextAreaExtended();
> > > > > > tf._textField.text = "dsfsdf sfd sf dsf sfdsd fdsfdsfdsfdsfdsf
> > fds";
> > > > > > addChild(tf);
> > > > > > var rect:Rectangle = tf._textField.getCharBoundaries(20);
> > > > > >
> > > > > > // I get values for rect.left something like
> 0.58888888888888888
> > > > > > // same goes for other rect properties, very weird.
> > > > > >
> > > > > > // extended TextArea which gives access to TextField
> > > > > > package
> > > > > > {
> > > > > > import mx.controls.TextArea;
> > > > > > import mx.core.IUITextField;
> > > > > >
> > > > > > public class TextAreaExtended extends TextArea
> > > > > > {
> > > > > > public function TextAreaExtended()
> > > > > > {
> > > > > > createChildren();
> > > > > >
> > > > > > }
> > > > > >
> > > > > > public function get _textField():IUITextField{
> > > > > > return textField;
> > > > > > }
> > > > > > }
> > > > > > }
> > > > > >
> > > > > >
> > > > > >
> > > > >
> > > >
> > > > 
> > > >
> > >
> >
>


Reply via email to