'Nexacro-Function/Form.PouUp'에 해당되는 글 2건

  1. 2017.01.28 Nexacro.Form - POP_UP창
  2. 2017.01.28 Nexacro.Form - showModeless

[ Nexacro.Form -  POP_UP창 ]

 


/*******************************************************************************
 ★ 설명
     Modal Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = variant ( Dialog창에서 close()에 의해 Return된 값 )
    - 실패 = ""
 ******************************************************************************/

function Dialog(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn=null;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 rtn = newChild.showModal(sID, MyFrame, sArg);

 this.removeChild(newChild.name);

 newChild.destroy();

 newChild = null;

 

 if( fn_IsNull(rtn) ) rtn = "";

 

 return rtn;

}

 

/*******************************************************************************
 ★ 설명
     Modaless Dialog실행 함수
 ★ parameter
    _NewChildFrame()참조
 ★ return
    - 성공 = true ( 정상작동여부 )
    - 실패 = false
 ******************************************************************************/

function Open(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var rtn;

 var newChild;

 var MyFrame = this.getOwnerFrame();

 

 newChild = _NewChildFrame(sID, sURL, sArg, nLeft, nTop, nWidth, nHeight, sStyle, sProp);

 

 return newChild.showModeless(sID, MyFrame, sArg);

}

 

/*******************************************************************************
 ★ 설명
     sObjName이 Popup창(showModaless()에 의해 뜬창)인지 확인한다.
     단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ★ parameter
    1. sObjName : Popup창 여부를 확인할 Object Name
 ★ return
    - sObjName이 Popup창인 경우 = true
    - sObjName이 Popup창이 아닌 경우 = false
 ★ 주의사항
    단, showModal()에 의해 뜬 창은 해당되지 않는다.
 ******************************************************************************/

function IsObjPopup(sPopupName)

{

 if( fn_IsNull(sPopupName) ) return false;

 

 if( fn_IsNull(application.popupframes(sPopupName)) )

  return false;

 else

  return true;

}

 


/*******************************************************************************
 ★ 설명
    Dialog(), Open()실행용 공통함수.
    ※ 단, 내부에서 사용하는 함수임     
 ★ parameter
    1. sID     : Dialog ID ( 예 : "id1" )         
    2. sURL    : Form URL ( 예 : "Base::a.xfdl" )
    3. Arg    : Dialog 로 전달될 Argument  
                 ( 예1 : {a:'b',c:'d'}  ==> 꼭, {}로 싸야 되고 위의 예 처럼 해야 된다. )
                 ( 예2 : var arr = new Array();
      arr["a"] = "b";
      arr["c"] = "d";  ==> 이래 한 후에 arr넘김 )
 
    4. nLeft   : Dialog창의 Left Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    5. nTop    : Dialog창의 Top Position ( 옵션 : Default = 현재화면 중앙 ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 현재화면 중앙에 위치)
    6. nWidth  : Dialog창의 Width ( 옵션 : Default = Popup화면의 width ) ( 예 : -1 또는 100 )
                 (단, 음수또는 null이면 Popup화면의 width)
    7. nHeight : Dialog창의 Height ( 옵션 : Default = Popup화면의 height ) ( 예 : -1 또는 100 )
    (단, 음수또는 null이면 Popup화면의 width)
    8. sStyle  : Dialog Open 기본 유형 (옵션 : Default = "" ) ( 예 : "title=true,status=true" )
                 (단, 간단히 지정하도록 처리했으므로 ChildFrame의 Property명과 동일하지는 않다.)
        - title  : Title Bar표시여부 ( Default = true ) ( true = Title Bar 표시 )
        - status : Status Bar표시여부 ( Default = true ) ( true = Status Bar 표시 )
        - close  : Close Button활성화 여부 ( Default = true ) ( true = Close Button활성화 )
        - min    : min Button활성화 여부 ( Default = true )  ( true = Min Button 활성화 )
        - max    : min Button활성화 여부 ( Default = true )  ( true = Max Button 활성화 )
    9. sProp   : Child Frame의 모든 Property를 Property명=Property값, Property명=Property값,... 형태로 설정한다.
                 (옵션 : Default = "") ( 예 : "titletext='a', style.border='1 solid blue', ... )
                 ( 단, sStyle에 동일한 처리가 있으면 sProp가 적용된다.
                   즉, sStyle="title=true", sProp="showtitlebar=false"라면 Title Bar는 표시되지 않는다.
 ★ return
    - 성공 = Child Frame Object
    - 실패 = null
 ★ 주의사항
    1. nLeft, nTop이 null이거나 음수이면 현재화면의 중앙에 위치함
    2. nWidth, nHeight이 하나라도 null이거나 음수이면 Popup화면의 width, height가 설정됨
       따라서, nWidth, nHeight를 설정하고 싶으면 두 값 모두 양수값을 확실히 설정해야 한다.
    3. 조금더, 자세하게 Popup화면을 제어하고 싶으면 ( 예를 들어, scrollbar, border등 )
       sProp에 지정하거나 Dialog창의 Frame을 얻어 직접제어할 것
    4. nLeft, nTop, nWidth, nHeight의 좌표계는 screen기준 좌표계임에 주의할것       
 ★ Bug
    1. sStyle에서 2009.12.10일 현재 min, max, status 잘안됨(???(모름 - Theme때문인가?))
    2. bAutoSize = true인 경우 Popup창의 position을 체크하면 값이 잘 안나옴(???(모름))
    3. ChildFrame.init()에서 좌표처리에 BUG있음(???(모름))
    4. ChildFrame.resizable=true 안먹네(???(모름))
 ******************************************************************************/

function _NewChildFrame( sID, sURL, Arg, nLeft, nTop, nWidth, nHeight, sStyle, sProp)

{

 var newChild = null;

 var MyFrame = this.getOwnerFrame();

 

 var bTitle = true;

 var bStatus = true;

 var bClose = true;

 var bMin = true;

 var bMax = true;

 var bAutoSize = true;

 var flag;

 var aProp = new Array();

 

 if( fn_IsNull(sID) || fn_IsNull(sURL) ) return null;

 

 newChild = new ChildFrame;

 

 if( fn_IsNull(nLeft) || nLeft < 0 )

  newChild.openalign.halign = "center";

 if( fn_IsNull(nTop) || nTop < 0 )

  newChild.openalign.valign = "center";

 if( fn_IsNull(nWidth) || nWidth < 0 ||

    fn_IsNull(nHeight) || nHeight < 0 )

 {

  nWidth = 0;

  nHeight = 0;

  bAutoSize = true;

 }

 else

  bAutoSize = false;

  

 if( fn_IsNull(sStyle) == false )

 {

  var i, arr, arr1;

  arr = sStyle.split(",");

  for( i = 0 ; i < arr.length ; i++ )

  {

   arr1 = arr[i].split("=");

   arr1[0] = RTrim(LTrim(arr1[0]));

   arr1[1] = RTrim(LTrim(arr1[1]));  

   if( arr1[1].toLowerCase() == "true" )  flag = true;

   else          flag = false;

   

   if( arr1[0].toLowerCase() == "title" )   bTitle = flag;

   if( arr1[0].toLowerCase() == "status" )  bStatus = flag;

   if( arr1[0].toLowerCase() == "close" )   bClose = flag;   

   if( arr1[0].toLowerCase() == "min" )   bMin = flag;   

   if( arr1[0].toLowerCase() == "max" )   bMax = flag;      

  }

 }

 

 if( fn_IsNull(sProp) == false )

 {

  var i;

  aProp = sProp.split(",");

  for( i = 0 ; i < aProp.length ; i++ )

  {

   aProp[i] = aProp[i].split("=");

   aProp[i][0] = RTrim(LTrim(aProp[i][0]));

   aProp[i][1] = RTrim(LTrim(aProp[i][1]));

  }

 }

 

 newChild.formurl = sURL;

 

 ////// sStyle내용 적용( 이부분은 init()호출전에 사용해야 함 )

 newChild.showtitlebar = bTitle;

 newChild.showstatusbar = bStatus;   

 newChild.autosize = bAutoSize;

 

 newChild.init(sID, nLeft, nTop, nLeft + nWidth, nTop + nHeight);

 

 ////// sStyle내용 적용( 이부분은 init()호출후에 사용해야 함 )

 newChild.titlebar.minbutton.enable = bMin;  

 newChild.titlebar.maxbutton.enable = bMax;  

 newChild.titlebar.closebutton.enable = bClose;

 

 MyFrame.addChild(sID, newChild); // 이거 꼭 해야 함

 ////// sProp내용 적용

 for( i = 0 ; i < aProp.length ; i++ )

 {

  SetProp( "this.getOwnerFrame()."+sID, aProp[i][0], aProp[i][1] );

 }

 MyFrame.removeChild(sID);   // 이거 꼭 해야 함

 

 return newChild;

}

☞  

 

☞  

 
 
 
 

  

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - showModeless  (0) 2017.01.28
Posted by 농부지기
,

[ Nexacro.Form -  showModeless  ]

 

* 특징 : showModeless 팝업창의 특징은 팝업창을 종료하지 않고도 Main창을 제어할 수 있다.
         이런 특징으로 Main창에서 다시 팝업창을 호출 할 수 있게 된다.
         이때 다시 팝업창을 Open하면 오류(내용은 아래 존재)가 발생하게 된다.
         
         이런 이유로 기존 팝업창을 close하고 다시 띄워야 된다.
         하지만 close하지 않고도 팝업창이 이미 띄워져 있는 지 검사하여 해당 팝업창을
         제어 할 수도 있다.

* 존재 하는 팝업창을 다시 띄우면 나는 오류
  [(US231022)는 이미 실행중입니다. 같은 ID로 동시에 여러 개의 창을 띄울수 없습니다. ]

☞ 예문1) 기존 팝업창을 찾아서 argument를 넘기고, function을 제어 하는 방법
 

/*++
@desc    Grid를 double click시
*/

function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;
    
    
var oParam = new Object();
    
var sSO_NO = ds_SoList.getColumn(e.row, "SO_NO");
    oParam = {pSO_NO:sSO_NO};

    if (application.popupframes["US231022"]){
        application.popupframes["
US231022"].form.pSO_NO=sSO_NO;
        application.popupframes["
US231022"].form.fn_Onload();
    }
else{
        cfn_openDialogCenter("
US231022", "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);
    }
}

☞ 예문2) 기존 팝업창을 종료하고, 신규ID를 부여하여 팝업창을 OPEN
          단점, 팝업창을 사용자가 적당한 곳에 이동했을 경우  다시 띄우므로 항상 중앙에 위치하게 된다.

 

/*++
@desc    Grid를 double click시 팝업창 호출
*/

var pIdx=0;
function fn_ApprovalPouUp(obj:Grid, e:GridClickEventInfo)
{
    
if (e.row < 0) return;    

    var oParam  = new Object();
    oParam = {pSO_NO:ds_SoList.getColumn(e.row, "
SO_NO")};    

    //기 존재 하면 삭제
    
var MDIFrame = application;
    
var i = MDIFrame.all.length;

    while ( i > 0)
    {
        i--;
        
var objChildFrame = MDIFrame.all[i];
        
if( objChildFrame.name == "US231022_" + pIdx ){
            objChildFrame.form.close();
            break;
        }
    }
    pIdx ++;
    
    
//신규로 다시 호출
    cfn_openDialogCenter("
US231022_" + pIdx, "HSUS::US231022.xfdl", 800 , 632, "modeless", oParam);

}


 

 
 
   
 

/*******************************************************************************
 * 기능 : 파라메터가 있는 다이얼로그 창을 타입별로 띄운다
 * 인자 : 화면아이디, URL, 가로, 세로, 타입, 파라메터
 * 리턴 : 팝업창에서 넘겨 받은 결과값
******************************************************************************
/  
function cfn_openDialogCenter(strid, url, width, height, type, arg, resize)
{
    
var i, nRow, objChildFrame;
        
    
var arrFramelist = this.getOwnerFrame().all;
    
for(i=0; i<arrFramelist.length; i++){
        
if(arrFramelist[i].name == strid) {
            
return false;
        }
    } 

    objChildFrame = new ChildFrame();   

    //다이얼로그 뜨는 위치 계산
    
var nMoniterIndex = system.getMonitorIndex(system.cursorx, system.cursory); //다중 모니터일 경우 사용중인 모니터 인덱스를 구함.
    
var strScreenRes  = system.getScreenResolution(nMoniterIndex);
    
var nCenterX      = new Number(strScreenRes.split(" ")[0]);
    
var nCenterY      = new Number(strScreenRes.split(" ")[1]);
    

    // 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 BEGIN

    
var nAppWidth   = application.mainframe.position.right  - application.mainframe.position.left;
    
var nAppHeight  = application.mainframe.position.bottom - application.mainframe.position.top;
    
var nAppCenterX = application.mainframe.position.right  - (nAppWidth / 2);
    
var nAppCenterY = application.mainframe.position.bottom - (nAppHeight / 2);
    posX = Math.round(nAppCenterX - (width / 2));
    posY = Math.round(nAppCenterY - (height / 2));
    
// 모니터의 중앙이 아닌 포털의 중앙에 뜨게 변경 END    

    objChildFrame.init(strid, posX, posY, width, height, url);
    
if (resize==null) objChildFrame.resizable = true;
    else objChildFrame.resizable =resize;
    objChildFrame.showtitlebar =
true;
    objChildFrame.layered      =
true;
    
if(type != "notice"){
        objChildFrame.style.background = "
white";
        objChildFrame.style.bordertype = "
round 7 7";
    }

    var result = "";    

    // Show Object  
    
if(type == "modeless"){
        objChildFrame.showModeless(
this.getOwnerFrame(), arg);
    }
    
else if(type == "modal" || type == "notice"){
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }
    
else {
        result = objChildFrame.showModal(
this.getOwnerFrame(), arg);
    }

    return result;
}

'Nexacro-Function > Form.PouUp' 카테고리의 다른 글

Nexacro.Form - POP_UP창  (0) 2017.01.28
Posted by 농부지기
,