addChild does not work in flex...

Hey,.

When I create a display object then do: addChild (display_object) in the < fx:script > section a mxml file, adobe air showed an error message:

Error: addChild() is not available in this category. Instead, use addElement(), or change the skin, if you have a.

And I tried to use addElement and I get this:

Implicit coercion of a value of type flash.display:Shape to an unrelated type mx.core:IVisualElement.

Any ideas?

Thank you

Chris

It is not that it does not work in Flex 4 +.  It does not work in classes that implement IVisualElementContainer.  You can only add an IVisualElements to an IVisualElementContainer.  This is similar to how you might only add IUIComponents containers in Flex 3.x.

UIComponent is an IVisualObject, so if you want to do things the way you should have them in Flex 3 to add a shape, you can wrap in a UIComponent.  However, Flex 4 offers some pretty cool improvements, if you use the spark (e.g. Rect or Ellipse) primitives.  If she can put them all in a DisplayObjectContainer, it will be, which helps the CPU usage.  See http://help.adobe.com/en_US/flex/using/WSda78ed3a750d6b8fee1b36612357de97a3-8000.html for more details.

HTH;

Amy

Tags: Flex

Similar Questions

  • TextArea auto resizing does not work from flex 4.6

    Hello

    before flex 4.6 on air mobile for android, if the height is not specified in a s:TextArea, auto sizing textArea, since flex 4.6 does not work.

    Thank you.

    Try switching it back on the TextAreaSkin instead of the StageTextAreaSkin.   StageText allows you to get a native text input, but there are limits to the way he plays with the rest of the display list.

  • Locales for Spanish does not work in flex plugin

    I use the parameter following the compiler flex with Flex builder 3 and it works very well in local Spanish support.

    -local = en_US, es_US

    But the same setting does not work in eclipse installed with plugin flex4 running on flex SDK 3.5. I'm unable to build the project with this setting. If I remove es) WE then, it works very well.

    Here's my setting of the compiler

    -local = en_US, es_US-allow-source-path-to overlap = true - source-path = locale / {local}

    I've never used Eclipse for flex development, but yes it sounds like you are configuring the sdk ok.

    It fails to build, but gives no error, very weird

  • My .as class does not work in flex project

    I have a .as file extended Sprite and restores Visual elements on the screen

    the package of actions {}

    import flash.display.Sprite;

    SerializableAttribute public class Monaction extends Sprite {}
    public void Monaction () {}

    }

    }
    }

    I am trying to enter it in a Flex project, to add these shapes to my stage.

    I created a package called actions carried out under the programme of the CBC and saved the .as file.

    Because it restores Visual elements, I thought that I could wrap as a UI component and add it to the stage. So I created a new MyUIComp.as .as file that basically looks like this:

    the package of actions {}

    import of actionscript. Monaction;
    Import mx.core.UIComponent;

    SerializableAttribute public class MyUIComp extends UIComponent {}


    private var myAction:MyAction;

    public void MyUIComp() {}

    Monaction = new MyAction();

    }

    }
    }

    in my main mxml I add then to a UIComponent like this

    < mx:UIComponent id = "actionLocation" / >

    and in the script section, wiring, it:

    private function init (): void {}
    var actionToStage:MyUIComp = new MyUIComp();
    actionLocation.addChild (actionToStage);

    }

    I don't get any errors, but nothing appears on the scene either.

    Can someone be kind enough to tell me what I might have done wrong. I'm kinda new, so maybe I'm missing something obvious.

    Thank you

    David

    P.S. Ideally I would not create a class wrapper MyUIComp to make my class to extend UIComponent. I would use the original class as follows:

    import flash.display.Sprite;

    Import mx.core.UIComponent;

    SerializableAttribute public class Monaction extends Sprite UIComponent {}

    }

    but this double extends doesn't seem to work

    In your custom UIComponent class, your never added your Monaction instance. Try this for the MyUIComp constructor:

    public void MyUIComp() {}

    Monaction = new MyAction();

    this.addChild (myAction);

    }

    If this post answers your question or assistance, please mark it as such.

    Greg Lafrance - Flex 2 and 3 certified ACE

    www.ChikaraDev.com

    Flex / development, training, AIR and Support Services

  • Why the camera StatusEvent method does not work in Flex 4.6 Desktop Application?

    Hello

    I have a simple Desktop Application (in collaboration with adobe AIR) that retrieves the web camera, adds two EventListener (activity and event status) and starts the preview.

    The event activity method works correctly while the status event method to notify that the correct connection is never thrown.

    Here is the method to initialize and start the webcam.

    private function videoDisplay_creationComplete():void 
    {
              camera = Camera.getCamera();
              camera.setMode(320,240,15,false);
              camera.setKeyFrameInterval (4);
              camera.setQuality (0,100);
    
    
              videoDisplay.attachCamera(camera);
    
    
              if (camera) 
              {
                        camera.addEventListener(ActivityEvent.ACTIVITY, camera_activity);
                        camera.addEventListener(StatusEvent.STATUS, camera_status);
              } 
              else 
                        textArea.text += "Nessuna camera disponibile.";
    }
    
    //Listener chiamato quando il video o il microfono vengono attivati/disattivati
    private function camera_activity(evt:ActivityEvent):void 
    {
              var str:String = "[{0}] activating:{1}\n";
    
              textArea.text += StringUtil.substitute(str,
                        evt.type,
                        evt.activating);
    }
    
    
    //Listener chiamato quando lo stato della webcam cambia
    private function camera_status(evt:StatusEvent):void 
    {
              var str:String = "[{0}] code:'{1}', level:'{2}'\n";
    
              textArea.text += StringUtil.substitute(str,
                        evt.type,
                        evt.code,
                        evt.level);
    
              switch (evt.code) 
              {
                        case "Camera.Muted":
                                  Alert.show("User denied access to camera.");
                                  break;
                        case "Camera.Unmuted":
                                  Alert.show("User allowed access to camera.");
                                  break;
              }
    }
    
    
    

    Thanks in advance.

    Greetings

    I think that if you already allowed access to the camera (for example the Flah Player asks you anymomre to allow) you wil get event direct activity instead of the status event.

    The status event is absolutely necessary if you get the triggering event. You can check current FPS the camera and if is > 0 for an interval of shor your camera works very well.

    C

  • Why addChild (new Shape()) does not work?

    I would like to know why the following code does not work:

    < mx:Application >
    ..
    private function doShape (): void {}
    var aShape:Shape = new Shape();
    this.addChild (aShape);
    }
    ..
    < mx:Button click = "doShape ()" / > "
    < / mx:Application >

    According to the docs, addChild() takes a DisplayObject instance as a parameter. The shape is a DisplayObject. However, I get an error (#1034) that the form cannot be converted to mx.core.IUIComponent

    I don't understand what the problem...

    Yes, it's always a witch hunt in a first time. Flex containers (for example, canvas, Panel, etc) may have only UIComponents and children, not only of DisplayObject. The thing is, one UIComponent can have simple DisplayObjects as children, so you have to wrap your form:

    var temp: UIComponent = new UIComponent();
    temp.addChild (aShape);
    this.addChild (temp);

  • Calling a Flex action when you display a view html Bridge does not work

    Hello

    I have a second question.

    Our plug-in displays a view of the hosts using the html bridge code.  When our view is active and the user

    call the context menu in the Navigation on the left - and attempts to perform an Action (for example: Host disconnect).

    the container (IFrame) in which appears our point of view, is made to have a bright white background, and the action does not work

    work - no dialog boxes don't start or anything like that.

    Is there anything I can do to prevent this?

    Thanks for some tips more

    Cathy

    Hi Laurent,.

    I made a Plugin Acme - it does nothing except show a label and a text.  Then I added this to my plugin.xml for a host.

    The first photo shows just the plugin at the beginning.  Then I call the contextmenu - and select "Disconnect" - the third watch

    what looks like the view, and it's normal 'disconnect' are you sure... box is not running...

    But I noticed that I use the sdk 6.0ga - so maybe I should try with update 1?

    But for our production, we use the sdk 5.5, because it must operate on 5.5 as well.

    I also tried another host of Actions, such as alarms-> new alarm definition - but that works properly.  I don't know what could be the difference.

  • Class Timer does not work

    I needed a periodic showStatus funcation and read the setInterval docs where he suggests to use the Timer class instead.

    I gave it a try, it won't work. However, setInterval works

    Compiled with flex sdk "Version 3.3.0 build 4852.

    The player comments send me to http://www.Adobe.com/software/Flash/about/ which indicates that "you have the version installed in 10,0,32,18"

    Here is the code with setInterval enabeld (works) just comment this line and uncomment the section that uses a top clock to test the other case.

    package
    {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.setInterval;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.events.Event;

    SerializableAttribute public class Main extends Sprite
    {
    private var statusLine:TextField;
    private var statusText:String = "";
    private var statusTimer:Timer;
    private var timerStep:Number = 100;
    private var elapsedTime:Number = 0;

    public void Main()
    {
    statusLine = new TextField();
    statusLine.width = 400;
    statusLine.height = 400;
    statusLine.multiline = true;
    statusLine.wordWrap = true;
    statusLine.text = "start";
    addChild (statusLine);

    NOTE: Adobe livedocs for setInterval says:
    "Instead of using the setInterval() method, consider creating
    a Timer object, with the specified interval... »
    statusTimer = new Timer(timerStep,0);
    statusTimer.addEventListener ("timer", showStatus); A single sample it shows this way
    statusTimer.addEventListener (TimerEvent.TIMER, showStatus); The other sample reads
    statusTimer.start ();

    except that it does not work! stick with setInterval() for now
    setInterval (showStatus, timerStep);
    }

    private void showStatus (): void
    {
    var txt:String = "";

    elapsedTime += timerStep;

    txt += ">" + Math.round(elapsedTime/100)/10 + "."; "

    statusLine.text = txt;
    }
    }
    }

    Hello

    Once again, check the following Code. his work

    package {}

    import flash.display.Sprite;

    import flash.events.TimerEvent;

    import flash.text.TextField;

    import flash.utils.Timer;

    SerializableAttribute public class TestTimer extends Sprite

    {

    private var statusLine:TextField;

    private var statusText:String = "";

    private var statusTimer:Timer;

    private var timerStep:Number = 100;

    private var elapsedTime:Number = 0;

    private var count: int = 0;

    public void TestTimer()

    {

    statusLine = new TextField();

    statusLine.width = 400;

    statusLine.height = 400;

    statusLine.multiline = true;

    statusLine.wordWrap = true;

    statusLine.text = "start";

    addChild (statusLine);

    statusTimer = new Timer (100);

    statusTimer.addEventListener (TimerEvent.TIMER, fireTimer);

    statusTimer.start ();

    }

    private void fireTimer(event:TimerEvent):void

    {

    statusLine.text = "timer"+ counter fired;

    counter ++;

    }

    }

    }

  • File.upload ActionScript does not work on Air SDK for iOS devices

    I try to use the ActionScript File.upload to transfer a file on Air SDK for iOS environment, but the File.upload does not work properly. No event on the file upload handler is executed after File.upload is called, and no exception is caught. When I check the side network traffic server, I found no application http even didn't hit the server after execution of File.upload. The code is below.

    ------------------------------------------------------------------------------------------ -----------------------------------------------------------------------

    <? XML version = "1.0" encoding = "utf-8"? >

    " < = xmlns:fx s:View ' http://ns.Adobe.com/MXML/2009 "xmlns:s ="library://ns.adobe.com/flex/spark"title ="HomeView"> "

    < fx:Declarations >

    <! - Place non-visual elements (e.g., services, items of value) here - >

    < / fx:Declarations >

    < fx:Script >

    <! [CDATA]

    private var file:File;

    private var dir:File;

    This method is executed to create a file and download it when you press the download button.

    protected void OnUploadButtonPressed(event: MouseEvent): void {}

    trace ("upload button clicked");

    var urlReq:URLRequest = new URLRequest ("http://10.60.99.31/MyPath/fileUploadTest.do");

    urlReq.method = URLRequestMethod.POST;

    var str:String = "this is test";

    var imageBytes:ByteArray = new ByteArray();

    for (var i: int = 0; i < str.length; i ++) {}

    imageBytes.writeByte (str.charCodeAt (i));

    }

    trace ("size =" + imageBytes.length);

    try {}

    dir = File.applicationStorageDirectory

    I also tested in several different directories

    dir = File.createTempDirectory ();

    dir = File.documentsDirectory;

    var today: Date = new Date();

    var filename:String = 'IMG' + now.fullYear + now.month + now.day + now.hours + now.minutes + now.seconds + now.milliseconds + ".txt";

    file = dir.resolvePath (filename);

    var stream: FileStream = new FileStream();

    Stream.Open (file, FileMode.WRITE);

    stream.writeBytes (imageBytes);

    Stream.Close ();

    Review the content of the file to check if the file is written successfully.

    var readStream:FileStream = new FileStream();

    readStream.open (file, FileMode.READ);

    var: string result = readStream.readUTFBytes (readStream.bytesAvailable);

    trace ("rear read result =" + result); The result is shown here as planned.

    file.addEventListener (Event.COMPLETE, uploadComplete);

    file.addEventListener (IOErrorEvent.IO_ERROR, ioError);

    file.addEventListener (SecurityErrorEvent.SECURITY_ERROR, securityError);

    file.addEventListener (ErrorEvent.ERROR, someError);

    file.addEventListener (ProgressEvent.PROGRESS, onProgress);

    file.upload (urlReq); This line does not work. No handler is executed. No http request struck the coast server.

    trace ("after file upload test");

    } catch (error) {}

    trace (e);

    }

    }

    Complete Manager

    private function uploadComplete (event: Event): void

    {

    trace ("Upload successful.");

    }

    IOError handler

    private void ioError (error: IOErrorEvent): void

    {

    trace ("Upload failed:"+ error.text ");

    }

    Manager SecurityError

    private void securityError(error:SecurityErrorEvent):void {}

    trace ("security error:" + error.text);

    }

    Another Manager

    private void someError(error:ErrorEvent):void {}

    trace ("an error" + error.text);

    }

    Progress Manager

    private void onProgress(event:ProgressEvent):void {}

    trace ("progressHandler");

    }

    This method is executed to call the URLLoader.load when the delicate touch.

    protected void OnTrickyButtonPressed(event: MouseEvent): void {}

    var urlReq:URLRequest = new URLRequest ("http://200.60.99.31/"); This points to a server not - exist

    urlReq.method = URLRequestMethod.POST;

    urlReq.data = new ByteArray();

    var loader: URLLoader = new URLLoader();

    try {}

    Loader.Load (urlReq); This line is very important in iOS7. He decides if the latter file.upload may work.

    But in iOS8, file.upload does not work even if that line is executed.

    trace ("after urlloader load");

    } catch (error) {}

    trace (e);

    }

    }

    []] >

    < / fx:Script >

    < s:Button = "200" x = "200" width = "400" height = "200" label = "Upload" click = "OnUploadButtonPressed (event)" / > "

    < s:Button = "200" x = "500" width = "400" height = "200" label = "Tricky" click = "OnTrickyButtonPressed (event)" / > "

    < / s:View >

    ------------------------------------------------------------------------------------------ -----------------------------------------------------------------------


    When it is run on the simulator of the Air, it works very well as expectedand the file is successfully downloaded to the server. But when run on iOS devices (in my case, iPad), as I explained at the beginning, no event on the file upload handler is executed and not the http request has even hit the server. So I think that the problem may come from the client side.

    During my attempt to solve the problem, I found something complicated about this problem on iOS7. In other words, if you call the URLLoader.load method (although the URLLoader.load points to an address non-existed) before calling the File.upload method, the File.upload will work as expected on iOS7. Specifically, when the above OnTrickyButtonPressed method is run before the OnUploadButtonPressedmethod, File.upload will succeed on iOS7. But this only happens on iOS7. On iOS8, File.upload still refuses to work, regardless of knowing if the URLLoader.load is executed before.

    I think in my case, the problem is not the problem of sandbox or a session of Firefox problem described in the two links below, because not even a http request hit the side server. It seems that the Air SDK for iOS comes to fail send the http reason request any.

    http://StackOverflow.com/questions/5967382/Flex-4-FileReference-issues-with-Firefox

    http://StackOverflow.com/questions/351258/how-do-i-make-Flex-file-upload-work-on-Firefox-a nd-safari

    To make my problem clear, I list my environment below:

    • Development environment: Windows7 (64-bit) / Mac os 10.9.4 (tested on both OS platforms.)
    • IDE: Flash Builder 4.7
    • Air SDK: 3.8 / 16.0.0 (after that I have updated to the latest Air SDK 16.0.0, problem persists.)
    • Application server: Tomcat7 + spring

    Finally, I want to mention that download the file using URLLoader.load isn't an option in my case because I want to download large files in the future, which cannot be addressed with the URLLoader.load.

    I struggled with this for days. If I really appreciate it if anyone has an idea about this.

    Thanks in advance.

    Hi KA RYU.

    We have reproduced the issue successfully, our team would work on it.

    -Tushar

  • AIR 4.0 captivates runtime does not work: alert "requires a version of Adobe AIR.

    I create a captive AIR runtime application, and it does not work on a target computer Windows *. Instead of this, the following alert:

    This application requires a version of Adobe AIR, which can not be found. Please download the latest version of this run of http://www.adobe.com/go/getair, or contact the author of the request for an updated version.

    How can I present the captive runtime differently so it does not appear this message? The application is a pure ActionScript application compiled with the binary adt of the stand-alone version of the SDK software (this is not Flex).

    In addition, I am troubled that a captive runtime ping Adobe AIR application somehow. I see occasional pings to an adobe site at launch of the application (something like airdownload2.adobe.com, if I remember correctly). No I do not use service calls in my application at this stage of development, it is very simple and should not be the net ping at all. Why is this happening? I need to disable it too.

    * Problem occurring only on a Windows 7 Home Premium 64 - bit specific computer. It's unfortunately the thin client machine so I can't tinker with it.

    SOLVED

    It turns out be a case of user error.

    The client, on the problem machine, has been stealthily in the zip package using some owner zip utilities that they have configured on their machine and double-clicking the exe file it there instead of having unzipped the package and running exe Explorer file. The error message is misleading.

    Obviously this question will be avoided for the retail version after that a Setup program is built.

  • Tab order does not work on the image Panel and group tags

    I write code to control the tab on several tags such as "img", "Control Panel", "LinkButton",... and pie charts. When I run my program flash, tab indexing does not work. It works on the pie chart and "link button" tags, not on 'img', ' ', tags "group". I also tried to "activate the tab" on these fields and the true chilern tab, but no help.

    on the other hand when I disable the tab on the pie chart, and a link button, yet the tab is activated. It seems no matter what I do about the tab order, it does not reflect when I run my program.

    I really appreciate if someone could help me, I'm working with the sdk flex 4.1

    In Flex, components that receive focus must implement IFocusManagerComponent.  Most of the containers are not.

  • points or note text box does not work

    I implemented the point marker that I have in other games and it does not move for some reason any. I find the score and it's perfect, so it's my code trying to get the this.score.score_txt.text = String (this.pointsI); registration failed

    SerializableAttribute public class ClickMain extends Sprite
    {
    private var assetsPath:String = ' library/food.swf ";
    private var definitionsArray:Array;
    private var bubbles: Array;
    last bubble that sound has been played
    private var currentBubble:Bubble;
    private var currentIndexArray:int;
    private var pointsI:int;
    private var pb100:Pb100 = new Pb100();

    private void Usepoints (): void
    {
    this.pointsI = this.pointsI + 10;
    This.score.score_txt. Text = String (this.pointsI);

    pb100.x = currentBubble.x;
    PB100.y = currentBubble.y;
    addChild (pb100);

    }

    that does not show anything useful.

    But if you draw the text property of a textfield and he reveals what you expect, but you don't see anything in the textfield, allow the border of the textfield object to make sure that you can see your textfield.  If you can't, embed your fonts.  If this does not work, check the color of your font.

  • Air Navigator: djvu plugin does not work

    Hello

    I'm building an air Navigator for my business using the component HTML.

    It works very well in general but my company made extensive use of the technology of djvu for viewing of images online.

    Problem: the djvu plugin does not work on the air Navigator. After you have installed the latest version of the plugin (6.1.4) repeat me that it is necessary to install the plugin. (it works well with other browsers, also with google chrome).

    All the world has already met a similar problem?

    Thanks in advance

    Marco

    Hi Marco,.

    unless something has changed between the versions documented limits include:

    -support for the plugin (version 8.1) or later version PDF - with api to check the availability of DURATION if it is available on the machine

    -support for the version of the Flash plugin (without external dependencies)

    So that other plugins are not supported:

    http://livedocs.Adobe.com/Flex/3/HTML/Help.HTML?content=AboutHTMLEnvironment_2.html

    Kind regards

    Peter

  • Dynamic text does not work

    function pickUp(event:MouseEvent):void {}

    event.target.startDrag (true);

    replytxt. Text = "";

    event.target.parent.addChild (event.target);

    startX = event.target.x;

    startY = event.target.y;

    }

    function dropIt(event:MouseEvent):void {}

    event.target.stopDrag ();

    var myTargetName:String = "target" + event.target.name;

    var myTarget:DisplayObject = getChildByName (myTargetName);

    If (event.target.dropTarget! = null & & event.target.dropTarget.parent == myTarget) {}

    replytxt. Text = "Good Job!"

    event.target.removeEventListener (MouseEvent.MOUSE_DOWN, Pick-up);

    event.target.removeEventListener (MouseEvent.MOUSE_UP, dropIt);

    event.target.buttonMode = false;

    Event.Target.x = myTarget.x;

    Event.Target.y = myTarget.y;

    counter ++;

    } else {}

    replytxt. Text = "Try Again!";

    Event.Target.x = startX;

    Event.Target.y = startY;

    }

    if(Counter == 6) {}

    replytxt. Text = "congratulations, you're done!"

    }

    }

    For some reason, does not work my dynamic text. There is only a single key for text image... nobody knows what's the problem?

    you need to incorporate your policy.  and, you must add any text in a dynamic textfield in the cs5 design environment.

  • Text direction does not work in pure AS3 project built with Flash CS5

    No idea why it does not work? The rest LTR text direction no matter what I do. I tried moving when the text is printed with no luck.

    This text is the only difference I get:
    Trademark < police = "Lucida Sans Unicode" >® < / make >

    Is rendered as:
    ® Registered TRADEMARK

    protected function configureText(title:String):void
    {
         this.textField = new TLFTextField();
         this.textField.autoSize = TextFieldAutoSize.LEFT;
         this.textField.mouseChildren = false;
         this.textField.mouseEnabled = false;
         this.textField.selectable = false;
         this.textField.wordWrap = false;
        
         this.textField.htmlText = title;
        
         var format:TextLayoutFormat = new TextLayoutFormat();
         format.color = this.defaultTextColor;
         format.direction = Direction.RTL;
         format.fontFamily = "Arial";
         format.fontSize = this.size - 4;
         format.textAlign = TextAlign.RIGHT;
        
         this.textField.textFlow.hostFormat = format;
         this.textField.textFlow.flowComposer.updateAllControllers();
        
         this.addChild(this.textField);
    }

    Update with Flash CS5 11.0.2.489

    The characters that are part of left right scripts are defined by default left to right. The characters that are part of right to left scripts (for example, Arabic or Hebrew) are defined right to the left. Characters such as punctuation (or the registered trademark symbol) is set according to the default direction. So in your example the trademark symbol filed out on the other side because his game rtl. Had you set the Arabic or Hebrew, it would come out right on the left. The default direction is also used to determine if the dash, for example, should go left or right.

    You want your English text to come out right on the left? What effect you are trying to get?

    Thank you

    -robin

Maybe you are looking for

  • WiFi speed degrades over time

    This is driving me crazy! So, I have a reliable internet connection.  I start the speed test and get ~ 85 Mbps down.  Then slowly, it's even worse, down for like .05mpbs.  Until I turn the wifi on my computer, then it is fast again.  It can be as fas

  • Satellite P20-801: problems in Microsoft Windows movie maker

    When I try to write a film's Director on a CD I get the message "a CD burner was not detected.I have the Satellite P20 801.

  • HP 360: My laptop encryption

    Hello I bought this HP 360 laptop second hand and so far its worked very well. But after that I changed the operating system Linux I used for more sensative work in college and would be dred think someone walk away with it. Its constantly updated for

  • Portege 810 Bluetooth problems.

    Hello A that someone managed to browse their 810 Portege on a PC I get the error message next on trying to navigate on a Mac: -. The device does not have the necessary services Also what exactly the option 'data' qualifies under Wireless Manager as I

  • How to reverse change how open .dll files?

    How to reverse change how open .dll files? I changed accidentally, trying to open only ONE file, most of them to open with Microsoft Picture It! software and now some things do not load, and my USB ports are completely useless!  Help. How to reverse