728x90

출처

http://www.ibm.com/developerworks/webservices/library/ws-macroflex/
http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&postId=1821&productId=2
http://livedocs.adobe.com/labs/flex/3/html/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Book_Parts&file=data_access_048_3.html
http://flexdocs.kr/docs/flex2/langref/mx/rpc/soap/WebService.html
http://www.mail-archive.com/flexcoders@yahoogroups.com/msg64743.html

▶ SOAP


SOAP(Simple Object Access Protocol)에 대한 설명은 다른 사이트에 잘 나와 있으니 찾아 보세요.
여기에서는 Java로 SOAP 서버를 만들고, Tomcat으로 Web 서비스 하여, 클라이언트는 Delphi로 만들어 보겠습니다.
이와 같은 예가 외국 사이트를 찾아 보아도 별로 없더군요. 그래서 허접한 설명이지만 도움이 될까 해서 올립니다.
(기회가 되면 배열이나, Dataset도 구현 하고 싶지만 시간이 없어서...)

일부 소스와 내용은 에어콘 출판사의 차세대 자바 SOAP AXUS을 참조 했습니다.

▶ 준비물

JDK 1.4.x 이상 (http://java.sun.com)
Tomcat 4.1.36 (http://tomcat.apache.org/)
AXIS 1.4 (http://ws.apache.org/axis/)

▶ SOAP Web 서비스 설치

여기에서 JDK, Tomcat의 설치는 따로 하지 않겠습니다. 이것도 다른 사이트를 참조하세요.

1. axis-bin-1_4.zip 압축 풀기

Apache에서 받은 axis-bin-1_4.zip을 압축을 특정 폴더에 풀어 주세요. 저는 C:\SOAP\axis-1_4 에 풀었습니다.
앞으로 설명은 C:\SOAP\axis-1_4 으로 하겠습니다.

2. %tomcat_home%\conf\server.xml

아래 내용을 추가해서 AXIS 가상 경로를 추가 Tomcat을 다시 실행 시켜주세요.

<!-- Tomcat SOAP Context -->
<Context path="/axis" docBase="C:\SOAP\axis-1_4\webapps\axis" debug="0"
         reloadable="true" crossContext="true">
</Context>

▶ Java로 SOAP 서버 만들기

아래와 내용과 같이 HelloWorld.java을 만들고, 이 파일을 C:\SOAP\axis-1_4\webapps\axis 디렉토리에 확장자가 .jws로 수정 HelloWorld.jws을 C:\SOAP\axis-1_4\webapps\axis 복사해주세요.

HelloWorld.java 파일

public class HelloWorld {

  public HelloWorld() {
  }
 
  public String getHelloWorldMessage(String name) {
    return "Hello World to " + name;
  }
}

확인하기

지금까지 잘 하셨다면 브라우저에서 http://localhost:8080/axis/HelloWorld.jws 주소로 보시면 아래와 같이 나올 것입니다.

사용자 삽입 이미지














▶ Flex 에서 SOAP 호출하기

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
  <![CDATA[
    import mx.rpc.soap.WebService;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.events.FaultEvent;
    import mx.rpc.soap.LoadEvent;
   
    private function on_ButtonClick(event:Event):void {
      // WebService 객체 생성
      var webService:WebService = new WebService();
      webService.useProxy = false;
      // 응답결과를 받는 Event 메소드 등록
      webService.getHelloWorldMessage.addEventListener(ResultEvent.RESULT, resultListener);
      webService.getHelloWorldMessage.resultFormat = 'e4x';
      // SOAP 호출 실패 Event 메소드 등록
      webService.addEventListener(FaultEvent.FAULT, faultHandler);
//      webService.wsdl = "http://localhost:8080/axis/HelloWorld.jws?wsdl";
      // WSDL 로딩
      webService.loadWSDL("http://localhost:8080/axis/HelloWorld.jws?wsdl");
      // SOAP 호출
      webService.getHelloWorldMessage(Text1.text);
    }
   
    public function resultListener(event:ResultEvent):void {
      var xmlDoc:XML = new XML(event.result.getHelloWorldMessageReturn);
//      mx.controls.Alert.show(xmlDoc.text());
      Text2.text = xmlDoc.text();
    }
   
    public function faultHandler(event:FaultEvent):void {
      //deal with event.fault.faultString, etc
      mx.controls.Alert.show(event.fault.faultString);
    }       
   ]]>
  </mx:Script>

 <mx:Button x="178" y="13" label="Call SOAP" click="on_ButtonClick(event)" id="Button1" />
 <mx:TextArea x="10" y="10" id="Text1" fontSize="14" text="AXIS" height="25"/>
 <mx:TextArea x="56" y="43" id="Text2" height="21" width="204"/>
 <mx:Label x="10" y="44" text="Result :"/>
 
</mx:Application>

▶ 실행 결과

사용자 삽입 이미지

728x90
728x90

▶ SOAP

SOAP(Simple Object Access Protocol)에 대한 설명은 다른 사이트에 잘 나와 있으니 찾아 보세요.
여기에서는 Java로 SOAP 서버를 만들고, Tomcat으로 Web 서비스 하여, 클라이언트는 Delphi로 만들어 보겠습니다.
이와 같은 예가 외국 사이트를 찾아 보아도 별로 없더군요. 그래서 허접한 설명이지만 도움이 될까 해서 올립니다.
(기회가 되면 배열이나, Dataset도 구현 하고 싶지만 시간이 없어서...)

일부 소스와 내용은 에어콘 출판사의 차세대 자바 SOAP AXUS을 참조 했습니다.

▶ 준비물

JDK 1.4.x 이상 (http://java.sun.com)
Tomcat 4.1.36 (http://tomcat.apache.org/)
AXIS 1.4 (http://ws.apache.org/axis/)
Delphi 7 (http://www.borland.com)

▶ SOAP Web 서비스 설치

여기에서 JDK, Tomcat의 설치는 따로 하지 않겠습니다. 이것도 다른 사이트를 참조하세요.

1. axis-bin-1_4.zip 압축 풀기

Apache에서 받은 axis-bin-1_4.zip을 압축을 특정 폴더에 풀어 주세요. 저는 C:\SOAP\axis-1_4 에 풀었습니다.
앞으로 설명은 C:\SOAP\axis-1_4 으로 하겠습니다.

2. %tomcat_home%\conf\server.xml

아래 내용을 추가해서 AXIS 가상 경로를 추가 Tomcat을 다시 실행 시켜주세요.

<!-- Tomcat SOAP Context -->
<Context path="/axis" docBase="C:\SOAP\axis-1_4\webapps\axis" debug="0"
         reloadable="true" crossContext="true">
</Context>

▶ Java로 SOAP 서버 만들기

아래와 내용과 같이 HelloWorld.java을 만들고, 이 파일을 C:\SOAP\axis-1_4\webapps\axis 디렉토리에 확장자가 .jws로 수정 HelloWorld.jws을 C:\SOAP\axis-1_4\webapps\axis 복사해주세요.

HelloWorld.java 파일

public class HelloWorld {

  public HelloWorld() {
  }
 
  public String getHelloWorldMessage(String name) {
    return "Hello World to " + name;
  }
}

확인하기

지금까지 잘 하셨다면 브라우저에서 http://localhost:8080/axis/HelloWorld.jws 주소로 보시면 아래와 같이 나올 것입니다.

사용자 삽입 이미지















▶ WSDL 파일 만들기


SOAP의 WSDL 파일이 어떤 일을 하는지도 다른 사이트에 자세히 나와 있으니 이것도 다른 사이트에서 찾아보세요.
여기에서는 WSDL 파일을 AXIS을 이용해서 만들고, Delphi로 사용하는 방법만 설명하겠습니다.

브라우저에서 http://localhost:8080/axis/HelloWorld.jws 페이지를 열어서 Click to see the WSDL을 선택하시면 아래와 같이 나올 것입니다.

사용자 삽입 이미지


























이 내용을 복사해서 메모장에 붙여 넣은 후 HelloWorld.wsdl로 저장합니다.

▶ Delphi 로 Client 만들기

1. 새로운 프로젝트을 만들어 주세요.

2  File > New > Other... 선택 WebServices 창에서 WSDL Importer 아이콘을 더블 클릭

사용자 삽입 이미지




















3. HelloWorld.wsdl 선택하고, [Next] 버튼 선택

사용자 삽입 이미지
























4. [Finish] 버튼 선택

사용자 삽입 이미지
























지금까지 하셨으면 HelloWorld1.pas 파일이 만들어 졌을 것입니다.

5. Unit1.pas을 열어서 Button 과 Edit Box을 추가 해주세요

6. Unit1.pas 아래와 같이 코딩 해주세요. 추가된 코드는 파란색으로 표시 해두었습니다.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, HelloWorld1;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FHelloWorld : HelloWorld;
  public
    { Public declarations }
    function GetHelloWorldService(): HelloWorld;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetHelloWorldService(): HelloWorld;
begin
  if FHelloWorld = nil then begin
    FHelloWorld := GetHelloWorld();
  end;
  Result := FHelloWorld;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetHelloWorld().getHelloWorldMessage('AXIS');
end;


end.

▶ 실행 결과

사용자 삽입 이미지

728x90
728x90

정규표현식이나, Lex&Yacc을 델파이만 개발 하신 분이라면 처음 들어 보신 분들도 계실 것이라고 생각됩니다.
저도 6년 넘게 개발하면서 최근에 알게 되었고, 그 활용 범위가 무궁무진 하다는 것도 알게 되었죠.
이 글을 있는 개발자 분들도 이 글을 계기로 Lex&Yacc에 대해서 관심을 가졌으면 합니다.

Lex&Yacc은 컴파일러를 만들기 위한 도구로 GCC나 대부분의 컴파일러가 Lex&Yacc을 사용하고 있습니다.
Lex&Yacc의 활용 범위는 소스를 분석하거나, 소스에서 주석만 제거하거나, 간단한 스크립트 언어를 만들 수도 있습니다.

C언어나 JAVA의 경우 많은 Lex&Yacc 도구가 많이 있지만 Delphi의 경우 2개 정도 있는 것 같고,
제가 사용하고 있는 Delphi Lex&Yacc은 Tuber Pascal로 만들어 진 것을 델파이용으로 수정한 것으로 버전은 1.3을 사용했습니다.

아래의 예제는 데이터베이스에서 SQL을 파싱하는 아주 간단한 Sample을 만들어 보았습니다.

select aa, bb from tab;
select aa, bb, cc from tab1, tab2;

위의 SQL 문장에서 컬럼과 테이블 명을 구하는 Lex&Yacc 소스입니다.
위의 SQL 문장의 컬럼과 테이블 명을 구하는 것을 Lex&Yacc을 사용하지 않고도 쉽게 얻어 낼 수 있겠지만, 굉장히 긴 문장의 SQL문장에서 컬럼, 테이블, 함수, 문자열을 분리하는 것을 어려울 것입니다. 이와 같은 SQL문 처리를 위해서 여러분들이 Lex&Yacc문장을 추가 하시기 바랍니다. (인터넷에 SQL grammar 찾아서 추가하면 될 듯......)

▶ Delphi Lex & Yccc Download

http://www.grendelproject.nl/dyacclex/

▶ Lex 파일

- sqllex.l 파일

%start

%%
 
[F|f][R|r][O|o][M|m] begin return(FROM); end;
[S|s][E|e][L|l][E|e][C|c][T|t] begin return(SELECT); end;

[A-Za-z][A-Za-z0-9_]* begin
yylval.yyString := yytext;
return (NAME);  end;

[ \t\n] ;

. |
\n returnc(yytext[1]);

- sqllex.pas 만들기

C:\Delphi\dyacclex-1.3\test\sql>dlex.exe sqllex.l
Delphi Lex - Copyright (c) 2003,2004 by Michiel Rook
Based on Turbo Pascal Lex 4.1, Copyright (c) 1990-2000 Albert Graef
parse ... DFA construction ... code generation ... DONE
15 lines, 6 rules, 27/1200 p, 29/600 s, 58/1200 t.

▶ Yacc 파일

- sqlparser.y 파일

%{
program sqlpser;
{$APPTYPE CONSOLE}


uses
SysUtils,
dlib,
yacclib,
lexlib;

var x : array [1..26] of Real;

%}

%token NAME
%token FROM SELECT /* illegal token */

%%

query_spec:
SELECT selection table_exp ';'
;

table_exp:
from_clause
;

from_clause:
FROM table_ref_commalist
;

table_ref_commalist:
table_ref
| table_ref_commalist ',' table_ref
;

table_ref:
table
| table range_variable
;

range_variable: NAME
;

table:
NAME { writeln('Table : ', $1); }
| NAME '.' NAME
;

selection:
scalar_exp_commalist
| '*'
;

scalar_exp_commalist:
scalar_exp
| scalar_exp_commalist ',' scalar_exp
;

scalar_exp:
column_ref
;

column_ref:
NAME { writeln('Column : ', $1); }
| NAME '.' NAME /* needs semantics */
| NAME '.' NAME '.' NAME
;

%%

{$I sqllex.pas}

var
lexer : TLexer;
parser : TParser;
i : Integer;

begin
for i := 1 to 26 do
x[i] := 0.0;

lexer := TLexer.Create();
  
parser := TParser.Create();
parser.lexer := lexer;
parser.parse();
end.

- sqlparser.dpr 만들기

C:\Delphi\dyacclex-1.3\test\sql>dyacc.exe sqlparser.y sqlparser.dpr
Delphi Yacc - Copyright (c) 2003,2004 by Michiel Rook
Based on Turbo Pascal Yacc 4.1, Copyright (c) 1990-2000 Albert Graef
parse ... sort ... closures ... first sets ... LR0 set ... lookaheads ...
code generation ... DONE
89 lines, 18/900 rules, 29/1200 s, 41/9600 i, 33/9600 t, 19/1200 r.

▶ 컴파일, 실행

- 컴파일

위의 lex, yacc 절차를 따르셨다면 sqlparser.dpr, sqllex.pas 파일이 생겼을 것입니다.
sqlparser.dpr, sqllex.pas 한 폴더에 두고 델파이에서 sqlparser.dpr을 열어서 컴파일 하고 sqlparser.exe 실행 하면 됩니다.

C:\Delphi\dyacclex-1.3\test\sql>sqlparser
select aa, bb from tab;
Column : aa
Column : bb
Table : tab
728x90
728x90
델파이의 경우도 JAVA와 같이 객체의 상속은 하나만 되고, Interface의 상속은 다중으로 되고 있습니다. 객체의 어떠한 성격을 Interface로 만들고 그 것을 Collection 객체에 담아 두었다가 다시 사용할 수 있는 것은 OOP 프로그램을 하면서 유용하게 사용할 수 있을 것입니다. 최근에 TInterfaceList 가 있는 것을 알게 되었네요. 그래서 여기 Tip에 올립니다.

type
  IDatabase = interface
    function GetDatabaseName() : String;
  end;

  TDatabase = class(TInterfacedObject, IDatabase)
  private
    FDtabaseName : String;
  public
    procedure SetDatabaseName(ADatabaseName : String);
    function GetDatabaseName() : String;
  end;

{ TDatabase }

procedure TDatabase.SetDatabaseName(ADatabaseName : String);
begin
  Self.FDtabaseName := ADatabaseName;
end;

function TDatabase.GetDatabaseName() : String;
begin
  Result := Self.FDtabaseName;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  DatabaseList : TInterfaceList;
  ADatabase : TDatabase;
  InterfaceDatabase : IDatabase;
  i : integer;
begin
  DatabaseList := TInterfaceList.Create;

  ADatabase := TDatabase.Create;
  ADatabase.SetDatabaseName('Oracle');
  InterfaceDatabase := ADatabase;
  DatabaseList.Add(InterfaceDatabase);

  ADatabase := TDatabase.Create;
  ADatabase.SetDatabaseName('MsSQL');
  InterfaceDatabase := ADatabase;
  DatabaseList.Add(InterfaceDatabase);

  for i :=0 to DatabaseList.Count-1 do begin
    Memo1.Lines.Add(IDatabase(DatabaseList[i]).GetDatabaseName());
  end;
end;

728x90
728x90

type
  TDatabase = class (TCollectionItem)
  private
    FDatabaseName: String;
  published
    property DatabaseName: String read FDatabaseName write FDatabaseName;
  end;

  TDatabaseList = class (TCollection)
  private
    function GetItem(Index: Integer): TDatabase;
  public
    function Add: TDatabase;
    property Item[Index: Integer]: TDatabase read GetItem;
  end;
 
{ TDatabaseList }

function TDatabaseList.Add: TDatabase;
begin
  result := inherited Add as TDatabase;
end;

function TDatabaseList.GetItem(Index: Integer): TDatabase;
begin
  result := inherited Items[Index] as TDatabase;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  DatabaseList : TDatabaseList;
  aDatabase : TDatabase;
  i : Integer;
begin
  DatabaseList := TDatabaseList.Create(TDatabase);

  aDatabase := DatabaseList.Add;  // create one hair
  aDatabase.DatabaseName := 'Oracle';

  aDatabase := DatabaseList.Add;  // create another hair
  aDatabase.DatabaseName := 'MsSQL';

  for i :=0 to DatabaseList.Count-1 do begin
    Memo1.Lines.Add(DatabaseList.Item[i].DatabaseName);
  end
end;

728x90
728x90

출처

http://airdocs.kr/docs/flex2/langref/mx/effects/package-detail.html
http://blog.keutgens.de/download/flexEffectExplorer/current/swf/TransitionsAndEffects.html

Class 설명
Blur 컴퍼넌트에 애매하게 해 효과를 적용할 수 있습니다.
Dissolve 컴퍼넌트가 투명으로부터 불투명하게, 또는 불투명으로부터 투명하게 추이하는 것 같은 애니메이션 효과를 설정합니다.
Fade 투명으로부터 불투명하게, 또는 불투명으로부터 투명하게 변화시킵니다.
Glow 컴퍼넌트에 발광 효과를 적용할 수 있습니다.
Move 지정된 시간 간격으로 컴퍼넌트의 위치를 변경합니다.
Resize 지정된 시간 간격으로 컴퍼넌트의 폭, 높이, 혹은 그 양쪽 모두의 값수를 변경합니다.
Rotate 특정의 점을 중심으로서 컴퍼넌트를 회전시킵니다.
Zoom 중심점을 기준에 object를 확대 또는 축소합니다.


Example

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

  <!-- http://airdocs.kr/docs/flex2/langref/mx/effects/Fade.html -->
  <!-- Simple example to demonstrate the Fade effect. -->
  <!-- 0.0 = 투명 / 1.0 = 불투명 -->
 <mx:Fade id="fadeOut" duration="1000" alphaFrom="1.0" alphaTo="0.0"/>
  <mx:Fade id="fadeIn" duration="1000" alphaFrom="0.0" alphaTo="1.0"/>
  <mx:Panel x="10" y="10" width="122" height="177" borderStyle="none">
    <mx:Label text="Fade effect." fontSize="14" visible="{cb1.selected}" hideEffect="{fadeOut}" showEffect="{fadeIn}"/>
    <mx:Image source="fx.gif" visible="{cb1.selected}" hideEffect="{fadeOut}" showEffect="{fadeIn}"/>
    <mx:CheckBox id="cb1" label="visible" selected="true"/>
  </mx:Panel>
   
  <!-- http://airdocs.kr/docs/flex2/langref/mx/effects/Blur.html -->
  <!-- Simple example to demonstrate the Blur effect. -->
  <!-- blurXFrom, blurXTo, blurYFrom, blurYTo 값의 범위 0.0 ~ 255.0 -->
  <mx:Blur id="blurImage" duration="1000" blurXFrom="0.0" blurXTo="10.0" blurYFrom="0.0" blurYTo="10.0"/>
  <mx:Blur id="unblurImage" duration="1000" blurXFrom="10.0" blurXTo="0.0" blurYFrom="10.0" blurYTo="0.0"/>
  <mx:Panel x="140" y="10" width="122" height="177" borderStyle="none">
    <mx:Label text="Blur effect." fontSize="14" visible="{cb2.selected}" hideEffect="{blurImage}" showEffect="{unblurImage}"/>
    <mx:Image source="fx.gif" mouseDownEffect="{blurImage}" mouseUpEffect="{unblurImage}"/>
    <mx:CheckBox id="cb2" label="visible" selected="true"/>
  </mx:Panel>
 
</mx:Application>

728x90
728x90

- Click Event

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

 <mx:Script>
  <![CDATA[

    private function on_ButtonClick(event:Event):void {
    mx.controls.Alert.show(
     event.type  // click
     + "\n" + event.currentTarget.name  // Button1
     + "\n" + Button(event.currentTarget).label  // ButtonLabel
     + "\n" + event.toString()  // [MouseEvent type="click" bubbles=true cancelable=false eventPhase=2 localX=63 localY=12 stageX=73 stageY=22 relatedObject=null ctrlKey=false altKey=false shiftKey=false delta=0]
    );  
    }  
   ]]>
  </mx:Script>

 <mx:Button x="10" y="10" label="ButtonLabel" click="on_ButtonClick(event)" id="Button1"/>
 
</mx:Application>

- Create Button


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

 <mx:Script>
  <![CDATA[

    private function on_ButtonClick(event:Event):void {
     
     var array_num:Array = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "0", "#"];
     var base_x:int = 10;
     var base_y:int = 90;
     var button_width:int = 30;
     var button_height:int = 45;
     
     for (var i:int = 0; i<4; i++) {
      for (var j:int = 0; j<3; j++) {
           var button:Button = new Button();
           button.label = array_num[ (i * 3) + j ];
           button.x = base_x + (j * button_width);
            button.y = base_y + (i * button_height);
            button.width = button_width;
            button.height = button_height;
            button.setStyle("fontSize", 14);
            this.addChild(button);
            button.addEventListener(MouseEvent.CLICK, clickHandler);
      }     
     }
    }  
   
    private function clickHandler(event:MouseEvent):void{
     Text1.text = Text1.text + Button(event.currentTarget).label;
    }     
   ]]>
  </mx:Script>

 <mx:Button x="10" y="10" label="Create Button" click="on_ButtonClick(event)" id="Button1" />
 <mx:TextArea x="10" y="40" id="Text1" fontSize="14"/>
 
</mx:Application>

728x90
728x90

츨처

http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001823.html

단순 데이타 타입

int, uint, Number, Boolean, String, void, Null

var value:int = 123; // int.MAX_VALUE = 2,147,483,647 , int.MIN_VALUE  = -2,147,483,648
var value:unit = 4000000;
var value:uint = 0x336699FF;
var value:uint = new uint( 0x336699FF );
var value:Number = 123.45; // MAX_VALUE = 1.79769313486231e+308 , Number.MIN_VALUE = 4.940656458412467e-324
var value:Boolean = true;
var value:String = "Hello World!";

복합 데이타 타입

Arrays

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

 <mx:Script>
  <![CDATA[
   public function test():void
   {
    var value1:String = "a";
    var value2:String = "b";
    var value3:String = "c";

    var values1:Array = new Array( value1, value2, value3);
    var values2:Array = [value1, value2, value3];

    var values3:Array = new Array();
    values3[ 0 ] = value1;
    values3[ 1 ] = value2;
    values3[ 2 ] = value3;

    var values4:Array = new Array();
    values4.push( value1);
    values4.push( value2);
    values4.push( value3);
   
    trace("0 values4.length = " + values4.length);
   
    var value1_1:String = values4.pop();
    var value2_1:String = values4.pop();
    var value3_1:String = values4.pop();
   
    trace("1 values4.length = " + values4.length);
    trace("value3_1 = " + value3_1);
    trace("value2_1 = " + value2_1);
    trace("value3_1 = " + value3_1);
   
   }
   ]]>
  </mx:Script>
 
 <mx:Button x="33" y="172" label="Button" click="test()"/>

</mx:Application>


trace

0 values4.length = 3
1 values4.length = 0
value3_1 = a
value2_1 = b
value3_1 = a
728x90

+ Recent posts