ActionScript 3.0 :: Custom Component Not Derived From UIComponent
Dec 24, 2010
I created custom component that not derived from UIComponent. And I want to make live preview. It's works fine - I can change properties and live preview shows them immidiatally. But there's some problem - if I override 'width' and 'height' properties and run application - the width and height that I changed on properties panel in IDE are not kept. Properties that changed through component inspector saves. So, how can I save width and height of my component changed through properties panel?
Extremely frustrated with this. I've created a simple class that extends the UIComponent. I create an instance of this class in a parent class and utilise the 'addChild' method to add it to the parent. I've overridden the 'updateDisplayList' method of the extended UIComponent to add my own drawing routine using the 'graphics' object.
My problem occurs when I start attempt to change any of the following properties (x , y , width, height) either directly or using 'move' or 'setActualSize' because the UIComponent will no longer display - prior to changing any of these properties the object displays fine. I know the object is still there, the 'updateDisplayList' method is still being called (as I'm calling 'invalidateDisplayList' after each change) and it correctly reports the changes.
I added a MXML component in flex and selected the base as UIComponent. I want to make it accessible so that automated testing tools can Access it. I am using TestComplete for automated testing. As TestComplete uses Microsoft Accessibility classes. Now it treat my component as the Graphics.
I recently used fl.controls.List to implement a list with custom CellRenderer.I did it by implementing ICellRenderer:[code]Inside MyRenderer I added a fl.controls.Button, then set its label. However, when the List is rendered (by dynamically adding item into its dataProvider), the button body is not rendered, only the label is rendered. When I move my mouse over it, the button is then properly rendered.I found this strange, then tried use myButton.drawNow() in constructor. The problem seem to be solved. Now the button is rendered, but the label is not at the very center of the button (it's a bit towards right). Then, when I move my mouse over it again, the label move to the center, and everything's ok.This may be a minor problem, but I just wonder why this is happening. Why must drawNow() to be called? Why the label is not properly placed even when drawNow() is called?
I have some custom components, that derived from UIComponent. I overloaded the updateDisplayList so they have custom look. I've created a layouter that lays out these custom components, but to place them correctly, I have to know the custom componets width, height. They are created dynamically. After all of them created (creationCompleted event fired for every), i try to laying out them, but width/height property is still 0. I am also tried to add them to a canvas, before the layout process.
how to create custom UIComponent that placed dynamically, and get to know the width and height of it.
With the use of the mx_internal namespace I can set width and height (using the internal $width and $height fields), and it looks like it is working. But not so clean/good solution.
I've created a custom uicomponent and whenever the browser or its specific container is resized, a repaint occurs but the contents of the component get drawn again and again and again...So, if I move the container I'll end up with multiple circles drawn on top of each other but offset depending upon where the container is when the repaint occurs.My updateDisplayList code is below.Do I need to do some sort of clear so that it doesn't contiuously getting duplicated like this?
I am a little confused about the setActualSize method. It appears from what I've read, that if it is not called on a component by its parent, the component will not be rendered. So it appears that setActualSize is a critical method that is directly bound to rendering the UIComponent. It also appears that the width and height properties of UIComponent override the functionality of the width and height properties of flash.display.DisplayObject, in that they are not directly bound to the rendering of the object but are virtual values that are mainly used by the getExplicitOrMeasured when the parent of the component calls the component's setActualSize method. So the question are:
I have a Custom Component that has a couple of Canvas with some background colors assigned to them. Now i have hard coded the colors, i want to move them to an external css file. So i would like to have the css declaration like this :
[Code]...
My question is if i can define custom style names like dividerRightColor and if so, how can i use that value inside my MXML Component? I have seen examples of using them inside Pure AS components.
I have a custom Flex 4.5 component (to be used in a List) -
Game.mxml (represents a clickable playing table in a card game): <?xml version="1.0" encoding="utf-8"?> <s:ItemRenderer [code].......
But I never see the "game clicked: " trace. Does anybody please know why? I'm probably missing something minor, because I can see the "Clicked: 8946" trace.
This is similar to the question asked here. I am dispatching custom event "ShopEvent" but i am getting error "Type Coercion failed: cannot convert flash.events::Event@81ecb79 to com.events.ShopEvent"Note: Error is thrown from the parent custom component (3rd code snippet), I have added more details thereThis is my custom event. See the first constant, I copy pasted the event name in custom components.
I have created custom TreeItemRenderer in which i am trying to draw colored Hbox bar at each node except root. Intially when i click on root node it opens first child node with bar but when i open leaf node it does not showing bar and removing existing bard from other few child nodes. Its calling itemrenderer on mouseonver eventhough i have disabled.Attaching Code here
I'm building a top view 2D map, that it's objects are stored on the server.The kind of objects are 10 and might be a photo, label, button, lists, mix of them or labels with tooltips.The component must request the "areas" that are missing on screen.An area is 1000x1000 px and is cached in flex.To move in the map, will be like in google maps (drag-and-drop).I should be able to have another list and move objects from one to another using drag-an-drop on objects. Ex.: I grab an objects from a list and I move it on this map, I release the mouse button and the item is placed there.Now the problem is: I build a custom component for this trying to emulate the item renderer for performance and recyclage, implement drag-and-drop on objects and request the areas that are missing?
or
I extend the List component from spark and I add some features as multiple kind of itemrenderers and use recycle on them. Of course it must be able to request the missing areas on the screen and cache it's data.Maybe create a custom layout is needed too.What I need is something that must be really fluid, so the lighter this component is, the better.
UPDATE: *There will be not any object over another.
*I will not use hitTest on bitmaps because all bitmaps are wrapped in another component,as they,for now are itemrenderers.
Anyway I already begin to do this using a class that extends the SkinnableDataContainer and a custom layout. As the layout is not like a grid, is sparse, random items at diferent points(x, y).How to get the localX and localY, relative to item renderer and not to the Spark List, from a DragEvent in Flex 4?
In my custom component (Login), I create and set a variable userName, it is bindable: [Bindable] private var userName:String; userName = txtUsername.text; I need to pass that variable to a different custom component (Overview), here is the code of the viewstack:
[Code]...
I've searched for a way, but I haven't found one that does the trick.
This is NOT duplicate of my earlier post (its is slightly different)But this is similar issue with similar error but its not the same error The error I am getting now is below while dispatching the custom event from my custom component
TypeError: Error #1034: Type Coercion failed: cannot convert events::MapEvent@a74ab51 to flash.events.MouseEvent. dispatchEvent(new MapEvent(MapEvent.CLICKED_ON_MAP));
Note: The error in my earlier post is giving below error message
Type Coercion failed: cannot convert flash.events::Event@81ecb79 to com.events.ShopEvent
The difference here are two things, the earlier error is while converting flash event to custom event and now this one is while converting custom event to flash event and secondly, I have no clue why it is trying to convert to the mouseevent where I am just dispatching my custom event with proper listeners.
The spark panel component for example can be written like this
<Panel title="Skinny"> <child components ... /> <controlBarGroup> <child control bar components ... /> </controlBarGroup>
[Code]...
The motivation here is that I can now create a couple different skin files to change the look and layout of those subgroups. Reading source of the spark panel, there are some calls within the mx_internal namespace such as getMXMLContent() which is a method of the spark group component, but which I have no access to.
Does the description above make sense? How can I create custom 'contentGroups' in my custom Flex4 component that can use nested mxml child components? Should I approach this a different way?
Here's the example: var cartesian:CartesianChart = new CartesianChart(); cartesian.width = 100; var column:ColumnChart = new ColumnChart(); column = cartesian as ColumnChart; Why does this not work? "column" ends up null. ColumnChart is a derived class of CartesianChart, so I would have thought I'd end up with a ColumnChart with a width of 100.
Ach. I have a class that extends MovieClip called AxonClip, and a class that extends AxonClip called Target. I create several new Target objects like so:
Code: Targets[i] = new Target("Targ"+i); Targets[i].attachMovie("TargetArt", "TarGuy"+i, iDepth);
I'm trying to create a series of Loaders in a for loop whose names are created from an Array.If "eval" existed in AS3, the code might look something like this:
var i:int; var tnArray:Array = new Array("tn0","tn1", "tn2"); for (i = 1; i <= 10; i++){
I have 1 class (that is extending a UIcomponent) that is representing a component. In that component I create different instances of another class that is also a UIComponent but this class doesn't show up in de first class. I see that it is running and that it has the correct hights but I got the feeling that it doesn't show up with this hights. If I trace I see the width and height is 200 X 200 but there is still nothing visible in my component.
Is my understanding that there are no Abstract classes and you can't override or overload constructors of derived classes correct? Abstract classes aren't important for me but if it's possible I'd like to know how. But is there a way to overload default constructors and I'm just doing something wrong? Can we only override methods or can we overload them also.For a simple game I'm making, I'm not using FlexBuilder and don't want to for this project for specific reasons, so I'm using Flash and instead of using sprites and bitmaps I want to draw shapes in Flash and covert them into MovieClip symbols which I "link" for export as AS to use in my code. I want to make it a little modular so I can just change certain aspects of the code for different approaches.If I create a class Actor which extends MovieClip the default constructor has to be Actor() with no arguments. But I'd like my class to be able to have arguments like initial x and y coordinates. I know you can just create methods to initialize each part but I'd like to try and have a default constructor to do so.
In Flash I notice that if you derive a written class or built in class it requires the standard default constructor, "which I may be wrong about and I hope I am and someone could show me what I'm doing wrong", I found if you derive a class based on a symbol you linked for export as AS I can create a new constructor with whatever argument(s) I want (so this is why I'm making this post,if I can do this couldn't there be a way to override constructors?).
1) So I create a base class called Actor which extends MovieClip save it as Actor.as and default constructor of Actor() add whatever properties I want.
2) Then I create an object in my library, let's call it mcShip, then I link that symbol for export as ActionScript and have it's base class as Actor and name the class ShipMC.
3) I then create a new .as file and call this one ShipActor.as, this class ShipActor extends ShipMC and then I create a default constructor ShipActor(gs:GameScreen, xA:Number, yA:Number) and this works fine (also I create a method in Actor class called ActorSuper and call it from ShipActor with passed in arguments, since I don't know of a way to overload the parent class' constructor)
If I were to just have my mcShip with a base class of flash.display.MovieClip and I try to create ShipActor with the constructor above it says missing default constructor. The above 3 steps is the only way I can get it to work for now. Is there a way to overload the constructor? If not are there any other work arounds?
I have writen this SWC component. If I run a test FLA from the same folder where the AS class is, it works. But if I install the component in the components folder and try to instantiate it from somewhere else (any folder but the one where the AS class is) I get the following error: ArgumentError:Error #1063: Argument count mismatch on MyComponent. Expected 0, got 4.
I'm attempting to use the movieClipLoader to load a file onto an instance of a class derived from movieclip. For some reason, this doesn't seem to work, because after it successfully loads, the array that contains these derived class instances suddenly become movie clips and lose all their derived variables (tracing them resutls in 'undefined').So I thought there must be another way. Perhaps there is a way to copy the image data from one movie clip to another, or someone suggested taking a snap shot of the first movie clip and then applying it to the second as a bitmap.
I am creating a custom Component using ActionScript 3. This Component have some properties that can be changed in the Component Inspector, and in this component i create a text field to show a message that the user define in this panel.
So far, works ok. But i want to give a chance to the user choose a font type to this text field, i found in the Component Definition, a option called "Font Name", with this option, you can select a type of font to use.
The problem is to recover this font in my Class of the component. I try to use the Font Class, but it seems that this class was not created for this. My question is: What Class i have to use to recover the selected font from the Font Name option. I try this:
var newFont:Font = "Arial"; [Inspectable(name="Font name", type = Font, defaultValue = "Arial")] public function set corPreloader(fonte:Font) { newFont = fonte; } public function get corPreloader():uint { return newFont; }
I'm in the process of creating a component for CS4 which uses a custom UI SWF in the component inspector. I read that the component inspector is being removed in CS5 and you will now access component properties in the properties panel. Will developers still be able to create a custom component UI in CS5?
In my Main application I used label (like id=firstname) so we can use in main used firstname.text for databinding. But I have created canves custom component and load in main application using viewstack.In canves custom component how can I Bind label(id=firstname).I tried:var username:string = firstname.text but not show undefine firstname.How can I access all label and component in Main application to custom application.
is there any way to create a custom css value for a component and have it available to the skin class that component is using? for example, if i define this in a css file:
[Code]....
is there a way to make myCustomValue available in the PanelSkin ?