Searching Array using Array.indexOf() function

Searching in Array using Array.indexOf() function is very easy :). For example,

var toys:Array = new Array();
toys.push("ball");
toys.push("bat");
toys.push("glows");
toys.push("pads");
toys.push(23);
toys.push(14);

var searchIndex:int = toys.indexOf(“ball”);
if(searchIndex == -1)
{
trace(“No! how can it be there”);
}
else
{
trace(“Yup! it’s there”); //output will be from here
}

So, it works fine when the value inside the indexed array is primitive – i.e. Number, String, Boolean etc. BUT it will not work when array contains objects of type Object. For example,

var toys:Array = new Array();
toys.push({name:"ball", count:2});
toys.push({name:"bat", count:2});
toys.push({name:"glows", count:2});
toys.push({name:"pads", count:2});
toys.push({name:"runs", count:200});
toys.push({name:"wickets", count:2});

var searchIndex:int = toys.indexOf({name:”ball”, count:2});
if(searchIndex == -1)
{
trace(“No! how can it be there”); //output will always be from here if you search an object
}
else
{
trace(“Yup! it’s there”);
}

So, that’s the case for objects. In the syntax of Array.indexOf(itemToSearch:*, fromIndex:int = 0), we notice that the first argument is * data type – i.e. it can be any data type, BUT it’s not working for Object. Would any one have lights on this?

Set TextField horizontal scroll to initial position

If you want to set the position of horizontal scroll position inside TextField, you can use TextField.scrollH.

Let’s say I am typing in the input TextField and I typed beyond the width of TextField. You will see the last characters visible you typed. Now due to some other event, say user clicks on other than this TextField, focus is changed to some other object than this TextField, you may want to reset the scroll position of TextField to starting characters in it.
You will use :
TextField.scrollH = 0;

This will set the horizontal scroll of TextField to 0 and hence showing the starting characters in TextField.

Loading Image using Loader.loadBytes()

Loader class can load image from ByteArray. I used this method before a year ago to set  a part of a screen for Screen Sharing application. Right now I was having a case where I need to create an image from Base64 encoded string. I am using following code to do this ::

var str:String = "";    //It won't be an empty string :) because it will a base64 encoded string of image.

var byteArr:ByteArray = Base64.converToByteArray(str);    //Here you can use any ready made library to decode and convert the String into ByteArray. I used ready made library from here.

var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);

loader.loadBytes(byteArr);

function onImageLoaded(e:Event):void{

addChild(loader);

trace(loader.width + " : " + loader.height);

}

That’s it. This can be useful where you can not load the image from server because you don’t have the image but it’s data as string. May this can be useful to some one 🙂

Built-In Context Menu Items on Flash TextField

Is there any way to hide default context menu items on Flash TextField? Some one will try to answer with ContextMenu.hideBuiltInItems() function, but this function does not really work with Flash TextField. It does not hide the built in items.

So following code does work but not as expected ::

var myContextMenu:ContextMenu = new ContextMenu();
myContextMenu.hideBuiltInItems();

var txt:TextField = new TextField();
txt.contextMenu = myContextMenu;
addChild(txt);

Now if you right click on TextField then you will see that you can see all the built in item. Any one knows why?