I am Creating a simple calculator in as3 and flash - actionscript-3

I am creating a simple calculator in Action script 3.0 and Flash.
below is my code. I am unable to get results although it runs correctly till trace("calculating"+operator);
but doesnot show result. Why?
If i am going wrong please suggest me the write code.
import flash.events.MouseEvent;
_1.addEventListener(MouseEvent.CLICK, inputvalues)
_2.addEventListener(MouseEvent.CLICK, inputvalues)
_3.addEventListener(MouseEvent.CLICK, inputvalues)
_4.addEventListener(MouseEvent.CLICK, inputvalues)
_5.addEventListener(MouseEvent.CLICK, inputvalues)
_6.addEventListener(MouseEvent.CLICK, inputvalues)
_7.addEventListener(MouseEvent.CLICK, inputvalues)
_8.addEventListener(MouseEvent.CLICK, inputvalues)
_9.addEventListener(MouseEvent.CLICK, inputvalues)
_0.addEventListener(MouseEvent.CLICK, inputvalues)
_add.addEventListener(MouseEvent.CLICK, inputvalues)
_sub.addEventListener(MouseEvent.CLICK, inputvalues)
_div.addEventListener(MouseEvent.CLICK, inputvalues)
_mul.addEventListener(MouseEvent.CLICK, inputvalues)
_equal.addEventListener(MouseEvent.CLICK, inputvalues)
_dot.addEventListener(MouseEvent.CLICK, addDot);
_clear.addEventListener(MouseEvent.CLICK, clearscr);
var operator: String = "";
var value1: Number;
var value2: Number;
function inputvalues(e: MouseEvent): void {
var valuestring: String = e.currentTarget.name
valuestring = valuestring.substr(1);
if (valuestring.length > 1) {
operator = valuestring
if (operator != "equal") {
value1 = Number(this.display_txt.text)
this.display_txt.text = "";
}else{
value2 = Number(this.display_txt.text)
calculatevalue();
}
} else {
this.display_txt.text = this.display_txt.text +valuestring;
}
}
function calculatevalue() {
trace("calculating"+operator);
if (operator=="add")
{
this.display_txt.text = String(value1+value2);}
}
function clearscr(event:MouseEvent):void
{
display_txt.text="";
}
function addDot(event:MouseEvent):void
{
if (value1 == Number(display_txt.text))
{
display_txt.text = "0";
}
if (display_txt.text.indexOf(".") == -1)
{
display_txt.appendText(".");
}
}

Well you have some code that already exist in the same kind of script that you show here.
import flash.events.MouseEvent;
var currentNumber:Number = 0;
var memoryNumber:String="";
var operator:String = "";
input_0.addEventListener(MouseEvent.CLICK, numberPushed);
input_1.addEventListener(MouseEvent.CLICK, numberPushed);
input_2.addEventListener(MouseEvent.CLICK, numberPushed);
input_3.addEventListener(MouseEvent.CLICK, numberPushed);
input_4.addEventListener(MouseEvent.CLICK, numberPushed);
input_5.addEventListener(MouseEvent.CLICK, numberPushed);
input_6.addEventListener(MouseEvent.CLICK, numberPushed);
input_7.addEventListener(MouseEvent.CLICK, numberPushed);
input_8.addEventListener(MouseEvent.CLICK, numberPushed);
input_9.addEventListener(MouseEvent.CLICK, numberPushed);
action_point.addEventListener(MouseEvent.CLICK, buttonPushed);
action_equals.addEventListener(MouseEvent.CLICK, buttonPushed);
action_divide.addEventListener(MouseEvent.CLICK, buttonPushed);
action_multiply.addEventListener(MouseEvent.CLICK, buttonPushed);
action_subtract.addEventListener(MouseEvent.CLICK, buttonPushed);
action_add.addEventListener(MouseEvent.CLICK, buttonPushed);
action_clear.addEventListener(MouseEvent.CLICK, buttonPushed);
action_clearall.addEventListener(MouseEvent.CLICK, buttonPushed);
function sum(operator):void{
var total:Number
switch(operator){
case "-":
total = Number(memoryNumber) - Number(currentNumber);
break;
case "+":
total = Number(memoryNumber) + Number(currentNumber);
break;
case "/":
total = Number(memoryNumber) / Number(currentNumber);
break;
case "*":
total = Number(memoryNumber) * Number(currentNumber);
break;
}
displayTxt.text = total;
currentNumber = Number(displayTxt.text);
operator=""
memoryNumber=""
}
function buttonPushed(m:MouseEvent):void{
if(m.currentTarget.name=="action_point"){
displayTxt.appendText(".")
action_point.removeEventListener(MouseEvent.CLICK, buttonPushed);
}else if(m.currentTarget.name=="action_equals"){
if(operator!=""){
sum(operator)
}
}else{
var whichOne:String = m.currentTarget.name;
memoryNumber=currentNumber;
displayTxt.text = "";
switch(whichOne){
case "action_divide":
operator="/"
break;
case "action_multiply":
operator="*"
break;
case "action_subtract":
operator="-"
break;
case "action_add":
operator="+"
break;
case "action_clear":
currentNumber= 0;
break;
case "action_clearall":
currentNumber= 0;
memoryNumber="";
break;
}
}
}
function numberPushed(m:MouseEvent):void{
if(m.currentTarget.name.slice(-1)==0){
if(currentNumber>0 ){
displayTxt.appendText(m.currentTarget.name.slice(-1));
}
}else{
displayTxt.appendText(m.currentTarget.name.slice(-1));
}
currentNumber = Number(displayTxt.text);
}
Enjoy.

Related

1067: Implicit coercion of a value of type Number to an unrelated type String. in line 42 and 57

//This code is for a calculator that i am making as a school project but I keep getting this error code in two lines (42, 57)
//This is line 42 of my code (displayTxt.text = total;)
//This is line 57 of my code (memoryNumber=currentNumber;)
import flash.events.MouseEvent;
var currentNumber:Number= 0; var memoryNumber:String=""; var operator:String = "";
input_0.addEventListener(MouseEvent.CLICK, numberPushed);
input_1.addEventListener(MouseEvent.CLICK, numberPushed);
input_2.addEventListener(MouseEvent.CLICK, numberPushed);
input_3.addEventListener(MouseEvent.CLICK, numberPushed);
input_4.addEventListener(MouseEvent.CLICK, numberPushed);
input_5.addEventListener(MouseEvent.CLICK, numberPushed);
input_6.addEventListener(MouseEvent.CLICK, numberPushed);
input_7.addEventListener(MouseEvent.CLICK, numberPushed);
input_8.addEventListener(MouseEvent.CLICK, numberPushed);
input_9.addEventListener(MouseEvent.CLICK, numberPushed);
action_point.addEventListener(MouseEvent.CLICK, buttonPushed);
action_equals.addEventListener(MouseEvent.CLICK, buttonPushed);
action_divide.addEventListener(MouseEvent.CLICK, buttonPushed);
action_multiply.addEventListener(MouseEvent.CLICK, buttonPushed);
action_subtract.addEventListener(MouseEvent.CLICK, buttonPushed);
action_add.addEventListener(MouseEvent.CLICK, buttonPushed);
action_clear.addEventListener(MouseEvent.CLICK, buttonPushed);
action_clearall.addEventListener(MouseEvent.CLICK, buttonPushed);
function sum(operator):void{
var total:Number
switch(operator){
case "-":
total = Number(memoryNumber) - Number(currentNumber);
break;
case "+":
total = Number(memoryNumber) + Number(currentNumber);
break;
case "/":
total = Number(memoryNumber) / Number(currentNumber);
break;
case "*":
total = Number(memoryNumber) * Number(currentNumber);
break;
}
displayTxt.text = total;
currentNumber = Number(displayTxt.text);
operator=""
memoryNumber=""
}
function buttonPushed(m:MouseEvent):void{
if(m.currentTarget.name=="action_point"){
displayTxt.appendText(".")
action_point.removeEventListener(MouseEvent.CLICK, buttonPushed);
}else if(m.currentTarget.name=="action_equals"){
if(operator!=""){
sum(operator)
}
}else{
var whichOne:String = m.currentTarget.name;
memoryNumber=currentNumber;
displayTxt.text = "";
switch(whichOne){
case "action_divide":
operator="/"
break;
case "action_multiply":
operator="*"
break;
case "action_subtract":
operator="-"
break;
case "action_add":
operator="+"
break;
case "action_clear":
currentNumber= 0;
break;
case "action_clearall":
currentNumber= 0;
memoryNumber="";
break;
}
}
}
function numberPushed(m:MouseEvent):void{
if(m.currentTarget.name.slice(-1)==0){
if(currentNumber>0 ){
displayTxt.appendText(m.currentTarget.name.slice(-1));
}
}else{
displayTxt.appendText(m.currentTarget.name.slice(-1));
}
currentNumber = Number(displayTxt.text);
}
Same issue in both lines:
Line 42: displayTxt.text = total.toString();
Line 57: memoryNumber = currentNumber.toString();
"total" and "currentNumber" are both Numbers, not strings, so you need to cast them first before assigning them to a string value.
Use Type Casting to auto-convert from type Number into a String of text.
Look at your : var memoryNumber:String=""; var currentNumber:Number= 0;
Instead of memoryNumber=currentNumber; it should be memoryNumber = String(currentNumber);
Read more about Casting here : Casting in AS3

Issue with a zero showing after a decimal point

I have a script set up to extract figures from a csv file into a webpage. We have a problem in that a figure that have a 0 after the decimal point is being ignored so whilst the csv file shows 1.094 when teh figure is transferred to the webpage it is 1.94
There is a js script and then an asp script that works the function
function getHTTPObject()
{
var x = null;
if (window.XMLHttpRequest)
{
x = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
x = new ActiveXObject("Microsoft.XMLHTTP");
if (!x)
{
x = new ActiveXObject("Msxml2.XMLHTTP");
}
}
return x;
}
var gobj = getHTTPObject();
window.onload=update();
function update()
{
var xpath = "ratesxtract.asp";
if (gobj) {
gobj.open("GET", xpath, true);
gobj.onreadystatechange = update_all;
gobj.send(null);
}
else {alert("XMLHTTP access problem. Please exit page and try again" ); }
}
function update_all()
{
if (gobj.readyState == 4) {
if (gobj.status == 200) {
// dobj = document.getElementById("BLastUpdated");
var A = gobj.responseText;
// dobj.innerHTML = A;
if (A == "error") {alert("XMLHTTP access problem. Please exit page and contact us" ); }
else { processfile(A); }
}
}
function processfile(A)
{
var errormess = "none";
var AA = new String(A);
AA = AA.split("$");
var nName = null;
var dobj = null;
var nValue = null;
var i = 0;
for (i = 0; i < AA.length; i++) {
if (AA[i].charAt(0) == "Z") {
nName = AA[i];
dobj = document.getElementById(nName);
}
else { nValue = "";
nValue += AA[i];
dobj.innerHTML = nValue;
}
}
if ( i == 0 ) { errormess = "failed to access exchange rates data, please exit page and try again";
alert(errormess)
}
}
ASP SCRIPT
<%#LANGUAGE='JScript'%>
<%
var sfile = Server.MapPath("forex\\ratefile.csv");
var fs = Server.CreateObject("Scripting.FileSystemObject");
var fsT = fs.OpenTextFile(sfile, 1, 0);
var xline;
var p = 0;
var q = 0;
var d = 0;
var i = 0;
var n = 0;
var t = 0;
var ts = 0;
var mname;
var mprice;
var mtime = "";
var INLine
var LN;
var cresult = "";
while(!fsT.AtEndOfStream) {
INLine = fsT.ReadLine();
xline = String(INLine);
if ( p != 0) {
LN = xline.split(",");
mname = xtrim(LN[0]);
mprice = doamount3(LN[1]);
if (p == 1) { mtime = xtrim(LN[2]); }
if (n > 0){ cresult += "$"; }
n++;
cresult += "Z" + mname + "$" + mprice;
}
p++;
}
cresult += "$ZTIM$" + mtime;
fsT.Close();
Response.Write(cresult);
%>
<%
function xtrim(x)
{
var xd = x.replace(/^\s+|\s+$/gm,'');
return xd;
}
function doamount3(amt)
{
var ZLine = String(amt);
ZLine = xtrim(ZLine);
if (ZLine.indexOf(".") == -1) {
ZLine += ".00";
return(ZLine);
}
var idata = ZLine.split(".");
var xadp = new String(idata[1]);
var xlen = xadp.length;
if (xlen == 1) {
idata[1] = xadp + "00";
ZLine = idata[0] + "." + idata[1];
return(ZLine);
}
if (xlen == 2) {
idata[1] = xadp + "0";
ZLine = idata[0] + "." + idata[1];
return(ZLine);
}
var p4 = xadp.charAt(3);
var p3 = parseInt(xadp.substring(0,3), 10);
if (p4 > 4) { p3 += 0; }
idata[1] = String(p3);
ZLine = idata[0] + "." + idata[1];
return(ZLine);
}
%>
If anyone can help be greatly appreciated

play audio range in html5

I would like to be able to have buttons that can play certain audio ranges from a larger file. Something like:
<button onclick="playClip('http://blah/source1.mp3', 2.5, 3.0, 1.0)">Play clip 1</button>
<button onclick="playClip('http://blah/source2.mp3', 10.0, 2.0, 0.5)">Play clip 2 slow</button>
where playClip has a pattern like this:
function playClip(src, startOffset, length, rate) {
// What to put here?
}
Or instead of a length, an ending offset.
Can some one point me to code that can do that, or help me write it? The closest I could find is https://gist.github.com/remy/753003/download# but I need different sized clips, from possibly different files, and with a playback rate specified. I'm afraid I've limited experience with Javascript.
I'm trying to replace a Silverlight app that does this.
Thanks.
-John
Either use Media Fragments URI syntax:
var src,
startOffset,
endOffset,
playbackRate,
audio = new Audio(src + '#t=' + startOffset + ',' + endOffset);
audio.onloadedmetadata = function() {
audio.playbackRate = playbackRate;
audio.play();
};
or timeupdate event:
var audio = new Audio( ... ),
startOffset,
endOffset,
playbackRate;
audio.onloadedmetadata = function() {
audio.playbackRate = playbackRate;
audio.currentTime = startOffset;
audio.play();
};
audio.ontimeupdate = function() {
if (audio.currentTime >= endOffset) {
audio.pause();
}
};
References:
Specifying playback range
Jumping to time offsets in HTML5 video
Here's an extract of my current code, which uses both the audio control's events and timeout to make sure the audio stops. There's a reference to a volume slider you might need to trim.
var jt_audioControl;
var jt_audioSource;
var jt_audioFiles;
var jt_audioFileIndex;
var jt_audioFile;
var jt_audioStartTime;
var jt_audioEndTime;
var jt_audioPlaybackRate;
var jt_audioTimeoutHandle;
var jt_audioLink;
var jt_audioMimeType;
var jt_audioMediaType;
var jt_volumeSlider;
function jt_onAudioTimeUpdate() {
if (jt_audioEndTime > 0.0) {
if (jt_audioControl.currentTime >= jt_audioEndTime) {
//alert('stopped: jt_audioControl.currentTime = ' + jt_audioControl.currentTime + ' jt_audioEndTime = ' + jt_audioEndTime);
jt_audioControl.pause();
//jt_audioStartTime = jt_audioEndTime = 0.0;
}
}
}
function jt_onAudioCanPlay() {
jt_audioControl.pause();
jt_audioControl.currentTime = jt_audioStartTime;
jt_audioControl.defaultPlaybackRate = jt_audioPlaybackRate;
jt_audioControl.playbackRate = jt_audioPlaybackRate;
jt_audioControl.play();
jt_audioControl.currentTime = jt_audioStartTime;
jt_volumeSliderChanged(); // Set initial value to slider.
var timeout = (((jt_audioEndTime - jt_audioStartTime)) / jt_audioPlaybackRate) * 1000;
//alert('jt_audioEndTime = ' + jt_audioEndTime + ', timeout = ' + timeout);
if (jt_audioEndTime > 0.0) {
jt_audioTimeoutHandle = setTimeout(jt_onAudioEnded, timeout);
//alert('jt_audioTimeoutHandle = ' + jt_audioTimeoutHandle);
}
else if (jt_audioTimeoutHandle != null) {
clearTimeout(jt_audioTimeoutHandle);
jt_audioTimeoutHandle = null;
}
}
function jt_onAudioEnded() {
//alert('ended called');
if (jt_audioFiles == null)
return;
while (jt_audioControl.position < jt_audioControl.duration)
;
jt_audioFileIndex = jt_audioFileIndex + 1;
if (jt_audioFileIndex < jt_audioFiles.length) {
jt_createAudio(jt_audioFiles[jt_audioFileIndex]);
}
else {
jt_audioControl.pause();
jt_audioFiles = null;
jt_audioFileIndex = 0;
}
}
function jt_onAudioError(e) {
var msg;
switch (e.target.error.code) {
case e.target.error.MEDIA_ERR_ABORTED:
msg = 'You aborted the video playback.';
break;
case e.target.error.MEDIA_ERR_NETWORK:
msg = 'A network error caused the video download to fail part-way.';
break;
case e.target.error.MEDIA_ERR_DECODE:
msg = 'The video playback was aborted due to a corruption problem or because the video used features your browser did not support.';
break;
case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
msg = 'The video could not be loaded, either because the server or network failed or because the format is not supported.';
break;
default:
msg = 'An unknown error occurred.';
break;
}
alert('Error loading media: ' + msg + ' Media file: ' + jt_audioFile + ' MIME type: ' + jt_audioMimeType);
}
function jt_addSource(url) {
var srcUrl;
var doConvertCheck = false;
var offset = url.lastIndexOf(".");
if (offset == -1) {
if (jt_audioSource == null) {
jt_audioSource = document.createElement('source');
jt_audioControl.appendChild(jt_audioSource);
}
jt_audioMimeType = 'audio/mpeg3';
jt_audioMediaType = 'audio/mpeg3';
jt_audioSource.type = jt_audioMediaType;
jt_audioSource.src = url;
jt_audioControl.load();
return;
}
var base = url.substr(0, offset);
var ext = url.substr(offset).toLowerCase();
var newExt = ext;
if (jt_audioControl.canPlayType('audio/mpeg3')) {
jt_audioMimeType = 'audio/mpeg3';
jt_audioMediaType = 'audio/mpeg3';
if (ext != '.mp3')
newExt = '-aa.mp3';
}
else if (jt_audioControl.canPlayType('audio/mpeg')) {
jt_audioMimeType = 'audio/mpeg3';
jt_audioMediaType = 'audio/mpeg';
if (ext != '.mp3')
newExt = '-aa.mp3';
}
else if (jt_audioControl.canPlayType('audio/mp3')) {
jt_audioMimeType = 'audio/mpeg3';
jt_audioMediaType = 'audio/mp3';
if (ext != '.mp3')
newExt = '-aa.mp3';
}
else if (jt_audioControl.canPlayType('audio/ogg')) {
jt_audioMimeType = 'audio/ogg';
jt_audioMediaType = 'audio/ogg';
if (ext != '.ogg')
newExt = '-aa.ogg';
}
else {
alert('Sorry, can not play file: ' + url);
}
srcUrl = base + newExt;
if (srcUrl.lastIndexOf('~', 0) === 0) {
if (window.location.hostname == '') {
srcUrl = srcUrl.substr(2);
}
else {
var url = 'http://' + window.location.hostname;
if (window.location.port.toString() != '')
url = usrl + ':' + window.location.port.toString()
srcUrl = url + srcUrl.substr(1);
}
}
//alert('srcUrl = ' + srcUrl);
if (jt_audioSource == null) {
jt_audioSource = document.createElement('source');
jt_audioControl.appendChild(jt_audioSource);
}
jt_audioSource.type = jt_audioMediaType;
if (doConvertCheck) {
jt_audioLink = "/ConvertCheck?path=" + srcUrl + "&" + "mimeType=" + jt_audioMimeType
jt_audioSource.src = jt_audioLink;
}
else {
jt_audioSource.src = srcUrl;
}
jt_audioControl.load();
}
function jt_extractTimeRange(url) {
var rangeFieldIndex = url.lastIndexOf("#t");
if (rangeFieldIndex >= 0) {
var rangeString = url.substr(rangeFieldIndex + 2);
var range = rangeString.split(',');
jt_audioStartTime = parseFloat(range[0]);
jt_audioEndTime = parseFloat(range[1]);
}
else {
jt_audioStartTime = 0.0;
jt_audioEndTime = 0.0;
return url;
}
return url.substr(0, rangeFieldIndex);
}
function jt_createAudio(url) {
url = jt_extractTimeRange(url);
if (jt_audioControl == null) {
jt_audioFile = url;
jt_audioControl = new Audio();
// The ontimeupdate handler seems to be called unreliably, so we'll use
// setTimeout as well in the oncanplay handler.
jt_audioControl.ontimeupdate = jt_onAudioTimeUpdate;
jt_audioControl.onloadedmetadata = jt_onAudioCanPlay;
jt_audioControl.onended = jt_onAudioEnded;
jt_audioControl.onerror = jt_onAudioError;
jt_addSource(url);
// We'll let the oncanplay call play once loaded.
}
else if (jt_audioFile != url) {
jt_audioFile = url;
jt_addSource(url);
}
else {
//jt_onAudioLoaded();
jt_audioControl.load();
}
}
function jt_playAudioFile(url) {
jt_audioFiles = null;
jt_audioFileIndex = 0;
jt_audioStartTime = 0.0;
jt_audioEndTime = 0.0;
jt_audioPlaybackRate = 1.0;
jt_createAudio(url);
}
function jt_playSlowAudioFile(url) {
jt_audioFiles = null;
jt_audioFileIndex = 0;
jt_audioStartTime = 0.0;
jt_audioEndTime = 0.0;
jt_audioPlaybackRate = 0.5;
jt_createAudio(url);
}
function jt_playAudioFileList(urls) {
jt_audioFiles = urls;
jt_audioFileIndex = 0;
jt_audioStartTime = 0.0;
jt_audioEndTime = 0.0;
jt_audioPlaybackRate = 1.0;
if ((urls != null) && (urls.length > 0)) {
jt_createAudio(urls[0]);
}
}
function jt_playSlowAudioFileList(urls) {
jt_audioFiles = urls;
jt_audioFileIndex = 0;
jt_audioStartTime = 0.0;
jt_audioEndTime = 0.0;
jt_audioPlaybackRate = 0.5;
if ((urls != null) && (urls.length > 0)) {
jt_createAudio(urls[0]);
}
}
function jt_playAudioFileSegment(url, startTime, endTime) {
jt_audioFiles = null;
jt_audioFileIndex = 0;
url = url + '#t' + startTime.toString() + ',' + endTime.toString();
jt_audioPlaybackRate = 1.0;
jt_createAudio(url);
}
function jt_playSlowAudioFileSegment(url, startTime, endTime) {
jt_audioFiles = null;
jt_audioFileIndex = 0;
url = url + '#t' + startTime.toString() + ',' + endTime.toString();
jt_audioPlaybackRate = 0.5;
jt_createAudio(url);
}
function jt_stopAudio() {
if (jt_audioControl != null)
jt_audioControl.pause();
}
function jt_volumeSliderChanged() {
if (jt_volumeSlider == null) {
jt_volumeSlider = document.getElementById('volumeSlider');
if (jt_volumeSlider == null)
return;
}
var value = jt_volumeSlider.value;
if (jt_audioControl != null)
jt_audioControl.volume = value / 10;
$.ajax({
url: "/Common/SetUserOptionAjax?key=AudioVolume&value=" + value.toString(),
type: "POST"
});
}

Convert as2 to as3

I found a script for searching and selecting a specific text from a dynamic text box
But the problem is it is AS2
I started Flash by only studying AS3 so i have no idea on how to convert AS2 to AS3
Pls someone help me :)
finder.onRelease = function() {
Selection.setFocus("_root.textInstance");
var inputterString:String = _root.inputter
var inputLength:Number = inputterString.length;
textStart = textVar.indexOf(inputter, 0);
if (inputLength>0) {
textEnd = textStart+inputLength;
} else {
textEnd = 0;
}
if (textStart>=0) {
Selection.setSelection(textStart, textEnd);
} else {
Selection.setSelection(0, 0);
}
_root.textEnd = textEnd;
};
findNext.onRelease = function() {
Selection.setFocus("_root.textInstance");
var inputterString:String = _root.inputter;
var inputLength:Number = inputterString.length;
textStart = textVar.indexOf(inputter, _root.textEnd);
if (inputLength>0) {
textEnd = textStart+inputLength;
} else {
textEnd = 0;
}
if (textStart>=0) {
Selection.setSelection(textStart, textEnd);
} else {
Selection.setSelection(0, 0);
}
_root.textEnd = textEnd;
}
It's not as bad as you might think, but what are finder and findNext - buttons? These are callbacks which can be created by
finder.addEventListener(MouseEvent.MOUSE_UP, finderCallback);
// somewhere else in the code
private function finderCallback(e:MouseEvent):void {
// code here
// anything like _root.<varName> references something on the main file,
// so this just has to be something you can access in the funciton
}
OK, this should be it. I made some assumptions about root.textInstance and the buttons.
import flash.events.MouseEvent;
function onFinderClicked(event:MouseEvent):void{
stage.focus = root.textInstance;
root.textInstance.selectable = true;
var inputterString:String = root.inputter
var inputLength:Number = inputterString.length;
textStart = textVar.indexOf(inputter, 0);
if (inputLength>0) {
textEnd = textStart+inputLength;
} else {
textEnd = 0;
}
if (textStart>=0) {
root.textInstance.setSelection(textStart, textEnd);
} else {
root.textInstance.setSelection(0, 0);
}
root.textEnd = textEnd;
};
function onFindNextClicked(event:MouseEvent):void{
stage.focus = root.textInstance;
root.textInstance.selectable = true;
var inputterString:String = root.inputter;
var inputLength:Number = inputterString.length;
textStart = textVar.indexOf(inputter, root.textEnd);
if (inputLength>0) {
textEnd = textStart+inputLength;
} else {
textEnd = 0;
}
if (textStart>=0) {
root.textInstance.setSelection(textStart, textEnd);
} else {
root.textInstance.setSelection(0, 0);
}
root.textEnd = textEnd;
}
finder.addEventListener(MouseEvent.CLICK, onFinderClicked);
findNext.addEventListener(MouseEvent.CLICK, onFindNextClicked);

comparable function to print_r in as3

In php we have the method print_r().
Is there anything similar in as3 to print out an object/array?
I found this:
public function analyze(_obj):void {
var item:Object;
switch (typeof(_obj)){
case "object":
write("<object>");
write(_obj.toString());
for each (item in _obj){
analyze(item);
};
write("</object>");
break;
case "xml":
write("<xml>");
write(_obj);
write("</xml>");
break;
default:
write(_obj + " (" + typeof(_obj) + ")");
break;
};
} // analyze()
public function write(_obj):void{
trace(_obj);
} // END write()
Check out [ObjectUtil.toString](http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#toString()).
Here's another example:
public function rTrace(obj:*, tab:Number=0):void {
if(tab > 10) return;
for(var key:String in obj) {
if(typeof(obj[key]) == "object" || obj[key] is Array) {
tr(doTab(tab)+key+"["+typeof(obj[key])+"]= {");
rTrace(obj[key], tab+2);
tr(doTab(tab)+"}");
} else
tr(doTab(tab)+key+"["+typeof(obj[key])+"]="+obj[key]);
}
}
private function doTab(n:Number):String {
var out:String = "";
for(var i:Number=0; i<n; i++)
out += " ";
return out;
}
private function tr(msg:String):void {
trace(msg);
}
Example usage:
var test:Object = {id:"asdf", count:17,
childs:[1,2,7,39], tasks:{task_1:"test", task_2:true}};
rTrace(test);
Gives the output:
tasks[object]= {
task_2[boolean]=true
task_1[string]=test
}
count[number]=17
childs[object]= {
0[number]=1
1[number]=2
2[number]=7
3[number]=39
}
id[string]=asdf