Hi,

For one I see you are missing;

graphics.clear();

Try that, I don't think you are erasing the old color.

Peace, Mike

PS hehe I was thinking about something else when I responded and forgot the
internal icon is typed IFlexDisplayObject.



On 4/27/07, Paul Whitelock <[EMAIL PROTECTED]> wrote:

  Well here's the deal. I've created an simple icon class that draws a
red square like this:

package components {

import mx.skins.ProgrammaticSkin;

public class Icon extends ProgrammaticSkin {

private var iconColor:uint = 0xFF0000;

public function Icon() {
super();
}

public function set color(value:uint):void {
iconColor = value;
invalidateDisplayList();
}

override public function get measuredHeight():Number {
return 16;
}

override public function get measuredWidth():Number {
return 16;
}

override protected function
updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
super.updateDisplayList(unscaledWidth, unscaledHeight);
graphics.beginFill(iconColor, 1);
graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
graphics.endFill();
}
}
}

I can place this icon in a Panel like this:

<mx:Panel id="myPanel" titleIcon="{Icon}" ... >

So far so good -- the red square is drawn in the top left corner of
the title area and it appears that I can call the color setter
function like this:

myPanel.titleIcon.color = 0x00FF00;

But when I do this the icon color never changes. It appears that the
calling invalidateDisplayList() never results in a call to
updateDisplayList().

Any ideas?

Paul


--- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, Paul J
DeCoursey <[EMAIL PROTECTED]> wrote:
>
> I've been able to get it to work for buttons and the like by extending
> ProgrammaticSkin and passing in the class. I've never even used the
> icon on a TitleWindow to even know how it's supposed to work. It
should
> work, because everything is a class, but it might not know what to do
> with it.
>
> Paul
>
> Michael Schmalle wrote:
> > Hi,
> >
> > The simple answer is no.
> >
> > Why?
> >
> > The titleIcon class is of type Class. This class cannot be subclassed.
> >
> > My advice to you is create a subclass of TitleWindow and create the
> > method
> > you are talking about there.
> >
> > Since you cannot load icons at runtime, you could create a simple
> > iconLibraryModule that held your extra icons and then the method you
> > created
> > in the subclass would then load the icons from the icon library on
demand
> > through some type of string call into the library.
> >
> > Conclusion, there is no way to create an image like component in
> > components
> > with properties of type Class. In my custom window, I wrap the
icon in a
> > UIComponent, this way when I am rendering the icon, I have 2
options. The
> > icon property is the 'source' but not the actual instance that is
> > manipulated in the component UI.
> >
> > Peace, Mike
> >
> > On 4/27/07, Paul Whitelock <[EMAIL PROTECTED]> wrote:
> >>
> >> Would anyone know if there is a way to create an component that
can be
> >> used as an icon for any component that accepts an icon?
> >>
> >> For example, TitleWindow accepts a titleIcon. I would like to create
> >> an AS3 class that I can instantiate and specify for the TitleWindow's
> >> titleIcon. As conditions change in the window, I'd like to be able to
> >> make a function call to the icon class and have it update the icon
> >> displayed by the TitleWindow. The class would programatically create
> >> the icon (i.e., it would not use an embedded asset).
> >>
> >> Ideally the icon component should be able to be used for any
component
> >> that accepts an icon.
> >>
> >> Any idea if this can be done and if so where I should start
looking to
> >> create such a component? Thanks!
> >>
> >> Paul
> >>
> >>
> >>
> >
> >
> >
>




--
Teoti Graphix
http://www.teotigraphix.com

Blog - Flex2Components
http://www.flex2components.com

You can find more by solving the problem then by 'asking the question'.

Reply via email to