본문 바로가기
IT/xPlatform

xPlatform 컬러 팝업 만들기

by heavenLake 2020. 6. 10.
반응형

 

컬러를 선택하면 색상값을 리턴해준다.

 

?<?xml version="1.0" encoding="utf-8"?>
<FDL version="1.5">
  <TypeDefinition url="..\..\default_typedef.xml"/>
  <Form id="COLOR_P" classname="MST_P001" inheritanceid="" position="absolute 0 0 330 350" titletext="색상표" onload="form_onload" onkeydown="BYPLNT_P_onkeydown">
    <Layouts>
      <Layout>
        <Div id="div_color" taborder="0" text="Div00" position="absolute 45 41 285 241" style="background:transparent;">
          <Layouts>
            <Layout>
              <Static id="stRedYellow" position="absolute 0 0 40 200" style="background:@gradation;gradation:linear 0,0 #ff0000ff 100,0 #ffff00ff;" text=""/>
              <Static id="stYellowGreen" position="absolute 40 0 80 200" style="background:@gradation;gradation:linear 0,0 #ffff00ff 100,0 #00ff00ff;" text=""/>
              <Static id="stGreenSkyblue" position="absolute 80 0 120 200" style="background:@gradation;gradation:linear 0,0 #00ff00ff 100,0 #00ffffff;" text=""/>
              <Static id="stSkyblueBlue" position="absolute 120 0 160 200" style="background:@gradation;gradation:linear 0,0 #00ffffff 100,0 #0000ffff;" text=""/>
              <Static id="stBlueViolet" position="absolute 160 0 200 200" style="background:@gradation;gradation:linear 0,0 #0000ffff 100,0 #ff00ffff;" text=""/>
              <Static id="stVioletRed" position="absolute 200 0 240 200" style="background:@gradation;gradation:linear 0,0 #ff00ffff 100,0 #ff0000ff;" text=""/>
            </Layout>
          </Layouts>
        </Div>
        <Div id="div_position" taborder="2" position="absolute 45 41 285 241" style="background:@gradation;gradation:linear 0,0 #7f7f7f00 0,100 #7f7f7fff;" onclick="div_position_onclick" ondragmove="div_position_ondragmove" ondrag="div_position_ondrag">
          <Layouts>
            <Layout>
              <ImageViewer id="imgSelect" taborder="0" position="absolute -11 -11 11 11" ondrag="div_position_imgSelect_ondrag" style="background:transparent;border:2 solid white transparent;"/>
            </Layout>
          </Layouts>
        </Div>
        <Div id="divBright" taborder="3" position="absolute 287 36 327 246" ondragmove="divBright_ondragmove">
          <Layouts>
            <Layout>
              <Static id="stBright" position="absolute 8 5 21 205" style="background:@gradation;gradation:linear 0,0 #ffffffff 0,100 #000000ff [50% #ff0000ff];" text="" onclick="divBright_stBright_onclick"/>
              <Button id="btnSelect" taborder="1" text="▶   ◀" position="absolute -2 100 33 110" style="background:transparent;color:black;font:Dotum,9, antialias;" ondrag="btnSelect_ondrag"/>
            </Layout>
          </Layouts>
        </Div>
        <Static id="stColorValue" position="absolute 115 274 229 294" style="border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" text=""/>
        <Static id="stColorView" position="absolute 237 254 252 272" style="background:transparent; border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff; padding:0 0 0 7; bordertype:round 3 3 ; " text="" visible="false"/>
        <Static id="stView" position="absolute 45 249 109 294" style="background:transparent;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" text=""/>
        <Static id="stText" position="absolute 112 255 226 275" style="padding:0 0 0 7;" text="선택 색상 값"/>
        <Static id="stRed" position="absolute 10 40 40 60" style="background:#ff0000ff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="0" userGubn="0"/>
        <Static id="stYellow" position="absolute 10 65 40 85" style="background:#ffff00ff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="40" userGubn="0"/>
        <Static id="stGreen" position="absolute 10 90 40 110" style="background:#00ff00ff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="80" userGubn="0"/>
        <Static id="stSkyBlue" position="absolute 10 115 40 135" style="background:#00ffffff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="120" userGubn="0"/>
        <Static id="stBlue" position="absolute 10 140 40 160" style="background:#0000ffff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="160" userGubn="0"/>
        <Static id="stViolet" position="absolute 10 165 40 185" style="background:#ff00ffff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="200" userGubn="0"/>
        <Static id="stWhite" position="absolute 10 190 40 210" style="background:#ffffffff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="0" userGubn="1"/>
        <Static id="stBlack" position="absolute 10 215 40 235" style="background:#000000ff;border:1 solid #c8d0d7ff,1 solid #e3e7eaff,1 solid #e3e7eaff,1 solid #c8d0d7ff;padding:0 0 0 7;bordertype:round 3 3 ;" onclick="fixColor_onclick" userPosition="200" userGubn="1"/>
        <Static id="Static00" class="sta_POP_ButtonArea" position2="absolute l:0 r:0 b:0 h:35" positiontype="position2"/>
        <Button id="btn_confirm" taborder="4" text="확인" onclick="btn_confirm_onclick" class="btn_WF_Confirm" visible="true" position2="absolute r:80 w:69 b:0 h:25" positiontype="position2"/>
        <Button id="btn_close" taborder="5" text="닫기" onclick="btn_close_onclick" class="btn_WF_Confirm" position2="absolute r:8 w:69 b:0 h:25" positiontype="position2"/>
      </Layout>
    </Layouts>
    <Objects/>
    <Bind/>
    <Script type="xscript4.0"><![CDATA[/*=============================   Program description   ================================*
 * Form ID     : _COM_PRD_COLOR_P.xadl
 * Form Desc.  :  
 * Author      :  
 * Create Date : 2020.04.17
 * Change History 

 *======================================================================================*
 * 수정일 / 이름 / 사유
 *======================================================================================* 
 *======================================================================================*


/*======================================================================================*
 * 1. include
 *======================================================================================*/
include "biz.library::bizInclude.xjs";


/*======================================================================================*
 * 2. Form 변수
 *======================================================================================*/
 
var divColorWidth = 40;
var divColorHeight =200;

var strReturn ="";
var BasicColor="#ffff00ff";
/*======================================================================================*
 * 3. Form Load
 *======================================================================================*/
function form_onload(obj:Form, e:LoadEventInfo)
{ 
	//if(!UtilMisc.isEmpty(pColorCd)) stColorValue.text = pColorCd;
	
	fn_formInit(obj, e);
}


function fn_formInit(obj:Form, e:LoadEventInfo)
{ 
}


/*========================================================*
 * 4. Transaction
 *========================================================*/


/*========================================================*
 * 5. Transaction CallBack
* ========================================================*/


/*========================================================*
 * 6. 사용자정의 함수
 *========================================================*/
//색상
function lfn_color(startColor,endColor,percentage)
{
	var sColor = new Array();
	var eColor = new Array();
	var vColor = new Array();


	sColor[0] = startColor.substr(1,2);
	sColor[1] = startColor.substr(3,2);
	sColor[2] = startColor.substr(5,2);

	eColor[0] = endColor.substr(1,2);
	eColor[1] = endColor.substr(3,2);
	eColor[2] = endColor.substr(5,2);

	var strS=0, strE=0, strV=0;
	var strReturn = "";
	for (var i = 0 ; i < 3 ; i++)
	{
		strS = lfn_convert10(sColor[i]);		//16진수->10진수
		strE = lfn_convert10(eColor[i]);		//16진수->10진수
		strH = Math.round(((parseInt(strE) - parseInt(strS))*percentage)+parseInt(strS));		//색상 계산 공식
		vColor[i] =lfn_convert16(strH); 		//10진수->16진수
	}
	strReturn = "#"+vColor[0]+vColor[1]+vColor[2];
	return strReturn;
}

//색상 Div 선택시 값 설정
//=========================================================
//e.canvasX
//	- 0 ~ 80 	-> Red(#ff0000ff)		~Yellow(#ffff00ff)
//	- 81 ~ 160 	-> Yellow(#ffff00ff)	~Green(#00ff00ff)
//	- 160 ~ 240 -> Green(#00ff00ff)		~Skyblue(#00ffffff)
//	- 240 ~ 320 -> Skyblue(#00ffffff)	~blue(#0000ffff)
//	- 320 ~ 400 -> blue(#0000ffff)		~Violet(#ff00ffff)
//	- 400 ~ 480 -> Violet(#ff00ffff)	~Red(#ff0000ff)
//=========================================================
function fn_SelectColor(obj,strCanvasX,strCanvasY)
{
	var selectColorX="";
	var selectColorY="";
	var strpercentage ="";
	var startColor="";
	var endColor="";

	if((strCanvasX > -1) && (strCanvasX < (divColorWidth+1)))
	{
		strpercentage = strCanvasX/divColorWidth;
		startColor ="#ff0000ff";
		endColor ="#ffff00ff";
	} else if((strCanvasX > divColorWidth) && (strCanvasX < (divColorWidth*2+1))) {
		strpercentage = (strCanvasX-divColorWidth)/divColorWidth;
		startColor ="#ffff00ff";
		endColor ="#00ff00ff";
	} else if((strCanvasX > (divColorWidth*2)) && (strCanvasX < (divColorWidth*3+1))) {
		strpercentage = (strCanvasX-(divColorWidth*2))/divColorWidth;
		startColor ="#00ff00ff";
		endColor ="#00ffffff";
	} else if((strCanvasX > (divColorWidth*3)) && (strCanvasX < (divColorWidth*4+1))) {
		strpercentage = (strCanvasX-(divColorWidth*3))/divColorWidth;
		startColor ="#00ffffff";
		endColor ="#0000ffff";
	} else if((strCanvasX > (divColorWidth*4)) && (strCanvasX < (divColorWidth*5+1))) {
		strpercentage = (strCanvasX-(divColorWidth*4))/divColorWidth;
		startColor ="#0000ffff";
		endColor ="#ff00ffff";
	} else {
		strpercentage = (strCanvasX-(divColorWidth*5))/divColorWidth;
		startColor ="#ff00ffff";
		endColor ="#ff0000ff";
	}

	selectColorX = lfn_color(startColor,endColor, strpercentage)+"ff";

	selectColorY = lfn_color(selectColorX,"#7f7f7fff",strCanvasY/divColorHeight) + "ff";

	stColorValue.text = selectColorY;

	stColorView.style.background.color = selectColorY;

	stView.style.background.color = selectColorY;

	divBright.stBright.style.gradation = "linear 0,0 #ffffffff 0,100 #000000ff [50% "+selectColorY+"]";

	divBright.btnSelect.position.y= 100;

	//커서 위치
	div_position.imgSelect.position.x = strCanvasX - 11;
	div_position.imgSelect.position.y = strCanvasY - 11;
}

//명도 색상값 선택 함수
function fn_brightSelect(obj,strClientY)
{
	var startColor;			//gradation  시작 색상값
	var endColor;			//gradation  종료 색상값
	var strPecent;			//gradation  위치 퍼센트
	var okColor;			//최종 색 선택값
//	var strObj = e.sourceobject.name;		//버튼명

	//버튼 위치 조정
	if(strClientY < 0)
	{
		obj.position.y = 0;
	} else if(strClientY > 200) {
		obj.position.y = 200;
	} else {
		obj.position.y = strClientY;
	}
	//버튼 위치에 따른 색상값
	if(strClientY < 0)
	{
		strPecent = 1;
		startColor = stColorView.style.background.color;
		endColor = "#ffffffff";
	} else if((strClientY > -1) && (strClientY < 100)) {
		strPecent = (100-strClientY)/100;
		startColor = stColorView.style.background.color;
		endColor = "#ffffffff";
	} else if(strClientY == 100) {
		okColor = stColorView.style.background.color;
	} else if((strClientY > 100) && (strClientY < 201)) {
		strPecent = (200-strClientY)/100;
		startColor = "#000000ff";
		endColor = stColorView.style.background.color;
	} else {
		strPecent = 0;
		startColor = "#000000ff";
		endColor = stColorView.style.background.color;
	}
	// 초기값 transparent 으로 나오는부분 수정
	if(startColor == "transparent"){
		startColor = "#ffffff";
	}
	
	if(endColor == "transparent"){
		endColor = "#000000";
	}
	
	okColor = lfn_color(String(startColor),String(endColor), strPecent)+"ff";		// 최종 색상 값

	stColorValue.text = okColor;													//최종 색상 값 TEXT 표시

	stView.style.background.color = okColor;										//최종 색상 값 Image 표시
}

//10진수 변환 함수
function lfn_convert10(strC)
{
    var nDec = 0;
	var abc;
	for(var i = 0;  i < strC.length ; i++)
	{
		abc = strC.substr(i,1);

        var nTemp = 0;

		switch (abc)
		{
			case "a":
				nTemp = 10;
			break;
			case "b":
				nTemp = 11;
			break;
			case "c":
				nTemp = 12;
			break;
			case "d":
				nTemp = 13;
			break;
			case "e":
				nTemp = 14;
			break;
			case "f":
				nTemp = 15;
			break;
			default:
				nTemp = abc;
			break;
		}
        nDec = nDec * 16 + parseInt(nTemp);
    }
     return nDec;
}

//16진수 변함 함수
function lfn_convert16(strC)
{
	var abc = new Array();
	var nTemp = 0;
	var nDec="";
	abc[0] = strC%16;
	abc[1] = Math.floor(strC/16);
	for(var i = 1 ; i > -1 ; i--)
	{
		switch (abc[i])
		{
			case 10:
				nTemp = "a";
			break;
			case 11:
				nTemp = "b";
			break;
			case 12:
				nTemp = "c";
			break;
			case 13:
				nTemp = "d";
			break;
			case 14:
				nTemp = "e";
			break;
			case 15:
				nTemp = "f";
			break;
			default:
				nTemp = abc[i];
			break;
		}
		nDec = nDec + String(nTemp);
	}
	return nDec;
}

function fixColor_onclick(obj:Static,  e:ClickEventInfo)
{
	if(obj.userGubn ==0)
	{
		fn_SelectColor(div_position,obj.userPosition,0);
	}else{
		divBright.btnSelect.position.y = obj.userPosition;
		fn_brightSelect(divBright.btnSelect,divBright.btnSelect.position.y);
	}
}

/*
 * 팝업 Close
 */
function fn_returnData()
{
	var aResult        = [];
	aResult["RESULT"]  = true;
	aResult["DISPLAY_COLOR"] = stColorValue.text;

	fn_close(aResult);
}

 /*
 * Close 버튼
 */
 function btn_close_onclick(obj:Button,  e:ClickEventInfo)
{
    fn_close();
}

// 제품정보 목록을 더블클릭 할 때.
function grd_result_oncelldblclick(obj:Grid, e:GridClickEventInfo)
{
	fn_returnData();
}

// 제품정보 목록을 선택후 확인 버튼을 클릭 할 때.
function btn_confirm_onclick(obj:Button,  e:ClickEventInfo)
{
	fn_returnData();
}



/* < Validation >============================================================================= */


 /*========================================================*
 * 7. 이벤트 함수
 *========================================================*/
 // 폼키다운
function BYPLNT_P_onkeydown(obj:Form, e:KeyEventInfo)
{
	if (e.keycode == 13){
		Div00.btn_search.setFocus();
		fn_search();
	}
}

//==================================================
// 이벤트 함수
//==================================================
//div_position  색상 선택 이벤트
function div_position_onclick(obj:Div,  e:ClickEventInfo)
{
	fn_SelectColor(obj,e.canvasX,e.canvasY);
}

//div_positon 선택 이미지 ondrag 이벤트
function div_position_imgSelect_ondrag(obj:ImageViewer, e:DragEventInfo)
{
	return true;
}

//div_ondrag 이벤트
function div_position_ondrag(obj:Div, e:DragEventInfo)
{
	return true;
}

//색상 ondragMove 이벤트
function div_position_ondragmove(obj:Div, e:DragEventInfo)
{
	fn_SelectColor(obj,e.canvasX,e.canvasY);
}

//명도 값 변경 버튼 ondrag 이벤트
function btnSelect_ondrag(obj:Button, e:DragEventInfo)
{
	return true;
}

//명도 값 gradation onClick 이벤트
function divBright_stBright_onclick(obj:Static,  e:ClickEventInfo)
{
	divBright.btnSelect.position.y = e.canvasY;
	fn_brightSelect(divBright.btnSelect,divBright.btnSelect.position.y)	;
//	btnSelect_ondrag(obj,)
}

//명도 값 변경 division ondragmove 이벤트
function divBright_ondragmove(obj:Div, e:DragEventInfo)
{
	if(e.sourceobject.name == "btnSelect")
	{
		fn_brightSelect(e.sourceobject,e.clientY)
	}
}

//색상 선택 버튼
function btnOk_onclick(obj:Button,  e:ClickEventInfo)
{
	strReturn = stColorValue.text;
	btnClose_onclick();
}

//색상 선택 취소 버튼
function btnCancle_onclick(obj:Button,  e:ClickEventInfo)
{
	strReturn = "";
	btnClose_onclick();
}

//창 닫기 버튼
function btnClose_onclick(obj:Button,  e:ClickEventInfo)
{
	close(strReturn);
}
]]></Script>
  </Form>
</FDL>

 

 

 

반응형

댓글