천객만래 [千客萬來] (It has an interminable succession of visitors)

[웹] 웹퍼블리셔(Web Publisher)란



웹퍼블리셔(Web Publisher)란

웹표준 및 DOCTYPE를 인지하지 못하는 개발자가 작업하여 나오는 결과물이 IE와 그 외 브라우저에서 특정한 부분만 인식하는 스크립트와 그렇지 않은 스크립트, XHTML과 HTML 태그 사용법 등을 미리 선정하여 큰 문제가 없도록 최대한 디자인을 살려 개발 영역을 넓혀줄 수 있는 역할을 하는 것이 퍼블리셔이다.

 

수행직무)

퍼블리셔는 코더의 역할 뿐만이 아니라, 전체적인 프로젝트의 인식, 그리고 웹 접근성과 크로스미디어, 크로스 브라우저 같은 좀 더 많은 사용자에게 퍼블리싱(인쇄 , 출력)을 할 수 있는 환경을 제공하고자 하는 것에 좀 더 초점이 맞추어져 있다. HTML과 CSS를 활용한 효율적이고 빠른 그리고 수정 용이한 코드 작성을 목적으로 한다.

 

변화를 읽는 자기계발, 흐린 취업시장에서 성공의 길!

뜨는 IT 직종, 웹 퍼블리셔

 

IT 관련 직종의 수명이 짧아지면서, 새로운 직종에 속속 등장하고 있다. 올해 채용시장에 가장 두드러진 직종으로 평가되는 분야는 웹퍼블리셔.

4 11장애인차별금지 및 권리구제에 관한 법률(장차법)’의 시행에 따라 모든 공공기관과 종합병원, 복지시설, 특수학교 및 장애전담 보육시설 등의 홈페이지에 대한 장애인을 위한 웹 접근성이 갖춰지도록 의무화 되었고, 정부 공공기관의 웹 접근성 개선사업이 크게 늘면서 각 취업사이트마다 웹퍼블리셔를 모집하는 공고가 넘쳐나고 있다.

 

웹퍼블리셔는웹 표준 및 웹 접근성 전문가라고 정의할 수 있으며 웹 표준과 그 주변의 다양한 웹 관련 기술에 전문성을 지니고 있는 웹의 구현(출판)을 담당하는 새롭게 부각되는 업무를 행하는 사람을 지칭하기 위한 용어이다.
웹퍼블리셔가 웹표준 구현을 위하여 갖추어야 할 스킬은 아래와 같다.
• HTML, CSS, Javascript
에 대한 관심
• XHTML
마크업 및 W3C DOM을 사용한 자바스크립트 개발 역량
• XHTML
CSS로 구조와 표현 분리 개발 방법에 대한 이해
웹접근성 및 웹표준에 대한 이해
개발자와 디자이너, 컨텐츠 설계자와의 원할한 커뮤니케이션 역량
사용자 중심의 UI에 대한 관심과 이해
소수 사용자를 배려하는 마음

 

급격한 수요 증가에 대응하기 위해 강좌를 개설한 미즈 평생교육원에서는 웹표준/웹접근성 전문강좌를 개설하여 새로운 인터넷 환경을 이끌어갈 인력을 배출하고자 수강생을 모집하고 있다

Posted by SB패밀리

[javascript] 남녀 표준체중알아보기


20070327




<SCRIPT LANGUAGE="JAVASCRIPT">
function Man_Weight(h)
{
     c=(h-100)*0.9
     return c;
}
function Woman_Weight(h)
{
    c=(h-100)*0.85
    return c;
}
function calculate_Weight(w, c)
{
    d=w/c*100
    return d;
}    
function error(form)
{
       if (form.w.value==null||form.w.value.length==0 || form.h.value==null||form.h.value.length==0)
       {
          alert("측정할 정보를 입력하지 않았습니다.");
          return false;
       }
          return true;
}
function ResultCal(form)
{
var sexis=form.type.value;//폼에서 type 항목의 값으로 성별 구분

      if (error(form))
      {
       if(sexis==1)
       {
          c=Math.round(Man_Weight(form.h.value));
       }
       else if(sexis==2)
       {
          c=Math.round(Woman_Weight(form.h.value));
        }
        form.c.value=c;
        fat=Math.round(calculate_Weight(form.w.value, c));
         if(fat>=120)
         {
           form.doctor.value="비만이십니다. 시간나실때 마다 운동을 즐거운 맘으로 하세요";        
         }
         else if(fat>=90 && fat<120)
        {    
          form.doctor.value="건강한 표준 체중이십니다. 건강은 건강할때 지켜야 합니다.";
        }
         else if(fat>0 && fat<90)
        {
          form.doctor.value="표준체중에 미달입니다. 가벼운 운동과 함께 맛있는 음식많이 섭취하세요";
       }
       }
      return;
}
function re(form)
{
    form.w.value = "";
    form.h.value = "";
    form.c.value = "";
    form.doctor.value = "";
}
</SCRIPT>
<!--여기까지의 스크립트를 <head>와 </head>태그 사이에 넣으세요-->
<FORM NAME="test" method=get>  
남성일 경우는 1을  여성일 경우는 2 를 입력하세요<br>
<INPUT TYPE="text" NAME="type" VALUE="1" size="1">
신장<input type=TEXT name=h  size=5 >cm
몸무게<input type=TEXT name=w  size=5 >kg
<input type="BUTTON"  value="측정결과"  onClick="ResultCal(this.form)" name="BUTTON">
<input type="BUTTON"  value="다시입력"  onClick="re(this.form)" name="BUTTON"><br>
귀하의 이상적인 평균체중은
<input type=TEXT name=c size=5>kg
<br>
*처방
<br>
<textarea name="doctor" cols=50 rows=5 wrap=on>
Posted by SB패밀리





기능이 제한된 프리웨어.. (상용임)
=================================================================================

무료로 사용가능한 기능

- javascript의 print와 같은 기능(프린트 대화창)

- page setup 호출

- print preview 미리보기 호출

- header/footer/marings /portrait 설정

- 프레임 지정 프린트

- 프린터 고르기 없이 직접 프린트


* 자바스크립트에 넣으시고..

function ThisWindowsPrint() {
with ( factory.printing ) 

header = ''; 
footer = ''; 
portrait = true; // true 세로출력 , false 가로출력
leftMargin = 0; 
rightMargin = 0; 
topMargin = 0; 
bottomMargin = 0; 
//printing.SetMarginMeasure(1); 
//printing.printBackground = true  //배경 및 이미지 인쇄

Print(true, window) // 첫번째 인자 : 대화상자표시여부 , 두번째인자 : 출력될 프레임
}
window.close();
}

* html 에 넣으시고...

<Object id='factory' viewastext style='display:none' classid='clsid:1663ed61-23eb-11d2-b92f-008048fdd814' codebase='http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,432,1'>
</Object>


* 인쇄버튼 만드시고.. input으로 ... 레이어 만드시고 하셔도 되고요.. 
* 인쇄시 인쇄버튼이 나오면 안되니깐 클릭시 레이어 hidden 시키고 ThisWindowsPrint() 호출;;;

OnClick='ThisWindowsPrint()'

※ 딴지 - 공개용모듈이라 그런지 ActiveX가 죽지 않는 현상이 이따금 발생하여,
프로그램 에러가 발생입니다. 

파일은 여기서

MeadCo ScriptX 컴포넌트 사용 1. MeadCo 웹사이트에서 ScriptX.Cab을 다운 http://www.meadroid.com/scriptx/sxdownload.asp

 

------------------------------------

새페이지를 띄우지 않고 출력하는 방법

 

<HTML>
 <HEAD>
  <title>풀리백출력</title>
  <OBJECT id="factory" style="DISPLAY: none" codeBase="http://www.meadroid.com/scriptx/ScriptX.cab#Version=6,1,429,14"
   classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext>
  </OBJECT>
  <script defer>
  {
  factory.printing.header = "";   // Header에 들어갈 문장
  factory.printing.footer = "";   // true 면 가로인쇄, false 면 세로 인쇄
  factory.printing.portrait = false;
  factory.printing.leftMargin = 0.4;   // 왼쪽 여백 사이즈
  factory.printing.topMargin =0.2; // 위 여백 사이즈
  factory.printing.rightMargin = 0.0;   // 오른쪽 여백 사이즈
  factory.printing.bottomMargin = 0.0;  // 아래 여백 사이즈
  //factory.printing.SetMarginMeasure(1); 
  // factory.printing.printBackground = true  //배경 및 이미지 인쇄
  }
  </script>
  <script>
 function printDiv () {
 if (document.all && window.print) {
  window.onbeforeprint = beforeDivs;
  window.onafterprint = afterDivs;
  //window.print();
  factory.printing.Print(true);
  }
 }
 function beforeDivs () {
 if (document.all) {
  objContents.style.display = 'none';
  objSelection.innerHTML = document.all['lblPrint'].innerHTML;
 }
 }
 function afterDivs () {
  if (document.all) {
   objContents.style.display = 'block';
   objSelection.innerHTML = "";
  }
 }

function Preview(){
 factory.printing.leftMargin = 0.4; // 왼쪽 여백 사이즈
 factory.printing.topMargin =0.2; // 위 여백 사이즈
 factory.printing.rightMargin = 0.0;  // 오른쪽 여백 사이즈
 factory.printing.bottomMargin = 0.0; // 아래 여백 사이즈

 factory.printing.portrait = false;
 factory.printing.Preview();
 
 }
  </script>
  <STYLE TYPE="text/css"> 
 .break { PAGE-BREAK-AFTER: always } 
  </STYLE>
 </HEAD>
<body>

...

<table style='Z-INDEX: 100; POSITION: absolute' align='center'>
     <TR>
      <TD align="center">
       <IMG style="CURSOR: hand" onclick='javascript:printDiv()' alt="프린트" src="../../image/print.gif">
       <IMG style="CURSOR: hand" onclick="javascript:self.close()" alt="창닫기" src="../../image/winclose.gif">
       <IMG style="CURSOR: hand" onclick="javascript:Preview()" src="../../image/btn_printt.gif"
        alt="프린터 설정">
      </TD>
     </TR>
    </table>
   </DIV>
   <DIV id="objSelection"><FONT face="굴림"></FONT></DIV>
</body>
</HTML>



Meadroid_ScriptX.zip


Posted by SB패밀리


업로드 이미지 미리보기양식






- onfocus : 포커스가 위치할 시 이벤트가 수행됩니다.
- onblur : 포커스가 해제되면 이벤트가 수행됩니다.


----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function in_photo() {
var frm = document.frm1;

if (frm.photo1.value)

/* 업로드양식의 이미지경로를 이미지뷰어창에 할당합니다. */
  document.img1.src = frm.photo1.value;  

}


-->
</script>



<body>
<center>



<form method="post" name="frm1">
<table border=1 cellpadding=1 cellspacing=0>
<tr>
  <td align="center" bgcolor="#d5d3d5">[이미지]</td>
  <td>
   <input type="file" name="photo1" size=25

/* 포커스가 위치하면 이벤트가 수행됩니다. */
onfocus="this.style.backgroundColor='#f0f0e0'; in_photo()"

onblur="this.style.backgroundColor='#e0e0e0'">  <!-- 포커스가 해제되면 이벤트가 수행됩니다. -->
  </td>
</tr>
<tr>
  <td colspan=2 align="center">

   <br><font size=2>- 미리보기를 할 수 있습니다. -</font><br><br>

   <img src="" name="img1" align="absmiddle">

  </td>
</tr>
</table>

</form>


</center>
</body>
</html>



출처: 인터넷

Posted by SB패밀리

출처: 인터넷



미디어 플레이어 객체 제어하기
* 조절메서드
  - Pause() : 일시정지합니다.
  - Play() : 재생합니다.
  - Stop() : 중지합니다.
  - Next() : 다음으로 이동합니다.
  - Previous() : 이전으로 이동합니다.
* PlayState속성 - 재생, 중지, 일시정지 중인지의 상태를 알아냅니다.
  -- mpStopped : [0] 재생이 중지된 상태
  -- mpPaused : [1] 재생이 일시정지된 상태
  -- mpPlaying : [2] 재생중인 상태
  -- mpWaiting : [3] 시작하기 위해서 기다리는 상태
  -- mpScanForward : [4] 재생흐름을 다음으로 이동
  -- mpScanReverse : [5] 재생흐름을 이전으로 이동
  -- mpSkipForward : [6] 다음 단계로 이동
  -- mpSkipReverse : [7] 이전 단계로 이동
  -- mpClosed : [8] 재생닫혀있는 상태
* DisplaySize속성 - 화면크기를 조절합니다.
  -- mpDefaultSize : [0] 기본크기
  -- mpHalfSize : [1] 기본크기에서 1/2크기
  -- mpDoubleSize : [2] 기본크기에서 두배로 확대한 크기
  -- mpFullScreen : [3] 화면 전체크키
  -- mpFitToSize : [4] 사용자가 디자인한 크기
  -- mpOneSixteenScreen : [5] 전체화면의 1/16크기
  -- mpOneFourthScreen : [6] 전체화면의 1/4크키
  -- mpOneHalfScreen : [7] 전체화면의 1/2크기
* Mute속성 - 소리를 끄거나 켜기위해 사용됩니다.
   Boolean값이 True이면 소리가 꺼진 상태이고 False이면 소리가 켜진 상태입니다.

# 윈도우 미디어플레이어 속성
AllowChangedDisplayMode 초단위, 프레임 단위로 최종 사용자가 디스플레이 모드를 실행시 변경할 수 있는지를 나타낸다.
AllowHideControls 최종 사용자가 컨트롤 패널을 실행시 감출 수 있는지를 나타낸다. 
AllowHideDisplay 최종 사용자가 디스필레이를 실행시 감출 수 있는지를 나타낸다. 
Apperance 디스플레이 패널의 경계의 모양을 지정한다. 1=inset border 패인모양, 0=무경계 
AutoRewind 파일의 재생이 끝났을 때 자동으로 되감기를 할 것인지를 표시한다.
AutoStart 웹페이지를 열면 자동으로 재생을 시작할 것인지를 표시한다.
Balance 소리의 균형을 나타낸다. 0=균형, -10,000=왼쪽스피커만 사용, 10,000=오른쪽 스피커만 사용 
BorderStyle 컨트롤 경계 스타일을 지정한다. 0=무사용, 1=고정된 싱글 경계 
CurrentPosition 재생 파일에서의 현 위치를 초 단위로 나타낸다. 
CurrentState 플레이어의 현 상태를 나타낸다. 0=정지, 2=재생, 1=일시정지 
DisplayBackColor 디스플레이 패널의 배경색을 나타낸다. 
DisplayForeColor 디스플레이 패널의 전경생을 나타낸다. 
DisplayMode 디스플레이 패널에 초단위 또는 프레임 단위로 현위치를 디스플레이할지를 나타낸다. 0=초, 1=프레임 
EnableContextMenu 단축 메뉴를 활성화시킬지를 나타낸다.
Enabled 컨트롤이 활성화되었는지를 나타낸다.
EnablePositionControls 컨트롤 패널에 위치 버튼을 보여줄 것인지를 표현한다.
EnableSelectControls 컨트롤 패널에 선택 버튼을 보여줄 것인지를 표현한다.
EnableTracker 컨트롤 패널에 트랙바 컨트롤을 보여줄 것인지를 표시
FileName 재생될 멀티미디어 파일을 지정한다. 
FullScreenMode 모니터 전체의 크기로 멀티미디어를 표시한다. 
MovieWindowSize 재생 패널의 크기를 결정한다. 0=원래크기, 1=원래크기의 2배, 2=화면의 1/6크기, 3=화면의 1/4 
PlayCount 재생할 횟수를 지정한다. 
Rate 재생 비율을 결정한다. 
ReadyState 소스 파일을 얼마나 로드했는가에 따른 Active Movie Control의 준비 상태를 나타낸다. 
SelectionEnd 파일의 처음에서부터 종료 위치를 초 단위로 지정한다. 
SelectionStart 파일의 처음에서부터 시작 위치를 초 단위로 지정한다. 
ShowControls 컨트롤 패널 표시 여부를 지정한다.
ShowDisplay 디스플레이 패널 표시 여부를 지정한다.
ShowPositionControls 위치 컨트롤의 표시 여부를 지정한다.
ShowSelectControls 선택 컨트롤의 표시 여부를 지정한다.
ShowTracker 트랙바의 표시 여부를 지정한다.
Volume 데이벨의 100분의 1 단위로 볼륨을 지정한다.
.. 그외 자세한 사항은 MSDN:Windows Media Player Properties를 참고하기 바랍니다.



----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function mmp_state() {  /* 재생상태를 출력 */
switch(mmp.PlayState) {
  case 0 : frm1.state.value = "중지상태";
   break;
  case 1 : frm1.state.value = "일시중지";
   break;
  case 2 : frm1.state.value = "실행중";
   break;
}
}



function mmp_play() {  /* 재생 */
if (mmp.Filename!="")
  mmp.Play();
mmp_state();
}



function mmp_stop() {  /* 멈춤 */
if (mmp.Filename!="")
  mmp.Stop();
mmp_state();
}



function media_size(my_sel) {  /* 화면크기조정 */
switch(my_sel) {
  case 0 : mmp.DisplaySize = 0;
   break;
  case 2 : mmp.DisplaySize = 2;
   break;
  case 3 : mmp.DisplaySize = 3;
   break;
}
}



function mmp_pause() {  /* 일시멈춤 */
if (mmp.Filename!="")
  mmp.Pause();
mmp_state();
}



function mmp_sound() {  /* 소리제어 */
if (mmp.Filename!="") {
  if (mmp.Mute == true) {
   mmp.Mute = false;
   frm1.sound.value = "소리켬";
  } else {
   mmp.Mute = true;
   frm1.sound.value = "소리끔";
  }
}
}



-->
</script>



<body>
<div align="center">

<object classid="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codeBase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" id="mmp" style="left:0px; top:0px; width:320px; height:240;">
<param name="AudioStream" value=-1>
<param name="AutoSize" value=-1>
<param name="AutoStart" value=-1>  <!-- 웹페이지를 열면 자동으로 재생을 시작할 지 설정 -->
<param name="AnimationAtStart" value=-1>
<param name="AllowScan" value=-1>
<param name="AllowChangeDisplaySize" value=-1>
<param name="AutoRewind" value=0>  <!-- 파일의 재생이 끝났을 때 자동으로 되감기를 할 지 설정 -->
<param name="Balance" value=0>  <!-- 스피커의 음량분배, 0=균형, -10,000=왼쪽스피커만 사용, 10,000=오른쪽 스피커만 사용  -->
<param name="BaseURL" value="">
<param name="BufferingTime" value=5>
<param name="CaptioningID" value="">
<param name="ClickToPlay" value=-1>
<param name="CursorType" value=0>
<param name="CurrentPosition" value=1>  <!-- 재생 파일에서의 현 위치를 초 단위로 나타낸다.  -->
<param name="CurrentMaker" value=0>
<param name="DefaultFrame" value="">
<param name="DisplayBackColor" value=0>  <!--  디스플레이 패널의 배경색을 나타낸다.  -->
<param name="DisplayForeColor" value="16777215">  <!-- 디스플레이 패널의 전경색 -->
<param name="DisplauMode" value=0>  <!-- 디스플레이 패널에 초단위 또는 프레임 단위로 현위치를 디스플레이할지를 나타낸다. 0=초, 1=프레임 -->
<param name="DisplaySize" value=0>
<param name="Enabled" value=-1>  <!-- 컨트롤이 활성화되었는지를 나타낸다. -->
<param name="EnableContextMenu" value=-1>  <!-- 단축 메뉴를 활성화시킬지를 나타낸다. -->
<param name="EnablePositionControls" value=-1>  <!-- 컨트롤 패널에 위치 버튼의 출력설정 -->
<param name="EnableFullscreenControls" value=0>
<param name="EnableTracker" value=-1>  <!-- 컨트롤 패널에 트랙바 컨트롤을 보여줄 지를 표시 -->
<param name="Filename" value="king_1118.asf">  <!-- 재생될 멀티미디어 파일을 지정한다. -->
<param name="InvokeURLs" value=-1>
<param name="Language" value=-1>
<param name="Mute" value=0>
<param name="PlayCount" value=1>  <!-- 재생할 횟수를 지정한다.  -->
<param name="PreviewMode" value=0>
<param name="Rate" value=1>  <!-- 재생 비율을 결정한다.  -->
<param name="SAMILang" value="">
<param name="SAMIStyle" value="">
<param name="SAMIFileName" value="">
<param name="SelectionStart" value=-1>  <!-- 파일의 처음에서부터 시작 위치를 초 단위로 지정 -->
<param name="SelectionEnd" value=-1>  <!--  파일의 처음에서부터 종료 위치를 초 단위로 지정 -->
<param name="SendOpenStateChangeEvents" value=-1>
<param name="SendWarnigEvents" value=-1>
<param name="SendErrorEvents" value=-1>
<param name="SendKeyboardEvents" value=0>
<param name="SendMouseClickEvents" value=0>
<param name="SendMouseMoveEvents" value=0>
<param name="SendPlayStateChangeEvents" value=-1>
<param name="ShowCaptioning" value=0>
<param name="ShowControls" value=0>  <!-- 컨트롤 패널 표시 여부를 지정한다 -->
<param name="ShowAudioControls" value=0>
<param name="ShowDisplay" value=0>  <!-- 디스플레이 패널 표시 여부를 지정한다.  -->
<param name="ShowGotoBar" value=0>
<param name="ShowPositionControls" value=0>  <!--  위치 컨트롤의 표시 여부를 지정한다.  -->
<param name="ShowStatusBar" value=0>
<param name="ShowTracker" value=-1>  <!-- 트랙바의 표시 여부를 지정한다. -->
<param name="TransparentAtStart" value=0>
<param name="VideoBorderWidth" value=0>
<param name="VideoBorderColor" value=0>
<param name="VideoBorder3D" value=0>
<param name="Volume" value=-600>  <!-- 데시벨의 100분의 1 단위로 볼륨을 지정한다.  -->
<param name="WindowlessVideo" value=0>
</object>



<form name="frm1">
<input type="button" name="play" value="실행" onClick="mmp_play()">
<input type="button" name="stop" value="중지" onClick="mmp_stop()">
<input type="button" name="next" value="일시중지" onClick="mmp_pause()">
<input type="button" name="sound" value="소리 켬" onClick="mmp_sound()">
<br><br>
<input type="button" name="size1" value="기본크기" onClick="media_size(0)">
<input type="button" name="size2" value="두배크기" onClick="media_size(2)">
<input type="button" name="size3" value="전체크기" onClick="media_size(3)">
<br><br>
상태 : <input type="text" name="state" value="실행중">

</form>



</div>
</body>
</html>

Posted by SB패밀리






# 미디어 플레이어의 화면구조
ⓐ ShowTracker : 진행도를 알 수 있는 패널조절바를 보여줄 지 설정합니다.
ⓑ ShowControls : 실행, 중지, 일시중지가 있는 조절판을 보여줄지 설정합니다.
ⓒ ShowPositionControls : 이전, 이후 탐색이 있는 조절판을 보여줄 지 설정합니다.
ⓓ ShowAudioControls : 소리와 볼륨조절기를보여줄 지 설정합니다.
ⓔ ShowGotoBar : 실행바를 보여줄 지 설정합니다.
ⓕ ShowDisplay : 하단정보창을 보여줄 지 설정합니다.
ⓖ ShowStatusBar : 하단 상태바를 보여줄 지 설정합니다.

각 속성은 부울(Boolean:True, False와 같이 논리적인 값)값을 이용하여 설정합니다. True이면 보여주고 False이면 사라집니다. Param태그의 value속성이 0이면 False를 의미하고, -1이면 True를 의미합니다.

:: object태그 :: ActiveXControl을 사용하기위해 사용됩니다.
- classid : 해당연결프로그램의 레지스트리 고유인식번호를 설정합니다.
- codeBase : 해당연결프로그램의 버전을 검색하고 필요시 업그레이드하는 정보를 담고 있습니다.
대표적인 ActiveXControl인 MediaPlayer와 FlashPlayer의 codeBase는 MicroSoft ActiveX Controls Gallery에서 검색할 수 있습니다.
:: param태그 :: 해당 ActiveXControl의 정보/설정기능을 제공합니다.

* classid는 다음과 같이 확인할 수 있습니다.






----------------------------------------------------------------------------------------



<html>
<body>
<div align="center">


<object classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" codeBase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701" id="mmp"
style="width:315; height:430;">
<param name="Filename" value="king_1118.asf">
<param name="ShowTracker" value=-1>
<param name="ShowControls" value=-1>
<param name="ShowPositionControls" value=-1>
<param name="ShowAudioControls" value=-1>
<param name="ShowGotoBar" value=-1>
<param name="ShowDisplay" value=-1>
<param name="ShowStatusBar" value=-1>
</object>


</div>
</body>
</html>



출처: 인터넷

Posted by SB패밀리





주민번호검증하기2

- charCodeAt() : 해당인덱스에 해당하는 문자의 ascii코드값을 반환합니다.
- substring(x, y) : 인덱스[x]값에서부터 인덱스[y]값이전까지의 문자열을 반환합니다.



* 주민등록번호의 공식
주민등록번호의 13자리로 이루어져 있습니다.
- 처리1 : [첫번째번호*2] + [두번째번호*3] + [세번째번호*4] + [네번째번호*5] + [다섯번째번호*6]
    + [여섯번째번호*7] + [일곱번째번호*8] + [여덟번째번호*9] + [아홉번째번호*2] + [열번째번호*3]
    + [열한번째번호*4] + [열두번째번호*5]의 합
- 처리2 : [처리1값] % 11
- 처리3 : [[처리1값] - [처리2값]] + 11 - [처리1값]
- 처리4 : [처리3값] % 10
- 처리5 : [처리3값] - [[처리3값] - [처리4값]]





----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function name_check(ch_name) {  /* 이름체크 */
var len = ch_name.length;



if (len < 2) {  /* 이름은 두자이상 */
  alert("이름이 잘못되었습니다.");
  frm1.myname.focus();
  return false;
}



for (i=0; i<len; i++) {
  var mycode = ch_name.charCodeAt(i);  /* 해당인덱스 문자의 ascii코드값 */



  if (mycode < 128) {  /* 128이상은 한글 */
   alert("한글 이름으로 입력하세요");
   frm1.myname.focus();
   return false;
  }
}


return true;
}



function jumin_check(ssn_jumin) {  /* 주민번호 확인 */
var ssn_num = new Array();
var ssn_jumin1 = new String(ssn_jumin);  /* 입력된 숫자의 문자열화 */



if (ssn_jumin1.length != 13) {
  alert("주민등록번호 13자리인지를 확인하여 주십시오");
  frm1.jumin1.focus();
  return false;
}



for (var i=0; i<=12; i++)
  ssn_num[i] = ssn_jumin1.substring(i, i+1);  /* [i]에서 [i+1]까지 문자를 추출 */



/* 주민등록번호 공식의 시작 */
var sum = 2*ssn_num[0] + 3*ssn_num[1] + 4*ssn_num[2] + 5*ssn_num[3];
sum += 6*ssn_num[4] + 7*ssn_num[5] + 8*ssn_num[6] + 9*ssn_num[7];
sum += 2*ssn_num[8] + 3*ssn_num[9] + 4*ssn_num[10] + 5*ssn_num[11];

var r1 = sum % 11;
var temp = (sum-r1) + 11 - sum;
var r2 = temp % 10;
var temp1 = temp - (temp-r2);
/* 주민등록번호 공식의 끝 */



if (ssn_num[12] != temp1) {  /* 해당 주민번호를 검증 */
  alert("올바른 주민등록번호가 아닙니다.");
  return false;
}



return true;
}



function frm_check() {  /* 각 함수를 호출/확인한다. */
var jumin_name = frm1.myname.value;
var jumin_num = frm1.jumin1.value + frm1.jumin2.value;



if (name_check(jumin_name) == false)
  return false;

if (jumin_check(jumin_num) == false)
  return false;

}



-->
</script>



<body onload="frm1.myname.focus();">
<table border=1 cellpadding=5 cellspacing=2 bordercolor="#bbddaa">
<form name="frm1" onsubmit="return frm_check()">



<tr>
<td bgcolor="#aacc99" align="center">이 름</td>
<td bgcolor="#cceebb"><input type="text" name="myname" maxlength=10 size=10></td>
</tr>
<tr>
<td bgcolor="#aacc99">주민등록번호</td>
<td bgcolor="#cceebb">
  <input type="text" name="jumin1" maxlength=6 size=6>-
  <input type="text" name="jumin2" maxlength=7 size=7>
</td>
</tr>
<tr>
<td colspan=2 align="center">
  <input type="submit" value=" 확인 ">
</td>
</tr>



</form>
</table>
</body>
</html>


출처: 인터넷

Posted by SB패밀리







사업자등록번호 검증하기

- isNuN() : 해당값이 문자인지 숫자인지 파악합니다. 숫자가 아니면 true값을 반환합니다.
- parseInt(변수, 한계값) : 해당값의 소수부분을 버림합니다.



* 전기신호의 0, 1이 off, on를 의미하듯이 javascript의 0은 false, 그 외 다른 수는 true를 의미합니다.



* 사업자 등록번호 공식
사업자번호는 총 10자리로 이루어져 있습니다.
처리1 ; 아홉번째 번호 *5
처리2 : [처리1] /10
처리3 : [처리1] %10 (나눈 목의 나머지값)
처리4 : (첫번째번호*1) + (두번째번호*3) + (세번째번호*7) + (네번째번호*1) + (다섯번째번호*3)
   + (여섯번째번호*7) + (일곱번째번호*1) + (여덟번째번호*3) + (열번째번호*1) + [처리2] + [처리3]
처리5 : [처리4]에서 구해진 결과값을 10으로 나누어 나머지가 0이면 사업자 등록번호가 맞습니다.





----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function sa_check() {

var num = (frm1.num1.value + frm1.num2.value + frm1.num3.value);



if (num.length < 1) {  /* 아무것도 입력하지 않으면 에러 */
  alert("사업자 번호를 입력하세요.");
  frm1.num1.focus();
  return false;
}



if (isNaN(num)) {  /* 숫자가 아니면 에러 */
  alert("숫자만 입력하세요");
  frm1.num1.focus();
  return false;
}



var w1, w2, w3, wt;  /* 사업자번호 공식의 시작↓ */



w1 = num.charAt(8) *5;
w2 = parseInt((w1/10), 10);  /* 소수부분을 제거 */
w3 = w1 %10;



wt = num.charAt(0) *1 + num.charAt(1) *3 + num.charAt(2) *7;
wt += num.charAt(3) *1 + num.charAt(4) *3 + num.charAt(5) *7;
wt += num.charAt(6) *1 + num.charAt(7) *3 + num.charAt(9) *1;
wt += (w2 + w3);



if (!(wt %10)) {  /* 0은 false, 이외 숫자는 true입니다. !는 not을 의미합니다. */
  return true;
}
else {
  alert("규칙에 맞지 않는 사업자 등록번호입니다.");
  frm1.num1.focus();
  return false;
}

return true;
}



-->
</script>



<body onload="frm1.myname.focus()">
<form name="frm1" onsubmit="return sa_check()">
<table border=1 bordercolor="#cc9999" cellpadding=3 cellspacing=3>



<tr>
<td width=120 bgcolor="#ccaaaa" align="center">대표자</td>
<td width=150 bgcolor="#eeccbb" align="center">
  <input type="text" name="myname" size=10 maxlength=10>
</td>
</tr>
<tr>
<td bgcolor="#ccaaaa" align="center">사업자 등록번호</td>
<td bgcolor="#eeccbb" align="center">
  <input type="text" name="num1" size=3 maxlength=3>-
  <input type="text" name="num2" size=2 maxlength=2>-
  <input type="text" name="num3" size=5 maxlength=5>
</td>
</tr>
<tr>
<td colspan=2 align="center">
  <input type="submit" value=" 확인 ">
</td>
</tr>



</table>
</form>
</body>
</html>

Posted by SB패밀리

문서로딩시간 확인하기

secTime_a변수를 이용하여 최초 시간을 저장한 후 secTime_b변수를 이용하여 html문서를 읽은 후의 시간을 저장합니다. 그런 다음 secTime_b에서 secTime_a로 빼주면 로딩시간을 구할 수 있습니다.





----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



var fromTime = new Date();
var secTime_a = fromTime.getTime();



function loading_time() {
var toTime = new Date();
var secTime_b = toTime.getTime();
var secs = (secTime_b - secTime_a) / 1000;



frm1.times1.value = secs + "초";
}



-->
</script>



<body onload="loading_time()">

<form name="frm1">
문장을 읽어오는 데 걸리는 시간 : 
<input type="text" name="times1" size=15>
</form>

</body>
</html>

Posted by SB패밀리

거치식/적립식 복리계산기



거치식/적립식 복리계산기를

 

웹 페이지로 만들었습니다.



복리계산기.zip


팁...


72법칙이라고 아시죠?

복리와 투자수익에 관련된 것으로 자주 나오는 법칙입니다.

알아두면 좋겠죠?


72법칙이라고 하면 복리로 현재 자신이 가지고 있는 자산이 두 배로 늘어나는데 걸리는 시간

또는 일정 기간 내에 원금을 두 배로 늘리는데 얼마의 수익률이 필요한지를 알려주는 법칙입니다.


소요되는 기간을 계산하면


72 ÷ 수익률(%) = 기간(년)

ex) 5% 수익률로 원금을 두 배 늘리는데 필요한 기간은

72 ÷ 5 = 14.4년


필요한 수익률 계산


72 ÷ 기간(년) = 수익률(%)

ex) 10년 뒤에 원금을 두 배로 만들려면 

72 ÷ 10 = 7.2%







Posted by SB패밀리

페이지 top으로 이동하는 자바스크립트 소스


압축파일에 포함되어 있음.






javascript 소백촌닭_top버튼구현.zip


쌈꼬쪼려 소백촌닭

Posted by SB패밀리

박스 생성하기



- top : 상단의 좌표를 설정합니다.
- left : 좌측의 좌표를 설정합니다.
- height : 해당내용의 높이를 설정합니다.
- width : 해당내용의 너비를 설정합니다.

- overflow : 내용이 박스를 벗어날 경우 표시방법을 설정합니다.
-- visible : 모든 내용을 볼 수 있도록 박스크기를 조절합니다.
-- hidden : 벗어나는 내용은 표시하지 않습니다.
-- scroll : 스크롤바가 생성되어 벗어나는 내용을 볼 수 있습니다.





----------------------------------------------------------------------------------------



<html>
<head>



<style type="text/css">
<!--



p {
border : 2px #808060 dashed;
background-color : #d0e0f0;
}



p.overflow1 {
position : absolute;
top : 20px;
left : 10px;
height : 100px;
width : 120px;
overflow : hidden;
}



p.overflow2 {
position : absolute;
top : 20px;
left : 140px;
height : 100px;
width : 120px;
overflow : visible;
}



p.overflow3 {
position : absolute;
top : 20px;
left : 270px;
height : 100px;
width : 120px;
overflow : scroll;
}



-->
</style>



</head>
<body>



<p class="overflow1">
당신은 오늘 무엇을 찾고 있습니까?<br>
당신이 오늘 찾은 것은 무엇입니까?<br><br>
이와 같이 css는<br>
원하는 위치에 미니윈도우를 띄울 수 있습니다.
</p>
<p class="overflow2">
당신은 오늘 무엇을 찾고 있습니까?<br>
당신이 오늘 찾은 것은 무엇입니까?<br><br>
이와 같이 css는<br>
원하는 위치에 미니윈도우를 띄울 수 있습니다.
</p>
<p class="overflow3">
당신은 오늘 무엇을 찾고 있습니까?<br>
당신이 오늘 찾은 것은 무엇입니까?<br><br>
이와 같이 css는<br>
원하는 위치에 미니윈도우를 띄울 수 있습니다.
</p>



</body>
</html>

Posted by SB패밀리


자바스크립트 소스 모듈 라이브러리





* 입력값이 숫자인지를 확인한다. (' '까지 괜찮음)

* param : sVal 입력스트링 

* return : Boolean True이면 숫자값 

function isNumberSpace(sVal)



* sVal 값이 숫자인지를 확인한다.('.'까지 괜찮음)

* param : sVal 입력스트링

* return : Boolean  True이면 숫자값

function isNumberSpace(sVal)



* 입력값의 앞에 정해진 자리수만큼 0을 채운다.  

* param : sVal 입력스트링, iSize

* return : String

function fillZero(sVal, iSize) 




* 길이가1인 경우 앞에 "0"을 붙인다.

* param : sVal 입력스트링

* return : String  "0"값을 포함하는 값

function addZero(sVal)




* 날짜 여부를 확인한다.(월일 or 년월 or 년월일)

* param : sYmd 입력스트링(MMDD or YYYYMM or YYYYMMDD)

* return : Boolean true이면 날짜 범위임

* 수정   : 월이나 일에 00 입력시 스크립트 에러. trimZero 부분을 function isDate(sYmd)



* 날짜 여부를 확인한다.(년월일)

* param : sYmd 입력스트링(YYYYMMDD)

* return : Boolean true이면 날짜 범위임

function isDateYMD(sYmd)




* 날짜 여부를 확인한다.(월일)

* param : sMD 입력스트링(MMDD)

* return : Boolean true이면 날짜 범위임

function isDateMD(sMD)



* 날짜 여부를 확인한다.(년월)

* param : sYM 입력스트링(YYYYMM)

* return : Boolean true이면 날짜 범위임

function isDateYM(sYM)



* 년월을 입력받아 마지막 일를 반환한다(년월)

* param : sYM 입력스트링(YYYYMM)

* return : String 해당월의 마지막날

function lastDay(sYM)



* 대소문자를 포함한 영문자인지 확인한다.

* param : sVal 입력문자열

* return : Boolean true이면 알파벳

function isAlpha(sVal)



* 영문자와 숫자 구성된 문자열인지 확인

* param : sVal 입력문자열

* return : Boolean true이면 영문자,숫자로 구성된 문자열

function isAlphaNumeric(sVal)



* 문자열의 길이를 return (한글:2자)

* param : sVal 입력문자열

* return : int 입력문자열의 길이

function strLength(sVal)




* 문자열 길이 체크

* param : str 필드객체, field 필드명

* return : boolean 

function chkStrLength(str,field) 




* 한글이지 여부 체크

* param : sVal 입력문자열

* return : Boolean true이면 한글

function isHangul(sVal)




* 입력받은 날짜로부터 몇일 후의 날짜를 반환하기

* param : ObjDate객체, 일수, 결과Data객체

* return : 

function calcDate(objDate,iDay,objResultDate)



* 숫자 0으로 초기화 된 1차원 배열을 생성한다.

* param : iSize 배열 크기

* return : this 배열

function makeArray(iSize)



* 숫자 분리자(,)(.)가 있는 숫자이거나 일반숫자형태인지 검사한다.

* param : sVal

* return : Boolean 

function isMoneyNumber(sVal)



* 숫자 분리자(,)만 있는 숫자이거나 일반숫자형태인지 검사한다.

* param : sVal

* return : Boolean 

function isMoneyNumber2(sVal)



* 숫자 분리자(.)만 있는 숫자이거나 일반숫자형태인지 검사한다.

* param : sVal

* return : Boolean 

function isMoneyNumber3(sVal)



* 숫자 분리자(.)만 있는 숫자인지 검사한다.

* param : sVal

* return : Boolean 

function isMoneyNumber4(sVal){    




* 소수점이 있는 숫자이면서 정해진 자릿수에 맞는 형식인지 확인다.  

* param : sVal 입력객체, iSize1 정수자릿수, iSize2 소수자릿수

* return : boolean

function isMoneyNumber5(sVal, iSize1, iSize2) 



* 소수점 숫자표현(소수점 위의 3자리마다 "," 맞춤)

* param : val

* return : String

function getMoneyType(val)



* 부호가 있는 소수점 숫자표현(소수점 위의 3자리마다 "," 맞춤)

* param : val

* return : String

function getSignMoneyType(val)





* 콤마를 제거한 숫자형태 문자열로 반환(부호와 소수점도 없앰)

* param : val

* return : String

function getOnlyNumber(val)



* 콤마를 제거한 숫자형태 문자열로 반환(부호, 소수점 그대로)

* param : val

* return : String

  function getOnlyNumberDot(val)





* 콤마를 제거한 부호가 있는 숫자형태 문자열로 반환

* param : val

* return : String

function getOnlySignNumber(val)




  

* 앞뒤 공백을 제거한다.

* param : sVal

* return : String

function Trim(sVal)



* 앞 공백을 제거한다.

* param : sVal

* return : String

function LTrim(sVal)



* 뒤 공백을 제거한다.

* param : sVal

* return : String

function RTrim(sVal)






// DESCRIPTION  : 공백문자 제거

// 함수명       : MTrim(공백이 있는 문자열)

// Return Value : 공백이 제거된 문자열

function MTrim(sVal){



* 공백만 존재하거나 아무것도 없는지 확인한다.

* param : sVal

* return : boolean (true이면 공백이나 Empty이다)

function isEmpty(sVal){



* 현재 컨트롤과 MaxLength 받아서 MaxLength 되면 

   다음 컨트롤로 이동

* param : objCurrent, objNext

* return : 

function focusMove(objCurrent, objNext)



* 현재 컨트롤과 MaxLength 받아서 MaxLength 되면 

   다음 컨트롤로 이동(선택)

* param : objCurrent, objNext

* return : 

function focusMoveSelect(objCurrent, objNext)



* 완료된 날짜값에 대해 "/" 추가

* param : me(value)

* return : String

function calOnMask(me){



* 날짜값 "/" 제거

* param :  me(value)

* return : String "/" 제거된 날짜값

function calOffMask(me){





* 날짜값 자동 "/" 붙임.(완성된 날짜값에 대해 /붙임)

* param : 

* return : 

function cal_value2(me){



* 오늘 날짜 생성 ( "/" 붙여서 리턴)

* param : 

* return : todate

function todate() {





Spec     : 숫자입력시 3자리마다 자동으로 콤마 찍기

Argument : string

Return   : string

Example  : onkeyup="comma_value(this)"

function comma_value(sval)




Spec     : 숫자입력시 3자리마다 자동으로 콤마 찍기

Argument : string

Return   : string

Example  : onkeyup="comma_value(str)"

function formatNumbertoString(cur)



  

// 숫자만 입력 (소수점 허용, 음수 허용)

// 사용법 : onKeyPress = onlyNum();

function onlyNum()



// 숫자만 입력 (소수점 허용, 음수 불가)

// 사용법 : onKeyPress = onlyNum2();

function onlyNum2()





// 숫자만 입력 (소수점 불가, 음수 허용)

// 사용법 : onKeyPress = onlyNum3();

function onlyNum3()



// 숫자만 입력 (소수점 불가, 음수 불가)

// 사용법 : onKeyPress = onlyNum4();

function onlyNum4() 









* 입력완료된 숫자값에 대하여 콤마를 찍어줄때 사용

   (소수점 이하 처리 안됨)

* 콤마 형식을 사용할 경우에는 onkeyup이벤트로 사용하기 바라며,

* 다음의 펑션을 호출할때는 comma_value(me) 펑션을 호출하기 바람.

* param : value

function numOnMask(me){



* 콤마가 들어간 숫자에서 ","를 뺀다.

* param : value

function numOffMask(me){





// 입력 완료된 숫자 값에 컴마를 적용하여준다

(소수점 이하는 "," 안 붙음)

// return : String

function numOnMask2(me){ 



// 입력 완료된 숫자 값에 컴마를 적용하고 소수점 이하는 삭제한다

// return : String

function numOnMask3(me){ //단순히 값에 컴마를 적용할때 사용



* 입력값을 소수점 이하 몇 자리까지 보여줄지 정한다.  

* 소수점 이하 자리수가 입력된 값보다 작으면 0으로 채운다.

* param : sVal 입력스트링, iSize 소수자릿수

* return : String

function numOnMask4(sVal,iSize) 



* 입력값에 마스킹을 적용한다.

   (소수점 이하와 부호를 삭제하고 콤마추가)

* param : sVal 입력스트링

* return : String

function numOnMask5(sVal) 




* 입력값에 마스킹을 적용한다.

   (부호를 삭제하고 콤마추가. 소수점은 그대로 둠)

* param : sVal 입력스트링

* return : String

function numOnMask6(sVal) 





* 숫자 외의 값이 입력되어있으면 false 리턴

* param : sval (object)

* return :

function onlyNumber(sval) {





* 특수문자 값이 입력되었는지 체크(특수문자가 있으면 false 리턴)

* param : sval (object)

* return :

function chkValidChar(sval) { 






*

* 윈도우 오픈1 (사용자 지정 위치생성) 

* param : wUrl                지정url

* param : wTitle        지정타이틀

* param : wTop                지정 창 높이정렬기준

* param : wLeft   지정 창 왼쪽정렬기준

* param : wWidth        창넓이

* param : wHeight        창높이

* param : wSco                스크롤바 생성유무, 1:생성 0:비생성

function win_open(wUrl,wTitle,wTop,wLeft,wWidth,wHeight,wSco)  



*

* 윈도우 오픈2 (무조건 가운데 생성)

* param : wUrl                지정url

* param : wTitle        지정타이틀

* param : wWidth        창넓이

* param : wHeight        창높이

* param : wSco                스크롤바 생성유무, 1:생성 0:비생성

function win_open2(wUrl,wTitle,wWidth,wHeight,wSco) 



*

* 윈도우 오픈3 (무조건 전체 생성)

* param : wUrl                지정url

* param : wTitle        지정타이틀

* param : wWidth        창넓이

* param : wHeight        창높이

* param : wSco                스크롤바 생성유무, 1:생성 0:비생성

function win_open3(wUrl,wTitle) 








/**

* 두 날짜에 며칠 차이나는지 구함

* from_val이 to_val보다 크면 -붙여서 리턴

*/

function getDayInterval(from_val,to_val) 



JCommon.zip


Posted by SB패밀리





입력양식에서 포커스 자동이동하기



- onkeyup : 키를 눌렀다 떼면 이벤트를 호출합니다.
- onkeypress : 키를 누르면 이벤트를 호출합니다.
- returnValue : 이벤트 핸들러의 처리상태를 설정합니다.



* 이벤트 핸들러
onkeypress = "post_num()"
예를 들어 위와 같이 "키를 누르면(onkeypress)를 함수(post_num())를 호출한다"는 부분에서 "키를 누르면(onkeypress)"와 같은 조건부분.





----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function post_num() {
/* ASCII code값  '0'=48, '1'=49, '2'=50, ... '9'=57 */
if ((event.keyCode<48) || (event.keyCode>57))
  event.returnValue=false;
}



function js_tab_order(arg, nextname, len) {
if (arg.value.length == len) {
  nextname.focus()
  return;
}
}



-->
</script>



<body onload="frm1.post1.focus()">
<form name="frm1">
<table border=1 cellpadding=1 cellspacing=2 bordercolor="#aaccdd">


<tr>
  <td width=70 bgcolor="#aaddff" align="center">우편번호</td>
  <td width=100 bgcolor="#ddeeff" align="center">
  <input type="text" name="post1" maxlength=3 size=3
   onkeyup="js_tab_order(this, frm1.post2, 3)"
   onkeypress="post_num()">
-
  <input type="text" name="post2" maxlength=3 size=3
   onkeyup="js_tab_order(this, frm1.post1, 3)"
   onkeypress="post_num()">
  </td>
  <td width=230 bgcolor="#ddeeff" align="center">세 글자를 치면 자동으로 이동합니다.</td>
</tr>
</table>
</form>
</body>



</html>

Posted by SB패밀리


[펌] ActiveX에서 javascript 함수 호출방법


출처 : http://k.80port.net/board/view.php?id=techboard&page=5&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=140

void CallScript()

{
    HRESULT hr;
    IWebBrowser2 * pparent=NULL;
    pparent = (IWebBrowser2*) GetIWebPointer();
    LPDISPATCH lpDispatch = NULL;


    hr = pparent->get_Document(&lpDispatch);
    if (!SUCCEEDED(hr))
    {
        AfxMessageBox("error get document");
        lpDispatch->Release();
        return;
    }

    IHTMLDocument2 *m_pDoc2;
    hr = lpDispatch->QueryInterface(IID_IHTMLDocument2, (void**) &m_pDoc2);
    if (!SUCCEEDED(hr))
    {
        AfxMessageBox("error get document interface");
        m_pDoc2->Release();
        return;
    }
   
    CComQIPtr< IHTMLDocument > pDoc( m_pDoc2 );

    //
    // 스크립트 엔진의 디스패치 를 얻는다.
    //

    CComPtr< IDispatch > pDisp;
    hr = pDoc->get_Script( &pDisp );

    //
    // 스크립트 엔진디스패치에서 주어진 함수를 찾는다. 즉 dispid를 세트.
    //

    OLECHAR FAR* szFunctionName = L"EndUpload";        // 호출할 Javascript 명
    DISPID dispid;

    hr = pDisp->GetIDsOfNames( IID_NULL, &szFunctionName, 1,
                              LOCALE_SYSTEM_DEFAULT, &dispid);

    //
    // Invoke하기 위한 파라미터 세트.
    //

    DISPPARAMS dispParams;
    dispParams.rgvarg = NULL;
    dispParams.rgdispidNamedArgs = NULL;
    dispParams.cArgs = 0;
    dispParams.cNamedArgs = 0;

    hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
                       DISPATCH_METHOD, &dispParams, NULL, NULL, NULL);
 }

 

방법 2

void CallScript()
{
    LPOLECLIENTSITE pIClientSite;
    IDispatch* pIHTMLDocument = NULL;
    IHTMLDocument2* pDoc = NULL;
    IServiceProvider* pISP = NULL;

    CComPtr< IDispatch > pDisp;

    try
    {
        pIClientSite = GetClientSite();
       
        hr = pIClientSite->QueryInterface(IID_IServiceProvider, (void**)&pISP);
        if (hr != S_OK) throw 0;
       
        hr = pISP->QueryService(SID_SContainerDispatch, IID_IDispatch, (void **)&pIHTMLDocument);
        if (hr != S_OK) throw 0;

        hr = pIHTMLDocument->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);
        if (hr != S_OK) throw 0;
       
        hr = pDoc->get_Script( &pDisp );
        if (hr != S_OK) throw 0;
       
        OLECHAR FAR* szFunctionName = L"EndUpload";        // 호출할 Javascript 명
       
        DISPID dispid;
       
        hr = pDisp->GetIDsOfNames( IID_NULL, &szFunctionName, 1,  LOCALE_SYSTEM_DEFAULT, &dispid);
        if (hr != S_OK) throw 0;
       
        DISPPARAMS dispParams;
        dispParams.rgvarg = NULL;
        dispParams.rgdispidNamedArgs = NULL;
        dispParams.cArgs = 0;
        dispParams.cNamedArgs = 0;
       
        hr = pDisp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispParams, NULL, NULL, NULL);
        if (hr != S_OK) throw 0;

    }
    catch (...)
    {
         
    }

    if(pDoc) pDoc->Release();   
    if(pIHTMLDocument) pIHTMLDocument->Release();   
    if(pISP) pISP->Release();   
    if(pDisp) pDisp->Release();
//    if(pIClientSite) pIClientSite->Release();
}
 

Posted by SB패밀리

WEB의 HTML, 자바스크립트로 Get 방식으로 한글 문자열을 넘겨줄 때 인코딩 문제를 해결해 봅니다.
asp.net 소스로 구현되어있습니다.

ASP.NET에서 GET방식을 이용해서 넘겨준 한글 문자열을 Request로 받을 때,
인코딩 문제로 한글이 깨져서 보입니다.

그럴때는 한글 문자열을 인코딩해서 보내고 받는 방법을 사용해야 합니다.
Server Script(서버 스크립트)를 사용해서 보낼 때 HttpUtility.UrlEncode(string) 메소드를 이용하시면 되고,
Javascript(자바스크립트)에서 바로 보낼 때 사용하시려면 escape(string) 함수를 이용하시면 됩니다.

[Server Script]

Response.Redirect("movepage.aspx?name=" + HttpUtility.UrlEncode("홍길동"))

[Javascript]

document.location.href = "movepage.aspx?name=" + escape("배철수");

그 외 ServerUtilty.UrlEncode, UrlHtmlEncode 등의 함수도 참고하십시오.
쌈꼬쪼려 소백촌닭

Posted by SB패밀리

자바스크립트 개발에서 자식창에서 부모창이 갖고 있는 이벤트를 실행하는 방법입니다.

-----------------------------------

자식창에 있는 값을 부모창에 바로 반영하고 싶을 경우
보통 스트립트로 자식창의 값을 부모창에 넘긴다음
부모창의 변경된 내용을 submit시킴으로써 일괄적으로 처리합니다.

하지만 가끔 자식창에서 부모창으로 값을 넘기면서 바로 DB처리를 해야 할 경우가 있을지도 모릅니다. 그럴때 이용하는 방법입니다.

다음은 자식창에서 입력한 텍스트값을 부모창의 링크버튼 이벤트를 이용하여
부모창의 리스트박스에 추가하는 소스로 두가지 방법을 사용해서 만들어 보았습니다.

자세한 내용은 첨부한 소스코드를 참고하세요.

 

--- 아래는 팝업페이지의 소스코드 일부입니다..

 

  <script language="javascript">
  <!--
   // __doPostBack에 인지값을 직접 넘기는 방법
   function ListBoxAdd1()
   {
    var strValue = document.all["txtValue"].value;
    opener.__doPostBack('lnkEvent1', strValue);
   }
   
   // 부모창의 hidden input 으로 넘겨서 받는 방법
   function ListBoxAdd2()
   {
    opener.document.all["hidValue"].value = document.all["txtValue"].value;
    opener.__doPostBack('lnkEvent2', '');
   }
  //-->
  </script>

 

   <INPUT type="text" id="txtValue">
   <INPUT type="button" value="추가(방법1)" onclick="ListBoxAdd1();">
   <INPUT type="button" value="추가(방법2)" onclick="ListBoxAdd2();">

 

-- 아래는 부모창의 소스코드 일부입니다.

-- 자식창에서 __doPostBack을 사용하시려면 링크버튼을 이용하시는게 편리합니다.

-- 링크버튼을 사용하시면  컴파일후 부모창에  __doPostBack 스크립트 함수를 자동으로 생성해주기 때문이죠.

 

<aspx>

    <asp:ListBox id="ListBox1" runat="server">
     <asp:ListItem Value="선택하세요">값을 추가해주세요.</asp:ListItem>
    </asp:ListBox>

 

    <asp:LinkButton id="lnkEvent1" runat="server"></asp:LinkButton>
    <asp:LinkButton id="lnkEvent2" runat="server"></asp:LinkButton>
   <input type="hidden" id="hidValue">

 

<cs>

        // RaisePostBackEvent를 이용해서 인자값 받기

        string newValue = null;
        protected override void RaisePostBackEvent

                (IPostBackEventHandler sourceControl, string eventArgument)
        {
                newValue = eventArgument;
                base.RaisePostBackEvent (sourceControl, eventArgument);
        }
        private void lnkEvent1_Click(object sender, System.EventArgs e)
        {
                if(newValue != null)
                         ListBox1.Items.Add(newValue );
        }

 

        // hidden값에 인자값을 넣어서 받기

        private void lnkEvent2_Click(object sender, System.EventArgs e)
        {
                if(Request["hidValue"] != null)
                        ListBox1.Items.Add(Request["hidValue"]);               
        }


출처 : http://blog.naver.com/tear230/100012963979

Posted by SB패밀리

function f_goEnter() {
   if ( event.keyCode == 13 ) {
    f_submit();
   }
  }
Posted by SB패밀리

ASP.NET 2.0에서의 Javascript

ASP.NET2.0에서는 Javascript를 다루기 위해 ASP.NET1.1때 보다 많은 기능을 제공하고 있습니다. Javascript의 처리 방법이 이전 버전 보다 개선 되었으며 보다 쉽게 사용할 수 있습니다..

1. Focus

페이지 로드 시 웹 페이지의 특정 컨트롤에 포커스를 지정해 주기 위해 기존에는 포커스를 지정하는 스크립트를 문자열로 만들어 놓고 페이지가 로드 될 때 이 문자열을 출력하도록 처리 하거나, aspx파일에 직접 Javascript를 구현하고 body의 onLoad이벤트에서 이를 호출 하였습니다.

void Page_Load(object sender, EventArgs e)
{
    SetFocus("textBox1");
}
void SetFocus(String ctrlID
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script>");
    sb.Append("document.getElementById('" + ctrlID + "').focus();");
    sb.Append("</script>");
    Page.RegisterStartupScript("FocusScript", sb.ToString());
}

ASP.NET2.0에서는 위와 같이 많은 코드를 단 한 줄 또는 하나의 속성 만으로 해결 할 수 있는 방법을 제공합니다. Page개체의 SetFocus매서드 또는 포커스를 지정할 컨트롤의 Focus매서드를 통하여 간단히 해당하는 컨트롤에 포커스를 지정 해 줄 수 있습니다.

void Page_Load(object sender, EventArgs e)
{
    Page.SetFocus("textBox1");
    //또는
    textBox1.Focus();
}

이 보다 더 간단한 방법도 있습니다. aspx파일 내의 form태그에 defaultfocus라는 속성이 있는데 이 속성에 해당 컨트롤의 id만 입력하면 해당 컨트롤에 포커스가 지정됩니다.

<form defaultfocus="textBox1" id="form2" runat="server">
    <asp:TextBox ID="textBox1" runat="server"></asp:TextBox>
    <asp:TextBox ID="textBox2" runat="server"></asp:TextBox>
</form>

상당히 간단한 기능이지만 유용하게 사용할 수 있는 기능입니다. 이 간단한 포커스지정이라는 기능을 사용하기 위해 기존에는 첫 번째 예제와 같이 많은 양의 코드를 작성 하셨을 것입니다.

2. onClick

다음은 상당히 빈번하게 사용되는 onClick이벤트를 ASP.NET2.0에서 보다 쉽게 사용하는 방법에 대해 알아보겠습니다.

1.1버전에서는 버튼컨트롤에 alert이나 confirm을 사용하기 위해 Attributes.Add라는 매서드를 사용하였습니다. 사용하기에 그다지 불편하지는 않지만 이 또한 2.0에서는 보다 간결하게 사용할 수 있습니다.

btn1.Attributes.Add("onclick", "alert('클릭했습니다.')");
btn2.Attributes.Add("onclick", "return confirm('삭제하시겠습니까?')");

ASP.NET2.0에서는 새로 등장한 OnClientClick이라는 속성이 있습니다. ASP.NET에서 OnClick속성은 서버의 클릭이벤트에 대한 속성입니다. 클라이언트에 대한 속성은 존재하지 않기 때문에 어쩔 수 없이 Attributes.Add를 사용할 수 밖에 없었습니다. 하지만 2.0부터 지원하는 OnClientClick속성에 script 또는 Function을 넣어 주시면 서버이벤트가 일어나기 전에 클라이언트 이벤트가 먼저 발생하게 됩니다. 상당히 직관적이며 간결하지 않습니까?

<form id="form1" runat="server">
    <asp:Button ID="btn1" runat="server" OnClientClick="alert('클릭했습니다.')" />
    <asp:Button ID="btn2" runat="server" OnClientClick="return confirm('삭제하시겠습니까?')" />
</form>

OnClientClick속성을 지정하여 ClientScript를 처리 하는 것은 DataGrid나 GridView와 같은 컨트롤에서 보다 편리하게 사용될 수 있습니다. 아래의 코드를 보시면 해당 Row을 삭제하기 전 Confrim창을 띄우기 위해 RowType이 DataRow인지를 검사하고 버튼컨트롤을 FindControl로 찾은 다음 그 컨트롤에 Attributes.Add를 이용하여 스크립트를 지정 해 주고 있습니다. 많이 사용하던 코드라 그다지 어렵지는 않지만 ASP.NET2.0에서는 상당히 간결하게 이벤트 처리를 할 수 있습니다.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Button btn = (Button)e.Row.FindControl("BtnDel");
        btn.Attributes.Add("onclick", "return confirm('이전버전:삭제하시겠습니까?')");
    }
}

일반적인 GridView컨트롤 내의 Button컨트롤에 OnClientClick속성을 추가하는 것 만으로도 위의 많은 코드를 대체 할 수 있습니다.  정말 간단하고 유용한 기능이 아닐 수 없습니다.^^

<asp:GridView ID="GridView1" runat="server">
    <Columns>
        <asp:BoundField DataField="IDX" HeaderText="IDX" ReadOnly="True" SortExpression="IDX" />
        <asp:TemplateField HeaderText="삭제">
            <ItemTemplate>
                <asp:Button ID="btnDel" runat="server" CommandName="del" Text="삭제" OnClientClick="return confirm('삭제하시겠습니까?')" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

3. 포스트백 시 스크롤 바의 위치 유지

다음은 스크롤 바의 위치를 PostBack시 유지할 수 있게 하는 강력한(?) 기능을 소개하겠습니다. MaintainScrollPositionOnPostback속성을 true로 설정 해 주면 끝입니다. 정말 간단합니다. 하지만 1.1에서 이를 구현하기에는 그리 쉽지는 않습니다. 쉬운 분들도 계시겠지만.. 저는 어려웠습니다. ㅡ.ㅡ;;

<%@ Page Language="C#"MaintainScrollPositionOnPostback="true" %>

4. 서버측에서 클라이언트 스크립트의 호출 및 등록

비하인드 코드에서 스크립트를 호출하기 위해 이전 버전에서는 Page.Register...과 같이 사용했었습니다. ASP.NET2.0에서는 ClientScriptManager의 인스턴스인 Page.ClientScript라는 개체를 사용합니다.


protected void btn1_Click(object sender, EventArgs e)
{
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.Append("<script type='text/javascript'>alert('스크립트 호출');</script>");
    Page.RegisterClientScriptBlock("alert", sb.ToString());
}

ClientScriptManager에서도 RegisterClientScriptBlock, RegisterStartupScript는 그대로 사용 가능합니다.

RegisterClientScriptBlock(Type type, string key, string script, , bool addScriptTags);
RegisterClientStartupScript(Type type, string key, string script, , bool addScriptTags);

달라진 점은 추가된 매개변수인데, 등록할 클라이언트 스크립트의 형식을 지정하는 type, "<script>...</script>"태그를 추가할지 여부를 묻는 addScriptTags가 있습니다. type은 내부적으로 key와 함께 스크립트를 구분 지어주는 ScriptKey역할을 하게 됩니다. 예를 들어 연속해서 두 번 스크립트를 등록 할 때 typekey가 동일 할 경우 먼저 등록된 스크립트 만이 실행 되게 됩니다.  addScriptTags는 비하인드 코드가 아닌 aspx페이지상에 코드를 직접 작성할 경우 서버 코드 또한 <script runat=server >태그 내에 작성이 되므로 </script>코드가 나타나면 서버코드가 끝나게 되는 문제가 발생합니다. 그렇게 될 경우 </script>태그 이후의 서버 코드들은 서버 코드로 인식되지 못하기 때문에 오류가 발생하게 됩니다. 이때 addScriptTags를 true로 설정하면 아무 문제 없이 </script>태그를 사용할 수 있습니다.

ClientScript.RegisterClientScriptBlock(this.GetType(),"alert", sb.ToString());

RegisterClientScriptInclude는 비하인드 코드 상에서 <script src="./JScript.js" type="text/javascript"></script> 코드를 페이지에 등록 시킬 수 있습니다. 이는 다음에 나올 WebResource를 사용할 경우에도 유용합니다.

ClientScript.RegisterClientScriptInclude("Msg","./JScript.js");

5. WebResource에 포함된 자바스크립트

이번에는 WebResource를 이용하여 스크립트를 삽입하고 이를 호출하는 방법에 대해 설명하도록 하겠습니다.

우선 간단히 TextBox를 상속받는 Custom Control을 만들어 보도록 하겠습니다.

  1. 웹 컨트롤 라이브러리 프로젝트를 생성합니다.
     
  2. 간단한 javascript파일을 만듭니다. 스크립트 내부에는 Msg()라는 경고 창을 보여주는 function이 있습니다.
  3. javascript파일을 포함리소스로 만듭니다.
     
  4. 기본으로 생성된 WebCustomControl1.cs파일이 System.Web.UI.WebControls.TextBox를 상속 받도록 합니다.
  5. override된 Render매서드에 Msg() function을 호출할 onClick 이벤트를 추가합니다.
  6. WebResource로 만들어진 javascrip파일을 ClientScript.RegisterClientScriptInclude를 이용하여 추가합니다. 이때 WebResource의 경로를 알아오기 위해 ClientScript.GetWebResourceUrl을 사용합니다.
[ToolboxData("<{0}:MyWebResource runat=server>")]
public class WebCustomControl1: System.Web.UI.WebControls.TextBox
{
    protected override void Render(HtmlTextWriter writer)
    {
        writer.AddAttribute("onclick", "Msg()");
        base.Render(writer);
    }
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        this.Page.ClientScript.RegisterClientScriptInclude("MSG",this.Page.ClientScript.GetWebResourceUrl(typeof(WebCustomControl1),"WebControlLibrary1.JScript.js"));
    }
}
  1. Properties시스템 폴더 안의 AssemblyInfo.cs파일에 아래와 같이 WebResourde를 등록하기 위한 코드를 삽입합니다.
  2. 프로젝트를 빌드 하면 Custom Control 생성이 완료됩니다.
[assembly:WebResource( "WebControlLibrary1.JScript.js", "text/javascript")]

이제 위에서 만든 Custom Control을 페이지에 올려놓도록 하겠습니다. 그리고 이를 실행하고 텍스트박스를 클릭하면 메세지가 뜨는 것을 확인 할 수 있습니다.

<cc1:WebCustomControl1 ID="my" runat="server"></cc1:WebCustomControl1>

여기서 html소스보기를 했을 경우 javascript파일이 WebResource.asd?......처럼 포함되어 실행되고 있는 것을 확인 할 수 있습니다. WebResource는 Javascript뿐만 아니라 Css, Image도 포함 할 수 있으며 dll로 컴파일 되기 때문에 별도의 파일을 같이 배포할 필요가 없다는 장점이 있습니다.

<script src="/WebResource.axd?d=v_tffIY......3104528602185040" type="text/javascript"></script>
<input onclick="Msg()" name="my" type="text" id="my" />

지금까지 ASP.NET2.0에서 Javascript를 컨트롤 하는 방법에 대해 알아 보았습니다. 이번 강좌에 이어 다음에는 장안의 화재인 Ajax와 관련된 ASP.NET2.0에서의 Javascript에 대해 진행하도록 하겠습니다. 이 글을 읽으시는 분들께 약간의 도움이라도 됐으면 좋겠습니다. 그럼 다음강좌에서 뵙겠습니다




출처 : http://blog.naver.com/anytimel/70018528382

- 쌈꼬쪼려 소백촌닭™ -
Posted by SB패밀리

 

/* 체크박스, 라디오버튼에 선택된값이 있을경우 선택된 값을 콤마(,)로 연결하여 반환 */
function getCheckedCode(obj, delimiter){
 selectSeq = "";
 if (delimiter==undefined){
  delimiter = ",";
 }
 if (obj.length>0){
  for (i=0; i<=obj.length-1; i++){
   if(obj[i].checked==true){
    strVal = obj[i].value;
   }else{
    strVal = " ";
   }

   if(selectSeq==""){
    selectSeq = strVal;
   }else{
    selectSeq = selectSeq + delimiter + strVal;
   }

  }
 }else{
  if(obj.checked==true){
   selectSeq = obj.value + delimiter;
  }else{
   selectSeq = delimiter;
  }
 }
 return selectSeq;
}


출처 : http://blog.naver.com/totoru0907/50016788121

- 쌈꼬쪼려 소백촌닭™ -

Posted by SB패밀리