참 오래전 이야기다..

우리집엔 XT가 있었다.
당시 티비 광고까지 했던 프로 엘리트란 녀석으로..
용도는 주로 게임..

그당시 즐겨 보면 월간 컴퓨터 잡지(컴퓨터학습->마이컴)에 실린 게임하나가 나의 관심을 끌었다.

자그마한 영문 이텔릭체로 작성된 10여페이지에 달하는 암호집..

그렇다 이것이 당시 최강의 암호로 불법복제유저들을 떨게 만들던 왕의 하사품이다.
이녀석은 글자색은 검정에 배경색이 짙은갈색이라 복사도 안되었다..

게다가 메뉴얼 전체가 암호라서 다른게임처럼 잠깐의 시간투자로는 베껴서 할수 있는 것도 아니었고..

뭐 그런 암호집을 무려 게임잡지에서 공개를 해버린것이다..
우리나라의 과거 라이센스에 관한 인식을 방증하는 사건이 아닐까..

각설하고..
공략집과 암호는 있는데 정작 게임이 내수중에 없었다..

이 게임이 내 손에 들어온건 2년여의 시간이 흐른 뒤였다..
AND

쉬우면서도 찾기 힘들었던...

         private void fileSelector_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
            {
                string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);

                FileInfo _fi = new FileInfo(files[0]);
                if (_fi.Exists)
                {
                    if (_fi.Extension.ToLower() == ".[ExtentionName]")
                    {
                        fi = _fi;
                        tbxFileName.Text = _fi.FullName;
                    }
                }
            }
        }

        private void fileSelector_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.All;
        }

AND

종종보면 다중네임스페이스를 지닌 xml개체를 보게되는데
가지고 있는 책에는 예제가 없어 구글링 하다 알게된 자료..

두가지방법중 난 후자를 선택해서 코딩했다..

Samples are bellow.

As you can see populating XmlDocument with XmlWriter.Write*() methods is much simpler.

string myNS = "http://www.xyz.space.com/land";

// Populating XmlDocument using DOM API:
XmlDocument xdoc1 = new XmlDocument();
XmlElement rootABC = xdoc1.CreateElement("rootABC", myNS);
xdoc1.AppendChild(rootABC);
XmlElement ele1 = xdoc1.CreateElement("ele1", myNS);
rootABC.AppendChild(ele1);
XmlAttribute xsd = xdoc1.CreateAttribute("xmlns", "xsd", "http://www.w3.org/2000/xmlns/");
xsd.Value = "http://www.xyz.space.com/Airschemas";
ele1.Attributes.Append(xsd);
XmlAttribute xsi = xdoc1.CreateAttribute("xmlns", "xsi", "http://www.w3.org/2000/xmlns/");
xsi.Value = "http://www.xyz.space.com/AirschemaInst";
ele1.Attributes.Append(xsi);
XmlElement ObjVal = xdoc1.CreateElement("ObjVal", myNS);
ele1.AppendChild(ObjVal);
XmlElement Name = xdoc1.CreateElement("Name", myNS);
ObjVal.AppendChild(Name);
Name.AppendChild(xdoc1.CreateTextNode("POC2"));

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter w1 = XmlWriter.Create(Console.Out, settings);

xdoc1.WriteTo(w1);
Console.WriteLine();
Console.WriteLine();

// Populating XmlDocument using XPathNavigator API:
XmlDocument xdoc2 = new XmlDocument();
XmlWriter docWriter = xdoc2.CreateNavigator().AppendChild();
docWriter.WriteStartElement("rootABC", myNS);
docWriter.WriteStartElement("ele1", myNS);
docWriter.WriteAttributeString("xmlns", "xsd", "http://www.w3.org/2000/xmlns/", "http://www.xyz.space.com/Airschemas");
docWriter.WriteAttributeString("xmlns", "xsi", "http://www.w3.org/2000/xmlns/", "http://www.xyz.space.com/AirschemaInst");
docWriter.WriteStartElement("ObjVal", myNS);
docWriter.WriteElementString("Name", myNS, "POC2");

docWriter.WriteEndElement();
docWriter.WriteEndElement();
docWriter.WriteEndElement();
docWriter.Close();

XmlWriter w2 = XmlWriter.Create(Console.Out, settings);
xdoc2.WriteTo(w2);
Console.WriteLine();
Console.WriteLine();
w2.Flush();




WebData/Sergey

출처 : http://www.bokebb.com/dev/english/1932/posts/19324822.shtml
AND

멀티 업로드소스를 뒤벼보니
플래시버전만 있는게 아니라
플렉스버전도 있었다..

이노무 플렉스버전을 플렉스없이 어케 하나 찾아보니
SDK만 설치해서 컴파일해서 사용하는 방법이 나와서 적어놓는다.

Adobe®는 Flex를 ActionScript 클래스 라이브러리로 구현했습니다. 이 클래스 라이브러리에는 구성 요소(컨테이너 및 컨트롤), 관리자 클래스, 데이터 서비스 클래스 및 기타 모든 기능을 위한 클래스가 포함되어 있습니다. 이 클래스 라이브러리와 함께 MXML 및 ActionScript 언어를 사용하여 어플리케이션을 개발할 수 있습니다

http://sir.co.kr/bbs/board.php?bo_table=pl_flex&wr_id=10&sca=%B0%AD%C1%C2

http://www.adobe.com/kr/devnet/flex/quickstart/coding_with_mxml_and_actionscript/

에효 사달랠수 없으니 일케라도 해야지..
AND

다중 업로드

WEB/ASP.NET 2008. 5. 28. 16:43
티스토리식 다중업로드를 찾다가 알게된녀석
그나마 코드 프로젝트중 제일나은듯
http://www.codeproject.com/KB/aspnet/FlashUpload.aspx

플래시를 이용한 업로드이고 화면도 깔끔에 플래시 소스도 공개..
좋아 >_<

사용자 삽입 이미지
사용자 삽입 이미지

음냐냐 그나저나 적용 가능하려나..
플래시에서 데이터 받아오기 지롤인데 ㅠ_ㅠ

*추가
라고 적고보니 이넘은 플렉스 버전이다 =.=
Flex2.0SDK받아서 수작업으로 고쳐서 사용중...
* 요건 상용
http://ajaxuploader.com/
사용자 삽입 이미지

AND

아이콘

DEVELOP/C# 2008. 5. 20. 14:52
큰아이콘과 작은아이콘..
난 이게 별개의 아이콘파일로 구성된줄 알았다... 30분전까지..

내가 이전에 쓰던 프로그램들은 멀티 아이콘을 지원 안했던거다..

괜시리 삽질만..

결국 검색해서 찾아낸넘..

http://www.gigafree.net/tool/encode/iconhenkan.html


16및 32 사이즈의 그림파일을 읽은후 멀티아이콘으로 저장

프로젝트에서 아이콘을 설정하면
아이콘크기가 자동으로 맞춰서 표현됨..
AND

하나의 모달팝업에 여러개의 취소버튼 넣기..
자바스크립트를 이용한 고스트스텝(?) ㅋㅋ
http://mattberseth.com/blog/2007/10/modalpopup_with_multiple_cance.html
AND

보통 인라인 뷰에서 정렬을 시도하면 다음과 같은 에러가 난다.

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

이럴때 인라인 뷰에서 정렬을 사용하기 위해서는 셀렉트에 TOP 100 PERCENT 를 써주면 된다.
SELECT * FROM
(
   SELECT TOP 100 PERCENT
          TEST1
        , SUM(TEST2) SUM_TEST2
     FROM #TEMP
  GROUP BY TEST1
  ORDER BY SUM(TEST2) DESC
) V


출처 : http://www.lemonee.com/tt/trackback/44
AND

System.Web.HttpResponse objResponse = System.Web.HttpContext.Current.Response;

   objResponse.ClearContent();
   objResponse.ClearHeaders();
   objResponse.ContentType = "application/vnd.msexcel";
   objResponse.AddHeader("content-disposition", "attachment; filename=SearchResults.xls");
   objResponse.AppendHeader("Content-Length", result.Length.ToString());
   objResponse.Charset = "euc-kr";
   objResponse.ContentEncoding = Encoding.GetEncoding(949);
   objResponse.Write(result);
   objResponse.Flush();
   objResponse.Close();
   objResponse.End();

예제는 엑셀 데이터를 다운로드 하는 경우이다. result string 에는 탭으로 분리된 텍스트를 넣어주면 xls파일로 다운로드 된다. 정식 엑셀 파일은 아니고 csv를 xls 확장자로 다운로드 하면 나머지는 엑셀이 알아서 한다. 푸른색으로 된 부분은 한글 코드 문제로 넣어 준것이다. 그냥 Unicode로 보내면 엑셀이 제대로 처리하지 못한다. 이유는 모르겠다.

출처 : http://www.code99.net/Default.aspx?tabid=794&EntryID=186

Exporting DataGrid to Excel

Exporting DataGrid to Excel might sound complex but it's pretty simple. Let's see how this can be done.

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.xls");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

The code given above is the complete code to export a DataGrid to an Excel file:

  • Response.AddHeader is letting ASP.NET know that we are exporting to a file which is named FileName.xls.
  • Response.ContentType denotes the type of the file being exported.
  • myDataGrid.RenderControl(htmlWrite) writes the data to the HtmlTextWriter.
  • Response.Write(stringWrite.ToString()); sends the request to the response stream.

As you can see, exporting a DataGrid to an Excel file is pretty simple.

Exporting the DataGrid to a Word file

You can also export a DataGrid to a Word file. You might ask a question that why would anyone like to do that. If you have a Word document which needs a table, then you can simply export the table from the DataGrid to the Word document. The code is similar to the above with minor changes.

Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=FileName.doc");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.word";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

Exporting a DataGrid to a Text File

Sometimes you need to export a DataGrid to a Text file. In this case you need to iterate through the DataSet and concatenate the text to a string or more precisely a StringBuilder object. Let's see how this can be done:

Collapse
Database db = DatabaseFactory.CreateDatabase();
DBCommandWrapper selectCommandWrapper = 
   db.GetStoredProcCommandWrapper("sp_GetLatestArticles");
DataSet ds = db.ExecuteDataSet(selectCommandWrapper);
StringBuilder str = new StringBuilder();

for(int i=0;i<=ds.Tables[0].Rows.Count - 1; i++)
{
  for(int j=0;j<=ds.Tables[0].Columns.Count - 1; j++)
  {
      str.Append(ds.Tables[0].Rows[i][j].ToString());
  }

  str.Append("<BR>");
}

Response.Clear();
Response.AddHeader("content-disposition", 
         "attachment;filename=FileName.txt");
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.text";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = 
              new HtmlTextWriter(stringWrite);

Response.Write(str.ToString());
Response.End();

The important thing to note is the two for loops that iterate through the DataSet and append the rows into the StringBuilder object.

Format Issue when Exporting DataGrid to Excel

I would like to thank Sonu Kapoor for helping me with the Format issue in exporting a DataGrid to Excel and Juss for providing the code.

When you export a DataGrid to Excel it loses its format. This means that maybe your DataGrid has a string field which consisted of numbers, say '002345'. But when you export the grid and see it in an Excel file you will find that the number changed to '2345'.

You can solve this problem using Cascading Style Sheets.

Code provided by Juss:

Dim strFileName, strFilePath AsString
Dim oStringWriter AsNew System.IO.StringWriter
Dim oHtmlTextWriter AsNew System.Web.UI.HtmlTextWriter(oStringWriter)
Dim objStreamWriter As StreamWriter
Dim strStyle AsString = "<style>.text { mso-number-format:\@; } </style>"
objStreamWriter = File.AppendText(strFilePath)
DataGrid1.RenderControl(oHtmlTextWriter)
objStreamWriter.WriteLine(strStyle)
objStreamWriter.WriteLine(oStringWriter.ToString())
objStreamWriter.Close()

Most of you might be thinking about that "mso-number-format" stuff in between the code. This is the style in which the column will be exported. For this reason, you need to inject the attribute into the DataGrid column for which you want to change the display format.

DataGrid1.DataBind()
Dim strStyle AsString = "<style>.text { mso-number-format:\@; } </style>"
For intTemp AsInteger = 1 To ds.Tables(0).Rows.Count - 1
   DataGrid1.Items(intTemp).Cells(0).Attributes.Add("class", "text")
Next

You can export in many formats. All you need to know is the mso-number-format:\@;. You can easily find the format by opening an Excel file and typing a number in one of the cells. Now if you want to save this number as a Social Security Pattern (xxx-xx-xxxx), right click on the cell and select a pattern that saves it as a Social Security Number. Next save the Excel file to XML format. Open the XML file in Notepad and see what style the column SSN uses. The SSN style is something like this: mso-number-format:000\-00\-0000.

Simply substitute the new style in the strStyle variable and that's it.

For a complete discussion on this issue, please visit this link.

I hope you liked the article, happy coding!

출처 : http://blog.naver.com/jjigye/30012879332

AND

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<script LANGUAGE="JavaScript">
<!--
// ------------------------- 드림위버에 기본적으로 들어간 JS -------------------------
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
window.open(theURL,winName,features);
}
//-------------------------------------------------------------------------------------

// ---------------- 팝업창 시에 사용할 함수 -------------------------------
function getCOOKIE(name){
var nameOfCOOKIE = name + "=";
var x = 0;
while ( x <= document.COOKIE.length ){
var y = (x+nameOfCOOKIE.length);
if ( document.COOKIE.substring( x, y ) == nameOfCOOKIE ){
if ( (endOfCOOKIE=document.COOKIE.indexOf( ";", y )) == -1 )
endOfCOOKIE = document.COOKIE.length;
return UNESCAPE( document.COOKIE.substring( y, endOfCOOKIE ) );
}
x = document.COOKIE.indexOf( " ", x ) + 1;
if ( x == 0 )
break;
}
return "";
}

function setCOOKIE( name, value, expiredays ){
var todayDate = new Date();
todayDate.setDate( todayDate.getDate() + expiredays );
document.COOKIE = name + "=" + escape( value ) + "; path=/; expires=" + todayDate.toGMTString() + ";"
}


// ------------------------------------- 기타 함수들 ----------------------------------------

// 메일패턴 체크
function fnc_EmailChk(str_regexp){
var check_string = true;
var check_data = new RegExp('[a-zA-Z0-9@._]');

for(i = 0; i < str_regexp.length ; i++){
check_string = check_data.test(str_regexp.substr(i,1));
if(!check_string){
break;
}
}
return check_string;
}

// ' 와 " 의 입력을 막음
function fnc_NoneWrite(e){
var keyValue = event.keyCode
if((keyValue == 34)||(keyValue == 39)) return false;
}

// 공백제거 함수
function fnc_trim(str){
return str.replace(/(^\s*)|(\s*$)/g, "");
}

// 숫자만입력 ( onKeypress='return keyCheck(event)' )
function keyCheck(e) {
var keyValue = event.keyCode
if (((keyValue >= 48) && (keyValue <= 57)) || keyValue==13 ) return true;
else return false
}

// - 음수입력
function keyCheck_minus(e) {
var keyValue = event.keyCode
if (((keyValue >= 48) && (keyValue <= 57)) || keyValue==13 || keyValue==45) return true;
else return false
}

// 콤마 넣기(정수만 해당)
function comma(val) {
val = get_number(val);
if(val.length <= 3) return val;

var loop = Math.ceil(val.length / 3);
var offset = val.length % 3;

if(offset==0) offset = 3;
var ret = val.substring(0, offset);

for(i=1;i<loop;i++) {
ret += "," + val.substring(offset, offset+3);
offset += 3;
}
return ret;
}

// 콤마 넣은 값을 특정폼의 필드에 리턴해줄때 사용
function fnc_currency(Form_name, Field_name){
form = document.forms[Form_name];
tmp_value = form.elements[Field_name].value;
form.elements[Field_name].value = comma(tmp_value);
}

// 영문대소문자, 숫자, 언더바, . 을 포함하여 입력 받음, 한글도 입력 받음
function fnc_Write_dot(e){
var keyValue = event.keyCode
if(!(((keyValue >= 48)&&(keyValue <= 57))||((keyValue >= 65)&&(keyValue <= 90))||((keyValue >= 97)&&(keyValue <= 122))||(keyValue == 46)||(keyValue == 45)||(keyValue == 95))){
return false;
}
}

// 영문대소문자, 숫자, 언더바만 입력받음, 한글도 입력 받음
function fnc_Write_string(e){
var keyValue = event.keyCode
if(!(((keyValue >= 48)&&(keyValue <= 57))||((keyValue >= 65)&&(keyValue <= 90))||((keyValue >= 97)&&(keyValue <= 122))||(keyValue == 45)||(keyValue == 95))){
return false;
}
}

function fnc_ImgExt(ImgFile){
ImgFile = ImgFile.toLowerCase();
if((ImgFile.indexOf(".gif") == -1)&&(ImgFile.indexOf(".jpg") == -1)&&(ImgFile.indexOf(".jpeg") == -1)){
return false;
}else{
return true;
}
}

// 라디오 버튼 체크
function fnc_OptChk(obj){
Optchk = false;
for(i = 0; i < obj.length; i++){
if(obj[i].checked == true){
Optchk = true; break;
}
}
return Optchk
}

function fnc_OptChk_idx(obj){
OptIdx = "";
for(i = 0; i < obj.length; i++){
if(obj[i].checked == true){
OptIdx = i; break;
}
}
return OptIdx
}

function fnc_download(file_origin, file, path, service, div, numseq){
Location.href='/common/download.php?file_origin=' + file_origin + '&file=' + file + '&path=' + path + '&service=' + service + '&div=' + div + '&numseq=' + numseq;
}


function fnc_StrChk(vString, vlength){
var chkBln = true;
if(vString.length >= vlength){
var chkStr = new RegExp('[^a-zA-Z0-9_]');
for(i = 0; i < vString.length; i++){
chkBln = !(chkStr.test(vString.substr(i,1)));
if(chkBln == false){ break; }
}
}else{
chkBln = false;
}
return chkBln;
}

function fnc_HStrChk(vString, vlength){
var chkBln = true;
if(vString.length < vlength){
chkBln = false;
}
return chkBln;
}

function fnc_EmailChk(vString, vlength){
var chkBln = true;
if((vString.length >= vlength) && (vString.indexOf("@") != -1) && (vString.indexOf(".") != -1)){
var chkStr = new RegExp('[^a-zA-Z0-9@._]');
for(i = 0; i < vString.length; i++){
chkBln = !(chkStr.test(vString.substr(i,1)));
if(chkBln == false){ break; }
}
}else{
chkBln = false;
}
return chkBln;
}

function fnc_NumChk(vString, vlength){
var chkBln = true;
if(vString.length >= vlength){
var chkStr = new RegExp('[^0-9]');
for(i = 0; i < vString.length; i++){
chkBln = !(chkStr.test(vString.substr(i,1)));
if(chkBln == false){ break; }
}
}else{
chkBln = false;
}
return chkBln;
}

function fnc_JuminNumChk(vString) {
var chkBln = true;
if(vString.length != 13){
chkBln = false;
}else{
var a= vString.substring(0, 1);
var b= vString.substring(1, 2);
var c= vString.substring(2, 3);
var d= vString.substring(3, 4);
var e= vString.substring(4, 5);
var f= vString.substring(5, 6);
var g= vString.substring(6, 7);
var h= vString.substring(7, 8);
var i= vString.substring(8, 9);
var j= vString.substring(9, 10);
var k= vString.substring(10, 11);
var l= vString.substring(11, 12);
var m= vString.substring(12, 13);

var sum = 2*a + 3*b + 4*c + 5*d + 6*e + 7*f + 8*g + 9*h + 2*i + 3*j + 4*k + 5*l;
var r1 = sum % 11;
var temp = 11*((sum-r1)/11)+11-sum;
var r2 = temp % 10;
var temp1 = temp-10*((temp-r2)/10);

if(m != temp1){
chkBln = false;
}else{
chkBln = true;
}
}
return chkBln;
}

function fnc_ComNoChk(comno) {
var chkBln = true;
if(comno.length != 10){
chkBln = false;
}
sumMod = 0;
sumMod += parseInt(comno.substring(0,1));
sumMod += parseInt(comno.substring(1,2)) * 3 % 10;
sumMod += parseInt(comno.substring(2,3)) * 7 % 10;
sumMod += parseInt(comno.substring(3,4)) * 1 % 10;
sumMod += parseInt(comno.substring(4,5)) * 3 % 10;
sumMod += parseInt(comno.substring(5,6)) * 7 % 10;
sumMod += parseInt(comno.substring(6,7)) * 1 % 10;
sumMod += parseInt(comno.substring(7,8)) * 3 % 10;
sumMod += Math.floor(parseInt(comno.substring(8,9)) * 5 / 10);
sumMod += parseInt(comno.substring(8,9)) * 5 % 10;
sumMod += parseInt(comno.substring(9,10));

if (sumMod % 10 != 0) {
chkBln = false;
}
return chkBln;
}


// ------ 특수문자 예외처리 -----------
function fnc_NotKeywordChk(vString){
blnChk = false;
if(vString.indexOf("~") != -1 || vString.indexOf("`") != -1 || vString.indexOf("!") != -1 ||
vString.indexOf("@") != -1 || vString.indexOf("#") != -1 || vString.indexOf("$") != -1 ||
vString.indexOf("%") != -1 || vString.indexOf("^") != -1 || vString.indexOf("&") != -1 ||
vString.indexOf("*") != -1 || vString.indexOf("(") != -1 || vString.indexOf(")") != -1 ||
vString.indexOf("-") != -1 || vString.indexOf("_") != -1 || vString.indexOf("=") != -1 ||
vString.indexOf("+") != -1 || vString.indexOf("[") != -1 || vString.indexOf("{") != -1 ||
vString.indexOf("]") != -1 || vString.indexOf("}") != -1 || vString.indexOf("\\") != -1 ||
vString.indexOf("|") != -1 || vString.indexOf(";") != -1 || vString.indexOf(":") != -1 ||
vString.indexOf("'") != -1 || vString.indexOf('"') != -1 || vString.indexOf(",") != -1 ||
vString.indexOf("<") != -1 || vString.indexOf(".") != -1 || vString.indexOf(">") != -1 ||
vString.indexOf("/") != -1 || vString.indexOf("?") != -1 )
{
blnChk = false;
}
else
{
blnChk = true;
}
return blnChk;
}

//---------- 텍스트 바이트 체크 (폼이름, 체크필드명, 체크된바이트 리턴필드명) ---------------- //

function fnc_CheckByte(form,checkField,returnField){
checkCount = 0;
checkText = document.forms[form].elements[checkField].value;
checkTmp = checkText.length;

for(k = 0; k < checkTmp; k++){
checkOne = checkText.charAt(k);
if(escape(checkOne).length > 4){
checkCount += 2;
}else{
// 엔터값이 들어왔을때 값(rn)이 두번실행되는데 첫번째 값(n)이 들어왔을때 tcount를 증가시키지 않는다.
if(escape(checkOne) == '%0A') {
}else{
checkCount++;
}
}
}

document.forms[form].elements[returnField].value = checkCount;
}
//-->
</script>
</BODY>
</HTML>


출처 : 다 되게 되어있다! 용호리눅스

AND

  --- HTMLElement 객체의 프로퍼티 ---

 all              ⓔ     특정한 HTMLElement 객체에 포함된 모든 태그들의 컬렉션
 align           ⓔ    Block 효과를 가지는 태그의 align 속성을 가리키는 객체의 속성
 className         스타일시트의 Selector로 사용하기 위해 태그에 사용된 class 속성의 값
 children      ⓔ   특정한 태그에 1차적으로 포함되어 있는 HTMLElement 객체들의 컬렉션


 clientHeight         객체에 적용된 여백과 테두리, 스크룰바를 제외한 높이
 clientWidth   ⓔ    객체에 적용된 여백과 테두리, 스크룰바를 제외한 너비
 clientLeft     ⓔ    HTMLElement 객체의 기준위치로부터의 왼쪽 간격(테두리선 두께)
 clientTop    ⓔ    HTMLElement 객체의 기준위치로부터의 위쪽 간격(테두리선 두께)
 dir                      글씨가 오른쪽 혹은 왼쪽부터 써지도록 설정 ("ltr" 혹은 "rtl")


 disabled             HTMLElement 객체의 상태를 사용할 수 없도록 할 것인지의 여부설정
 id                       HTMLElement 객체의 스타일을 적용하기 위해 태그에 사용된 ID 속성
 innerHTML          종료태그를 가진 태그의 마크영역에 포함된 태그를 포함한 문자열
 innerText     ⓔ     종료태그를 가진 태그의 마크영역에 포함된 태그를 제외한 문자열
 outerText     ⓔ     해당 요소에 포함된 태그를 제외하는 모든 문자열
 outerHTML   ⓔ     해당 요소의 시작과 끝태그까지를 포함하는 전체 문자열


 style                  태그에 사용된 STYLE 속성으로서 객체로 취급된다.
 tagName            HTMLElement 객체를 만들어낸 태그의 이름(예 H1, input, div 등)
 this                    해당 html 태그에서 자기 자신의 HTMLElement 객체를 참조
 title                    태그의 title 속성으로 마우스포인터가 왔을 때 나타낼 설명 문자열


 sourceIndex    ⓔ   HTMLElement 객체를 document.all[index]로 접근할 때의 index 값
 parentElement ⓔ   HTMLElement 객체를 포함하고 있는 부모객체를 참조한다.
 offsetParent           HTMLElement 객체의 기준 위치를 결정하는 부모 HTMLElement 객체
 offsetHeight           HTMLElement 객체와 그 내용물을 포함하는 전체 높이
 offsetWidth            HTMLElement 객체와 그 내용물을 포함하는 전체 너비
 offsetLeft              HTMLElement 객체의 왼쪽 좌표로서 부모객체에 상대적인 x 축 기준점
 offsetTop             HTMLElement 객체와 위쪽 좌표로서 부모객체에 상대적인 y 축 기준점
 readyState    ⓔ    HTMLElement 객체의 메모리 로딩상태를 표현(uninitialized ~ complete)


 scrollHeight   ⓔ    스크롤되는 HTMLElement 객체의 스크롤된 부문을 포함하는 전체 높이
 scrollWidth    ⓔ    스크롤되는 HTMLElement 객체의 스크롤된 부문을 포함하는 전체 너비
 scrollLeft       ⓔ    스크롤되는 HTMLElement 객체의 왼쪽으로 스크롤된 부문의 픽셀값
 scrollTop      ⓔ    스크롤되는 HTMLElement 객체의 위쪽으로 스크롤된 부문의 픽셀값


           ※  ⓔ 는 Explorer 에서만 지원되는 컬렉션.

사용자 삽입 이미지


        ----  Collection 의 종류------

 

 all            ⓔ     HTML 문서에 포함된 모든 태그를 배열로 접근하는 컬렉션
 applets           <applet> 태그의 HTMLElment 객체 컬렉션
 anchors          <a>  태그에 name 속성이 사용된 Anchor 객체의 컬렉션


 cells        ⓔ     <table> 에 포함된 <td><th> 태그의 HTMLElement 컬렉션
 children    ⓔ     html 문서에서 태그들의 포함관계에서 자식 객체의 컬렉션
 childNodes       DOM 의 특정노드에 포함된 자식 노들의 노드리스트 컬렉션
 elements         <Form>  태그의 내부에 사용되는는 입력양식 객체들의 컬렉션


 embeds           <embed> 태그의 HTMLElement 객체 컬렉션
 images            <img>   태그의 HTMLElement 객체 컬렉션
 filters      ⓔ      특정      태그의 style 속성에 사용한 필터객체의 컬렉션
 
frames             <frame> 혹은 <iframe> 태그로 정의되는 프레임 컬렉션
 links                <a href=""> <area href="">태그로 정의되는 링크 컬렉션


 options          <select> 태그에 포함되는 <option> 태그의 컬렉션
 plugins          <embed>  태그로 만들어지는 멀티미디어 파일의 컬렉션
 scripts            <script> 태그로 만들어지는 스크립터 공간의 컬렉션
 stylesheets      <LINK> <STYLE> 태그로 만들어지는 스타일시트 컬렉션             
            
      ※  ⓔ 는 Explorer 에서만 지원되는 컬렉션.


  all 컬렉션.
    <html>
       <head><title> 제목 </title> </head>
        <body>
            <img src="../aa.gif">
        </body>
     </html>

  document.all[0]= <html>  document.all[1]= <head>
   document.all[2]= <title> document.all[3]= <body>
   document.all[4]= <img>
  
    ID 속성을 사용하면 Document 객체의 all 컬렉션을 이용해서
    특정 HTMLElement 객체을 참조할  수 있다.

    document.all[index]  document.all["name"]
     document.all("name") document.all.name     document.all["ID"]




                    --  Event 의 종류 --

 

  Abort            이미지를 읽어 들이는 일이 도중에 중단될 때 발생하는 이벤트
 BeforeCopy   글씨를 복사하기 위해서 오른쪽 마우스나 CTR+C를 누를 때 발생하는 이벤트
 BeforeCut      글씨를 잘라내기 위해서 오른쪽 마우스나 CTR+x를 누를 때 발생하는 이벤트
 beforePaste   글씨를 붙여넣기 위해서 오른쪽 마우스나 CTR+v를 누를 때 발생하는 이벤트
 
 AfterPrint         브라우저에서 인쇄 버튼을 클릭하면 인쇄영역이 활성화된 후에 발생
 BeforePrint      브라우저에서 인쇄 버튼을 클릭하면 인쇄영역이 활성화되기 전에 발생
 BeforeUnload   문서가 메모리에서 해제될 때  Unload 이벤트보다 일찍 발생하는 이벤트

 
 Blur             특정 객체로부터 포커스가 빠져나갈 때 발생하는 이벤트
 Change       입력양식에서 값이 바뀌게 되는 순간에 발생하는 이벤트
 Click           마우스로 특정 객체를 클릭할 때 발생하는 이벤트
 
 ContextMenu  팝업메뉴를 보기 위해 오른쪽 마우스를 클릭 할때 발생하는 이벤트
 Copy             팝업메뉴의 "복사" 항목을 누르거나 CTR+C를 누를 때 발생하는 이벤트
 Cut                팝업메뉴의 "잘라내기" 항목을 누르거나 CTR+x 를 누를 때 발생하는 이벤트
 DblClick          마우스를 더블클릭했을 때 발생하는 이벤트
 
 Drag            드래그 동안에 드래그를 시작한 객체에서 계속해서 발생하는 이벤트
 DragStart     드래그를 시작한 객체에서 최초에 발생되는 Dragstart 이벤트
 DragEnter    드래그 도중에 만나는 객체의 영역으로 들어가는 순간에 발생하는 이벤트
 DragOver     드래그 도중에 만나는 객체의 영역에서 계속해서  발생하는 이벤트
 DragLeave    드래그 도중에 만나는 객체의 영역에서 벗어나는 순간에 발생하는 이벤트
 DragEnd      드래그가 끝났을때 드래그를 시작한 객체에서 발생하는 Dragend 이벤트
 
 Drop             드래그가 끝났을때 드래그를 끝낸 객체에서 발생하는 Drop 이벤트
 Error             문서나 이미지를 Loading 하다가 에러가 발생할때 의 이벤트
 Focus           특정 객체가 포커스를 얻을 때 발생하는 이벤트

 KeyDown      키보드를 눌러서 글씨가 써지기 전에 최초의 순간에 발생하는 이벤트
 KeyPress      키보드를 눌러서 글씨가 써지기 직전에 발생하는 이벤트(Netscape는 최초)
 KeyUp           키보드를 떼어내는 순간에 발생하는 이벤트


 Load              window에 문서의 내용이 새롭게 Loading 되면 발생하는 이벤트
 Mousedown    문서영역의 특정 객체를 마우스로 누를 때 발생하는 이벤트
 MouseEnter    
특정객체에  마우스가 들어오는 최초의 순간에 발생하는 이벤트

 MouseMove    문서영역의 특정 객체에서 마우스를 움직일 때 발생하는 이벤트
 MouseOut       문서영역의 특정 객체에서 마우스가 벗어날 때 발생하는 이벤트
 MouseOver     문서영역의 특정 객체 위에 마우스가 올려져 있을 때 발생하는 이벤트
 MouseUp        마우스 버튼을 뗐을 때 발생하는 이벤트
 MouseWheel  
문서영역의 특정 객체에서 마우스휠을 움직일 때 발생하는 이벤트


 Move         윈도우, 프레임같은  객체를 움직이기 시작하는 순간에 발생하는 이벤트
 Paste        팝업메뉴의 "붙여넣기" 항목을 누르거나 CTR+x를 누를 때 발생하는 이벤트
 Reset        입력양식의 Reset 버튼을 눌러서 내용이 초기화될 때 발생하는 이벤트
 Resize       윈도우, 프레임 , HTMLElement 객체의 크기가 변경될 때 발생하는 이벤트


 Scroll          문서나 Textarea와 같은 객체에서 내용을 스크롤시킬 때 발생하는 이벤트
 Select         입력양식에 입력된 문자나 Option 객체를 선택했을 때 발생하는 이벤트
 SelectStart   문서 일부를 복사하기 위애 내용을 선택하는 최초의 순간에 발생하는 이벤트
 Submit        입력양식의 Submit 버튼을 눌러서 내용이 전송되기 직전에 발생하는 이벤트
 Unload        문서 정보가 메모리에서 해제되려는 순간에 발생하는 이벤트



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

     Text 입력요소에 적용되는 IME-MODE의 속성값


active        IME-MODE를 활성화 시켜서 한글이 입력되도록  한다(한/영 변환키 사용가능).

inactive     IME-MODE를 불활성화 시켜서 영문이 입력되도록 한다(한/영 변환키 사용가능).

disabled    IME-MODE를 사용 할 수 없도록 하영 영문만 입력할 수 있는 상태로 만든다.

                 (한/영 변환키를 사용해도 한글 전환이 되지 않는다).

auto          기본값으로 현재 한/영 키의 상태로 입력되도록 한다.

  

<Explorer 5.5이상 전용>

     <input type="text" style="IME-MODE:active">


출처 : http://blog.naver.com/rakis77/70022030743

AND

개체.getBoundingClientRect()
출력화면에 기준한 좌표체계를 돌려줌 속성으로 x, y가 있음
출력화면 기준으로인해 브라우저 스크롤의 경우 좌표가 꼬임
우회방법: 레이어의 스크롤을 하게되면 브라우저 스크롤의 좌표와는 상관없이 보여지는 개체의 정확한 위치가 잡아짐

개체.offsetLeft , Top..
내장개체에 position을 absolute를 먹이지 않는 이상 상위 개체의 내부여백의 영향으로 좌표에 문제가 생길 수 있음 (ex:body)
고로 부모의 offset을 체크할 필요가 생김

개체.className
개체에 설정된 스타일 클래스의 값을 돌려줌.

개체.getAttribute('속성명')
특정속성값을 가져옴(id 등 을 못 가져올때 사용)
참고로 id는 닷넷, DOM, HTML, JAVASCRIPT에서 약간씩 다른듯함

innerHtml ?
innerText (IE)
innerXml ?
outerHtml (IE)
outerText (IE)
outerXml ?

등이 존재..
자식포함 옵션도 존재
(조사필요)

document.elementFromPoint(x,y)
좌표체계에 기준을한 개체선택방법
아마도 최상위의 개체를 가져다줄듯함..
익스플로러 전용인듯함

document.createElement("태그명")
or document.createElement("<태그 속성=""....></태그>")

속성이 많아서 설정하기 귀찮을땐 후자를 추천

*요넘들과 함께 사용
개체.setAttribute('속성명','값')
개체.appendChild(자식개체)
개체.removeChild(자식개체)

개체.
부모찾기
개체.parentElement (IE)
자식찾기
개체.children (IE) <==덩어리
개체.childNodes <==덩어리
개체.childNodes[1] <==1+1번째자식
개체.firstChild
개체.lastChild

event.srcElement
이벤트를 일으킨 개체(IE)

parseInt(문자)
닷넷의 int.parse("")와 동일

getParentByAttr(개체,'name','value')
재귀적포함관계를 갖는 구조화된 개체의 부모를 찾기위해만듬
용도는 알아서..
        function getParentByAttr(sender, nm, vlu)
        {
            if(sender.parentElement!=null)
            {
                if(sender.parentElement.getAttribute(nm)==vlu)
                {
                    return sender.parentElement;
                }
                else
                {
                    return getParentByAttr(sender.parentElement, nm, vlu);
                }
            }
            else
            {
                return null;
            }
        }

AND

아래 동영상은 마소의 ASP.net 에서 퍼온것입니다.

 

아래글은 Nx 블로그에서 퍼온글 입니다.


FilteredTextBox 컨트롤은 TextBox 컨트롤에 특정 값만 입력할 수 있는 기능을 제공하는 컨트롤입니다. 즉, 어떠한 TextBox 컨트롤에는 숫자만, 다른 TextBox 컨트롤에는 문자만 입력이 가능한 기능을 제공하는 TextBox 컨트롤을 사용할 때 유용합니다. 기존에는 자바스크립트를 사용하여 유효성 검사를 체크하는 함수를 호출하곤 했는데 FilteredTextBox 컨트롤을 사용하면 그러한 불편을 겪지 않아도 됩니다.

먼저, FilteredTextBox 컨트롤이 가지고 있는 속성부터 알아보도록 하겠습니다.

<ajaxToolkit:FilteredTextBoxExtender ID="ftbe" runat="server"
TargetControlID="TextBox3"
FilterType="Custom, Numbers"
ValidChars="+-=/*()." />


이탤릭체의 속성은 옵션으로 사용할 수 있는 속성입니다.

속성에 대한 설명은 다음과 같습니다.

1. TargetControlID : 동작할 TextBox 컨트롤의 ID입니다.

2. FilterType : TextBox 컨트롤에 적용될 필터의 타입입니다. "Numbers", "LowercaseLetters", "UppercaseLetters", "Custom" 중 하나의 값을 지정하면 되며, "Custom" 속성을 지정하면 ValidChars 속성을 사용하여, 입력할 문자를 설정할 수 있습니다. 또한 "Custom"을 지정하면, 다른 "Numbers", "LowercaseLetters", "UppercaseLetters"와 같은 설정값을 동시에 사용할 수 있습니다.

3. ValidChars : TextBox 컨트롤에 입력할 문자를 정의합니다.

그럼, 웹 폼을 하나 생성하고, 다음과 같이 코드를 작성합니다.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FilteredTextBox.aspx.cs" Inherits="FilteredTextBox" %>


<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">

    <title>제목 없음</title>

</head>

<body>

    <form id="form1" runat="server">

        <asp:ScriptManager ID="ScriptManager1" runat="server">

        </asp:ScriptManager>

        <table border="0" cellpadding="0" cellspacing="0" style="background-color:#959695;" width="600px">

            <tr style="height: 30px" valign="middle">

                <td style="width: 100%; font-size: 11pt; color: White;" align="center" colspan="3">

                    FilteredTextBox Controls

                </td>

            </tr>

            <tr style="height: 30px" valign="middle">

                <td style="width: 1%">

                </td>

                <td style="width: 98%; background-color: White; font-size: 9pt;" align="left">

                    &nbsp;&nbsp;숫자만 입력 가능 : <asp:TextBox ID="txtText1" runat="server" Width="300px"></asp:TextBox>

                </td>

                <td style="width: 1%">

                </td>

            </tr>

            <tr style="height: 30px" valign="middle">

                <td style="width: 1%">

                </td>

                <td style="width: 98%; background-color: White; font-size: 9pt;" align="left">

                    &nbsp;&nbsp;소문자만 입력 가능 : <asp:TextBox ID="txtText2" runat="server" Width="300px"></asp:TextBox>

                </td>

                <td style="width: 1%">

                </td>

            </tr>

            <tr style="height: 30px" valign="middle">

                <td style="width: 1%">

                </td>

                <td style="width: 98%; background-color: White; font-size: 9pt;" align="left">

                    &nbsp;&nbsp;숫자 + 정의된 문자(-)만 입력 가능 : <asp:TextBox ID="txtText3" runat="server" Width="300px"></asp:TextBox>

                </td>

                <td style="width: 1%">

                </td>

            </tr>

            <tr style="height: 2px" valign="middle">

                <td style="width: 100%;" align="center" colspan="3">

                </td>

            </tr>


        </table>


        <cc1:FilteredTextBoxExtender

                                    ID="FilteredTextBoxExtender1"

                                    runat="server"

                                    TargetControlID="txtText1"

                                    FilterType="numbers">

        </cc1:FilteredTextBoxExtender>

        <cc1:FilteredTextBoxExtender

                                    ID="FilteredTextBoxExtender2"

                                    runat="server"

                                    TargetControlID="txtText2"

                                    FilterType="LowercaseLetters">

        </cc1:FilteredTextBoxExtender>

        <cc1:FilteredTextBoxExtender

                                    ID="FilteredTextBoxExtender3"

                                    runat="server"

                                    TargetControlID="txtText3"

                                    FilterType="Custom, numbers"

                                    ValidChars="-">

        </cc1:FilteredTextBoxExtender> 

    </form>

</body>

</html>



3개의 TextBox 컨트롤을 웹 폼에 위치시키고, 또한, 3개의 FilteredTextBoxExtender 컨트롤을 위치시킨 후 각각의 FilteredTextBoxExtender 컨트롤의 TargetControlID를 TextBox 컨트롤의 ID로 지정합니다. 첫 번째 TextBox 컨트롤에는 숫자만 들어가게 하도록, FilteredTextBoxExtender1의 FilterType 속성을 "Numbers"로 정의하고, 두 번째 TextBox 컨트롤에는 소문자만 들어가게 하도록, FilteredTextBoxExtender2의 FilterType 속성을 "LowercaseLetters"로 정의합니다. 또한, 세 번째 TextBox 컨트롤에는 전화번호나 우편번호처럼 숫자와 숫자 사이에 "-" 문자만 들어갈 수 있도록 FilteredTextBoxExtender3의 FilterType 속성을 "Custom, Numbers"로 지정하고, ValidChars 속성을 "-"로 정의합니다.

이제, 웹 브라우저에서 확인해보면 각 FilteredTextBoxExtender 컨트롤에 정의된 FilterType에 맞는 문자 또는 숫자만 각 TextBox 컨트롤에 입력되는 것을 확인할 수 있습니다.



그림 1. FilteredTextBoxExtender 컨트롤이 정의된 TextBox 컨트롤

이상으로 FilteredTextBox 컨트롤에 대해서 알아보았고, 다음 포스트에서 다른 AJAX 컨트롤에 대해서 알아보도록 하겠습니다.


출처 : http://blog.naver.com/handssjh?Redirect=Log&logNo=140041393735&vid=0
AND

1. 자바 스크립트 함수를 폼의 HTML 부분에 먼저 추가 해둡니다.

2. 버튼에 이벤트 핸들러를 추가합니다.

3. 이벤트 핸들러 함수에 다음을 추가합니다.

   RegisterClientScriptBlock("ButtonClickTest", "<script>aaa();</script>");
   RegisterStartupScript("ButtonClickTest", "<script>aaa();</script>");


위 코드 두줄 중 하나만 쓰시면 원하는 결과를 얻으실 수 있습니다.


회색 글자 부분은 아무 값이나 넣으시면 되고, 빨간색 글자 부분에 스크립트 호출하는 코드를 넣으시면 됩니다. 빨간색 부분은 문자열이 그대로 사용되므로 자바스크립트 함수를 호출하려면 <script> ... </script> 블럭으로 감싸주셔야 합니다.


위 두 함수는 PostBack 시점에서 스크립트를 실행하기 위해서 사용합니다.

두 함수의 차이점은 RegisterClientScriptBlock 함수는 서버 Form 시작 부분의 바로 아래줄에 생성되고, RegisterStartupScript 함수는 서버 Form 닫히는 부분의 바로 윗줄에 생성됩니다.

AND

교량

ETC/신변잡기 2007. 8. 7. 14:30
0

교량
AND