티스토리 툴바


프로그래밍2011/03/21 17:23

출처 : http://blog.naver.com/ieiec?Redirect=Log&logNo=140123733935

웹 표준 스팩 소개

 

1) (X)HTML(eXtensible Hypertext Markup Language)

HTML(Hypertext Markup Language) 는 웹페이지를 표시하는데 기본 언어로서 사용된다.

 

최신의 HTML 표준은 4.01이지만 HTML을 XML과 결합한 XHTML이 권고안으로 나와있다.

HTML2/3와 달리 최신 XHTML표준은 <font>, <b>, <i> 같은 표현 요소들을 배제하고,

태그를 모두 닫도록 권고하는 등정확한 문서 규격을 요구하고 있다.

이것은 전문적인 저작 도구를 사용함에 따라 구조적인 HTML템플리트를 생성하고 스타일(CSS)을

관리함으로서 비 전문 설계자도 웹 페이지를 손쉽게 제작 관리 할 수 있게 해준다.

 

2) CSS(Cascading Style Sheets)

CSS는 사용자 정의의 디자인 속성, 즉 글꼴, 크기, 색상, 이벤트 등을 지정할 수 있으며

CSS를 사용한 모든 페이지는 기존 버전과의 호환성 되게 어떤 브라우저에서도 내용을 열람할 수 있다.

CSS를 이용하여 설계자는 서로 다른 화면 해상도와 브라우저 상에서, 테이블 없이도 동일하게 보여질 수

있는 페이지를 생성할 수 있다.

 

단, IE4.0 이하와 넷스케이프4 이하의 오래된 웹브라우저에서는 CSS를 지원하지 못한다.

 

3) XML(eXtensible Markup Language)

XML(eXtensible Markup Language)은 HTML이나 CSS로서 표현되지 못하는 영역을 DTD를

이용하여 정의하여 사용자 정의의 태그를 생성하여 제작할 수 있는 메타 마크업 언어이다.

 

XML이 고려되는 애플리케이션은

사용자가 필요한 정보를 얻기 위해 하나 이상의 데이터베이스와 상호 작용할 필요가 있는 경우,

작업이 사용자에게 전달되어 사용자가 자신의 기록 혹은 문서에 액세스할 것이 예상되는 경우,

서로 다른 세트의 데이터가 서로 다른 사용자에게 디스플레이 되어야 하는 경우,

정보 검색 및 디스플레이와 관련하여 사용자 선호 프로파일을 구축해야 할 필요가 있는 경우,

각 개인이 스타일 시트를 사용하여 다양한 포맷으로 문서를 갱신해야 할 필요가 있는 경우

에 사용 가능하다.

 

4) DOM(Document Object Model)

DOM(Document Object Model)은 웹페이지에 표현되는 모든 속성에 대해 객체화하여 이를

자유자재로 사용할 수 있도록 만든 것이다.

 

document, form, window 등 각각의 속성을 객체화하여 트리 구조로 형상화하여 이에 대한

이벤트 처리 같은 것이 가능하다.

 

DOM에는 크게 W3C DOM, MS DOM이 있는데, IE6.0 이전 브라우저를 제외하고는 모든 브라우저가

표준 W3C DOM을 지원한다.

 

5) ECMAScript

자바스크립트는 W3C 표준으로 제정되지 않았으며, 또한 모든 웹 브라우저 사용자가 자바스크립트를

볼 수 있는 것은 아니다. 특정 방화벽은 자바 스크립트가 통과하는 것을 허용하지 않는다.

그럼에도 자바스크립트는 DOM이 표준화되면서 웹 브라우저에 널리 쓰이고 있다.

주의할 점은 클라이언트 측 스크립트는 여러 브라우저에서 폭 넓게 검사되어야 한다.

핵심 기능은 자바 스크립트에 의해서만 제공되어서는 안된다.

또 자바스크립트는 주석 코드를 사용하여 비 호환성의 웹 브라우저로부터 숨겨져야한다.

자바스크립트는 HTML문서의 Head내에 위치해야 제대로 동작한다. 따라서 문서의 Body 내에 자바스

트를 위치시키는 것은 피해야한다.

 

자바스크립트의 경우, 넷스케이프사가 ECMA라는 표준 기구로 제안하여 채택된 바 있어 ECMA-262표준안

을 공부하면 된다. ECMAScript는 IE6.0, Firefox 1.0, Safari1.0, Opera 8에서 거의 100% 지원하고 있다.

웹 표준 홈페이지 방법론

 

HTML의 태그들은 구조(structure)를 나타내는 것과 표현(presentation)을 나타내는 것으로 분류할 수 있다.

 

구조(structure) : H1, H2, UL, DL, OL, LI, LINK, ADDRESS, STRONG, BLOCKQUOTE, CODE, Q, DIV, P 등

 

단순한 모양(표현)을 위해 태그를 사용하는 것이 아닌, "의미"를 가지고 태그를 사용해야 한다.

( 예를 들면, H1이라는 마크업을 사용하면 보통은 글자 크기가 커지고 두꺼워진다. 그렇다고 H1을 단순히 글자를 키울

목적으로 사용하는 것은 잘못된 것이다.

H1은 문서의 가장 중요한(또는 가장 상위의) 제목 부분을 표시하라는 "의미"를 가지고 있는 것이지, 그냥 글자를 키울

목적으로 제공되는 것이 아니기 때문이다.

이에 반해 B, FONT, I, BR 등은 문서의 표시 방법을 결정하는 표현 요소들이다. 즉 이것들은 아무런 의미는 없지만 단지

시각적으로 표현하는 방법만 결정한다. )

 

1) 구조와 표현의 분리

ㄱ. 그냥 표현한것.                ㄴ. 구조적으로 표현한것.

 

 ㄱ. 그냥 표현한 것.

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ko">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=euc-kr">
    <title>그냥 표현한 것</title>
  </head>
  <body>
  <br>
    <font size="4" color="darkred"><b>1. 서론</b></font><br>
    &nbsp;&nbsp;&nbsp;&nbsp;<font size="2" color="black">1. 개념
    정의</font><br>
    &nbsp;&nbsp;&nbsp;&nbsp;<font size="2" color="black">2.
    필요성</font><br>
    <font size="4" color="darkred"><b>2. 본론</b></font><br>
    &nbsp;&nbsp;&nbsp;&nbsp;<font size="2" color="black">2.1 보편적 디자인
    원칙</font><br>
    &nbsp;&nbsp;&nbsp;&nbsp;<font size="2" color="black">2.2 접근성
    원칙</font><br>
    <font size="4" color="darkred"><b>3. 맺음말</b></font><br>
  </body>
</html>

 ㄴ. 구조적으로 표현한 것.

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="ko">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=euc-kr">
    <style type="text/css">

    * { line-height: 138%;}
    ol>li {
    font-size: 1.2em;
    color: darkred;
    font-weight: bold;
    padding-top: 0.8em; 
    margin-left: -1em;
    }
    ul>li {
    font-size: 0.7em;
    color: black;
    font-weight: normal;
    margin-left: -2em;
    }
    </style>
    <title>구조적으로 표현한 것</title>
  </head>
  <body>

    <ol>
      <li>서론</li>
      <ul>
        <li>개념 정의</li>
        <li>필요성</li>
      </ul>
      <li>본론</li>
      <ul>
        <li>보편적 디자인 원칙</li>
        <li>접근성 원칙</li>
      </ul>
      <li>맺음말</li>
    </ol>
  </body>
</html>

ㄱ. 구조와 표현과 내용이 한데 얽혀 있으면 나중에 소스를 관리하고 수정하기가 매우 어려울 뿐만 아니라, 컴퓨터가 이

문서의 구조를 파악하기도 매우 힘들다.

예를 들어 위의 문서에서 가장 큰 문서의 구조는 서론, 본론, 결론의 세 가지 항목으로 이루어졌다고 사람은 알 수 있는데,

컴퓨터는 글자 색깔이 어떻고, 크기가 어떻고 하는 것이 의미가 없으므로 시각 장애인이 사용하는 음성 브라우저엣도 위와

같은 글자 크기가 어떻고 하는 것은 거의 의미가 없다.

 

ㄴ. 컴퓨터나 검색 엔진이 문서의 의미적인 구조를 파악하기가 쉽고, 기계를 통해 문서의 구조에 쉽게 접근할 수 있다.

이것은 브라우저 이미 언급한 하위 버전 호환성뿐만 아니라 향후 미래에 나올 브라우저에 대한 상위 버전 호환성(Forward Compatibility)로 매우 중요하다는 점이다.

 

2) 구조와 동작(Behavior)의 분리

 

실전 XHTML 가이드(1)


 

W3C는 HTML 4.0을 표준으로 발표한 바로 직후, 더 큰 모듈성, 유연성, 성능이 필요함을 절감하게 되었다.

웹 사용자들의 끝도 없는 요구에 응답하면서 HTML 4.0은 끊임 없이 확장해서 새로운 기술을 수용해야만 했는데

이를 위해 XHTML이 등장 했다.

 

1) XHTML이란 ?

eXtensible HyperText Markup Language

HTML은 정해진 태그 집합만을 사용하는 정적인 마크업 언어라면,

XHTML은 XML(Extensible Markup Language: 확장 마크업 언어)로 정의된 단 하나의 집합만을 사용.

 

XML은 웹이 성장 및 확장할 수 있는 플랫폼이며 XHTML은 XML을 사용하여 HTML을 혁신한 것으로

XML이 사용되는 모든 새로운 툴에 XHTML을 결합해 준다.

 

2) 왜 XHTML을 사용해야 하는가?

호환성 및 확장 가능성

XHTML은 단순히 HTML4를 업그레이드한 것이 아니라 XML애플리케이션을 가장 폭넓게 사용하는 웹 페이지에

적용할 수 있다는 데에서 의미를 찾을 수 있다 : 기계가 이해할 수 있는 언어라는 것이다.

 

유지 비용의 감소 및 재생산성 확대

일반적인 관습대로 작성된 HTML문서는 내용과 디자인, 문서 구조가 모두 뒤범벅 되어있다.

이는 매우 효율성이 낮은 반복 작업과 막대한 수정 비용을 요구하는 것이다.

XHTML과 CSS 기반 사이트는 이러한 수고를 덜고 유지비용이 감소한다.

 

경량의 로딩 속도

XHTML 규격을 따르면 저절로 "구조화된" 문서로 만들어진다. "구조화된" 문서의 특징은 "가독성"이 높아지게 되는데

단지 생성된 코드를 사람이 읽기 편하다는 뜻뿐만 아니라, 다른 기계나 프로그램도 읽기 수월해 진다.

디자인 부분을 CSS 파일로 분리해낸다면 훨씬 더 간단해진다.

문서 내 디자인 요소들은 파일의 용량이 키움에 따라, 웹페이지의 로딩과 렌더링 속도를 느리게 하고 있다.

 

3) XHTML 문서 구조

올바른 DOCTYPE 사용

웹페이지를 표현하는 방식을 제대로 표현하기 위해 웹 브라우저가 적절한 문서 형태를 표기하도록 할 필요가 있다.

즉, 문서의 루트 요소 앞에는 공백 없이 DOCTYPE 선언이 있어야 하며,

이 선언은 XHTML에 대한 세 DTD(Document Type Definition)파일 (strict, transitional, frameset) 중 하나를

참조해야 한다.

 

올바른 문서 형식 선언을 해주는 것은 다양한 브라우저에 따른 렌더링 차이를 최소화 할 수 있기 때문에 매우 중요하다.

HTML 버전에 따라 해석되는 방식이 브라우저에 따라서 다르기 때문에 이를 지정해 주는 것은 매우 중요하다.

 

HTML 2.0

<!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN">

 

HTML 3.2

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

 

HTML 4.01

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

 

XHTML 1.0

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

 

XHTML 1.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

 

 

표준 문서 구조

표준 문서 형식(Doctype)을 기반한 웹페이지에 대한 정확한 사용법은 다음과 같다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko-KR">
<head>
<title> ... </title>
</head>
<body>
...
</body>
</html>

 

가장 흔히 사용하는 DOCTYPE 코드는 일반형식(Transitional)과 엄격한 형식(Strict)으로 나누어지게된다.

HTML 4.01 Transitional 은 예전에 있었거나 없어진 태그도 지원하며, <font> 스타일도 제대로 표현하여 준다.

HTML 4.01 Strict 은 HTML을 엄격하게 적용한다. <font>태그에 적용된 스타일 보다는 CSS파일에서 지정된

스타일을 지켜 표현 해야 한다.

 

DOCTYPE을 규정하는 가장 좋은 방법은 Strict 형식을 사용하는 것이다. 이것은 CSS를 통해 모든 HTML 태그의 속성을

모두 자유 자재로 규정할 수 있기 때문이다.

즉, b{font-weight: normal;} 라고 적는다면 더 이상 <b>는 굵은체로 표시되지 않는다.

 

그러나, 아직 브라우저 호환성 때문에 현재 상태에서 가장 최상의 브라우저 호환성을 제공해 주는 문서 형식은 XHTML1.0

Transitional을 사용하는 것이다.

 

4) XHTML 일반 문법 준수

정확한 문서 구조 준수

문서의 루트 요소는 html 이 되어야 하며, 이 html 요소는 XHTML 네임스페이스를 지정해야 한다.

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

표준 문서에는 head, title 및 body 구조 요소가 포함되어야 한다.

프레임 세트 문서에는 head, title 및 frameset 구조 요소가 포함되어야 한다.

 

모든 요소는 완벽하게 중첩되어야 한다.

<p>This is a <i>bad example.</p></i>
<p>This is a <i>good example.</i></p>

 

모든 속성 값은 인용 부호("나 ')로 묶어야 한다.

<a href=http://sample.com>틀린 경우</A>
<a href="http://sample.com">맞는 경우</a>

 

모든 요소와 속성은 소문자여야 한다.

XML은 대소문자를 구별하므로 필수적이다.

<A HREF="http://sample.com">틀린 경우</A>
<a href="http://sample.com">맞는 경우</a>

 

모든 요소는 닫아야한다.

빈 요소에는 종료 태그가 포함되거나 시작 태그가 />로 끝나야 한다.

예를 들어, <br>은 잘못된 것이며, <br></br>또는 <br />이 올바른 형식이다.

 

빈요소 : area, base, basefont, br, col, frame, hr, img, input, isindex, link, meta, param

 

또한, XML을 사용할 수 없는 이전 브라우저와의 호환성을 위해 /> 앞에 공백이 있어야 한다.

(예:<br/>이 아니라 <br />)

 

<img src="http://sample.com/wrong.jpg">
<img src="http://sample.com/right.jpg" />

 

모든 속성값은 속성이 함께 선언되어야 한다.

모든 속성은 최소화되어 표기되면 안된다. XML은 속성이 최소화를 지원하지 않는다. 속성 값의 짝들은 모두 작성

되어야 한다.

 

a, applet, form, frame, iframe, img, map 등의 요소에는 name 속성뿐만 아니라 id속성도 있어야 한다.

<a name="intro">Introduction</a> 는 잘못된 것.

<a id="intro">Introduction</a> 또는 <a id="section1" name="intro">Introduction</a>가 맞는 표현.

 

또한 <td nowrap>은 잘못된 것. <td nowrap="nowrap">이 올바른 형식이다.

최소화 될 수 없는 속성으로는 checked, compact, declare, defer, disabled, ismap, multiple, noresize,

noshade, nowrap, readonly, selected 가 있다.

 

<option value="wrong" selected>틀린 경우</option>
<option value="right" selected="selected">맞는 경우</option>

 

모든 script 및 style 요소에는 type 속성이 포함되어야 한다.

<script type="text/javascript” language="javscript"></script>
<style type="text/css"></style>

 

모든 img 및 area 요소에는 alt 속성이 포함되어야 한다.

코드를 생성하거나 XHTML을 정리할 때 코드에서 이들 속성을 설정하고, 찾을 수 없는 alt 속성을 보고한다.

 

모든 SCRIPT 내의 태그는 Escape 시켜야 한다.

자바스크립트 내에 데이터는 CDATA 형식으로 간주되기 때문에 HTML태그가 들어가게 되면 오류를 내게 되어 있다.

<script type="text/javascript">
<!--
// 틀린 표현!
document.write("</P>");
// -->
</script>

 

<script type="text/javascript">
<!—
// 맞는 표현!
document.write("<\/P>");
// -->
</script>

 

HTML4에서는 SCRIPT내에 데이터 중 시작 태그나 코멘트 부분은 인식이 안되지만 종료 태그는 인식이 되기 때문에 이를 역슬래로 표시해야 한다.

 

XHTML에서, 스크립트와 스타일 요소들은 #PCDATA 컨텐트를 갖는 것으로 선언된다.

결과적으로, <과 &는 마크업의 시작으로 처리되고, &lt;과 &amp;와 같은 개체(entities)들은 XML 프로세서(processor)에 의해 각각 <과 &로의 개체 참조로서 인식되므로 CDATA로 마크업 하여 표시하는 게 좋다.

 

<script type="text/javascript">
<![CDATA[
... <h1>데이터</h1> ...
]]>
</script>

 

모든 문서 내 URL에서 &를 쓰면 안 된다.

&가 XML 엔티티의 시작으로 인식하기 때문에 생기는 문제이다.

기존 웹브라우저는 이러한 에러를 복구해 주고 있지만 유효성 검사기에서는 에러를 내게 된다.

<!—에러! --> <a href="foo.cgi?chapter=1&section=2">...</a>
<!—적합! --> <a href="foo.cgi?chapter=1&amp;section=2">...</a>

HTML 문서 내에서만 &를 &amp; 로 바꾸어야 하며 브라우저 주소창이나 이메일 본문에서는 &를 써야 한다.

웹 서버에서는 &amp;가 아니라 &만을 인식하기 때문이다.

실전 XHTML 가이드(2)-구조적 XHTML 사용 방법

 

1) 잘못 사용하고 있는 태그

무분별한 테이블 사용

<table width="640" cellpadding="0" cellspacing="0" border="0">
<tr>
<td height="25" valign="top">
<img src="title_01.gif">
</td>
</tr>
<tr>
<td>
레이아웃에 table element 를 사용하는 이유는 아마도 쉽기 때문일 것이다. 쉽다는
것 보다는 "익숙해서" 가 더 큰 이유일지도 모른다. 대다수의 사람들은 처음부터 아주
당연하게 table 을 사용해 왔고 그렇게 되어 있는 사이트를 더 많이 봤을 것이다.
</td>
</tr>
</table>

 

<table>은 행과 열이 있는 2차원의 데이터를 표시하는데에 사용되는 태그이다.

그러나 위와 같이 단순히 제목과 문단을 구분하는 데에도 표를 사용한다.

이와 같은 데이터는 표가 아니기 때문에 <table>태그를 사용해서는 안되고

의미에 맞는 <h1>이나 <p>와 같은 태그를 사용해주어야 한다.

 

잘못된 위치, 태그, 스크립트 사용

 

<table cellpadding="0" cellspacing="0">
<form action="/search/" method="get">
<tr>
<td>
<select>
<option>제목</option>
<option>내용</option>
<option>작성자</option>
</select>
</td>
<td>
<input type="text" size="10" class="type-text" />
</td>

<td>
<a href="javascript:search()"><img src="button_search.gif"></a>
</td>
</tr>
</form>
</table>

 

<form>의 위치

<form>을 사용해서 제작하다 보면 디자인상에서 나타나서는 안되는 공백이 생기는 것을 볼 수 있다.

이와 같은 현상을 피하기 위해서 많은 사람들이 <form>태그를 <tr>태그 사이에 넣는다.

하지만 이와 같은 사용은 잘못된 문법 오류이다.

 

<form>의 여백을 없애기 위해서 스타일을 사용하면 된다.

form { margin: 0; }

 

<form>의 summit

<form>의 summit을 자바스크립트로 하는 것은 잘못된 xhtml 사용이다.

<form>의 summit을 하기 위해서는

<input type="submit"> 또는 <input type="image">를 사용하면 된다.

 

<img>태그를 이용해서 이미지 버튼을 삽입하고 이것에 <a>태그와 자바스크립트를 이용해서 summit을 하게되면 자바스크립트가 작동하지 않는 상황에서는 summit이 일어날 수 없어 접근성을 떨어뜨린다.

 

href

href는 하이퍼텍스트 주소를 값으로 할 수가 있는데 위에서 사용된 "javascript:search()"는 올바른 하이퍼텍스트 주소가 아니다.

 

불필요한 <table>의 사용

위의 경우 <select>와 텍스트를 입력받는 <input>, 그리고 summit 버튼으로 이루어져 있는데 이를 각각 <td>안에 넣는 것도 불필요한 <table>사용이다.

 

<form action="/search/" method="get" onsubmit="validation(this)">
<div class="search">
<select>
<option>제목</option>
<option>내용</option>
<option>작성자</option>
</select>
<input type="text" size="10" class="type-text" />
<inpyt type="image" src="button_search.gif" alt="검색" />
</div>
</form>

 

2) 그룹 요소 : div, span

페이지를 제작할 때에는 각각의 의미를 갖고 있는 컨텐츠를 묶거나 표시를 해줄 필요가 있다.

이럴 때 사용하는 태그가 <div>와 <span>이다. 의미에 맞는 태그를 사용해서 페이지를 제작한 다음에 <div>나 <span>을 이용해서 단위별로 구분을 해 주어야 한다.

 

block 과 inline

<div>와 <span> 둘다 그루핑에 사용되는 엘리먼트지만, <div>는 block이고 <span>은 inline이라는 큰 차이점이 있다.

block과 inline은 화면에서 엘리먼트들이 랜더링 되는 기본 모양을 지칭한다.

block과 inline은 이 엘리먼트 뒤에 개행이 이루어지는지로 구분할 수 있다.

<div>를 이용하면 뒤에 개행이 이루어지고 <span>을 이용하면 개행이 이루어지지 않는다.

 

<div class="name">홍길동</div> <div class="age">24 세</div>

"홍길동" 다음에 줄이 바뀌어서 "24세" 라고 나온다.

 

<span class="name">홍길동</span> <span class="age">24 세</span>

"홍길동" 뒤에 개행이 되지 않고 한줄에 "홍길동 24세" 와 같이 나온다.

 

<div>, <form>, <ul>, <ol>, <li>, <dl>, <dt>, <dd> 등이 block들이고 <a>, <img>,
<select>, <input> 등이 대표적인 inline 엘리먼트들 이다.

 

표제(Heading)

제목을 표시할 때에 사용한다. <h1>~<h6> 까지 heading 태그가 있다.

가장 중요한 제목을 <h1>으로 묶어주게 되고 그 아래의 중요도를 갖는 것은 <h2>, <h3>등을 이용해서 제목을 표기한다.

 

※ <h1>의 하위 heading은 <h2>여야지 <h3>나 <h4>와 같이 단계를 건너뛰는 것은 좋지않다.

 

문단(paragraph)

<p>태그는 문단을 나타낼 때에 사용한다.

브라우저 별로 <p>태그의 간격이 다르기 때문에 간격을 CSS로 제어하게 되면 브라우저와 상관없이 일관된 디자인을 유지할 수 있다.

 

<p>를 사용할 때에는 반드시 닫는 태그도 사용해주어야 한다.

하나의 문단을 <p>와 </p>로 감싸는 식으로 작성을 해야 한다.

 

<p>첫번째 문단</p>
<p>두번째 문단</p>
<p>세번째 문단</p>

 

※ <p>는 하위에 block 요소를 포함할 수 없다. 텍스트나 이미지와 같은 inline요소만을 하위에 포함할 수 있기 때문에 주의해야 한다.

 

구문(em, strong, dfn, code, samp, kbd, var, cite, abbr, acronym)

 

강조(strong, em)

<em>,<strong>은 문장안에서 강조를 나타낸다.

<em>은 이탤릭으로, <strong>은 볼드체로 나타난다.

문장안에서 중요도가 있을 때에는 <em>,<strong>을 사용하고, 단지 이탤릭이나 볼드를 표현하고자 할 때에는 <i>,<b>를 사용해야 한다.

 

정의

<dfn>태그

 

코드

<code>는 컴퓨터 코드를 나타내는 태그이고, <samp>는 코드의 결과 출력물을 나타낼 때에 사용한다.

 

값의 표시

<kbd>는 유저의 키보드 입력을 나타내고, <var>는 프로그램에서의 변수를 나타낸다.

<kbd>Enter</kbd>키를 누트세요

 

출처

<cite>는 인용이나 출처를 밝힐 때에 사용한다.

 

축약

<abbr>는 축약어를 나타내고 <acronym> 은 두문자어를 나타낸다.

보통 약어를 그대로 발음하는 것은 <acronym>을 사용하고 한글자씩 읽는 것은 <abbr>을 사용한다.

 

인용(blockquote, q)

다른 인용문을 표시할 때에 사용한다.

<blockquote>는 block 요소의 인용문이고 <q>는 inline요소의 인용을 나타낸다.

<blockquote>는 인덴트를 해서 보여주게 되고 <q>는 인용문 앞 뒤로 따옴표를 나타내 준다.

 

첨자(sup, sub)

위첨자나 아래첨자를 나타내고자 할 때 사용한다.

x<sup>2</sup> + 4x + 4 = (x+2)<sup>2</sup>

 

형식을 가지고 있는 컨첸츠 (pre)

미리 형식을 가지고 있는 내용을 나타내고자 할 때 <pre>태그를 사용한다. 이 태그를 사용하게되면 공란도 갯수에 맞게 나오고 글자폭이 일정한 폰트로 화면에 나오게된다. 소스 코드등을 나타날 때에 많이 사용한다.

단, 자동 줄바꿈이 되지 않기 때문에 너비가 제한적일 때에는 주의해서 사용해야 한다.

 

<pre class="code">function menuOn(imgEl)
{
imgEl.src = imgEl.src.replace(&quot;.gif&quot;,
&quot;_on.gif&quot;);
}
function menuOut(imgEl) {
imgEl.src = imgEl.src.replace(&quot;_on.gif&quot;,
&quot;.gif&quot;);
}</pre>

 

추가 및 삭제 (ins, del)

문서에 추가된 내용이나 삭제된 내용을 명시할 때에 사용한다.

<ins>새로추가</ins> : 밑줄로 표현

<del>삭제된 내용</del> : 취소선으로 표현

 

목록 (ul, ol, dl)

Unordered List

<ul>은 하위로 <li>엘리먼트를 갖게 되고 각 <li>엘리먼트의 앞부분에는 불렛이 나타나게된다.

 

Ordered List

<ol>은 하위로 <li>엘리먼트를 갖게 되고 각 <li>엘리먼트의 앞부분에는 자동적으로 숫자가 나오게 된다.

 

Definition List

<dl>은 하위로 <dt>와 <dd>엘리먼트를 갖게 되고 <dt>는 term을 <dd>는 definition을 나타낸다.

실전 CSS 레이아웃(1)
 

1) CSS 개념 및 소개
CSS는 구조적으로 짜여진 문서(HTML, XML)에 style(글자, 여백, 레이아웃) 등을 적용하기 위해서 사용하는 language이다.

CSS는 문서의 구조와 디자인을 분리할 수 있게 해줌으로써 웹 제작이나 유지관리를 간단하게 해 준다. 또한 미디어 별로 스타일을 적용할 수 있기 때문에 각 기기별로 다른 스타일이 적용된 모습을 만들 수 있다.

 
[css zengarden (http://csszengarden.com) 사이트]

 

위의 사이트들은 전혀 다른 사이트 같지만 실제적으로는 동일한 사이트이다.

동일한 HTML을 사용하면서 CSS만 바꿔서 사이트의 디자인을 다르게 표현한 것이다.

내용의 구조와 디자인이 완벽하게 분리되어 있기 때문에 디자인 요소인 CSS만 바꾸어도 다른 사이트처럼 보이게 할 수 있다.

 

CSS의 선언

p.text {
margin: 0;
}

 

CSS의 선언(rule)은 선택자(selector)와 선언부로 이루어져 있다. 위의 rule에서 "p.text"부분이 바로 selector이고 그 뒤에 나오는 {}안의 내용이 선언부이다.

 

p.text,
span.name {
color: #666;
}

 

selector들은 ,(comma)를 이용하여 구분할 수 있다. "p.text"와 "span.name"은 ,(comma)로 구분되어 있다.

이경우 "text"라는 class를 갖는 <p>엘리먼트와 "name"이라는 class를 갖는 <span>엘리먼트는 둘다 폰트의 색이 rgb #666666으로 나타나게 된다.

 

2) CSS 선택자(Selector)
 

일반선택자

공용선택자(*) : 모든 태그를 지정

타입선택자(A) : 태그 A를 지정

클래스선택자(.A) : 클래스가 A인 태그를 지정

ID선택자(#A) : 아이디가 A인 태그를 지정

 

*(공용 선택자) : 모든 엘리먼트를 선택한다.

* {
margin: 0;
padding: 0;
}

 

<h1>,<h2>,<p>,<form>,<blockquote>등의 브라우저 기본 마진과 패딩을 갖고 있는 엘리먼트들의 여백이 없어지게 된다.

 

div.search * {
vertical-align: middle
}

 

div.search안의 모든 엘리먼트가 세로로 가운데 정렬이 된다.

 

E(타입 선택자) : E엘리먼트를 선택한다. "body"와 같이 사용하면 body 엘리먼트를, "div"와 같이 사용하면 div엘리먼트를 선택한다.

 

.E(클래스 선택자) : class는 하나의 페이지에서 여러번 사용할 수 있기 때문에 반복적으로 나오는 스타일의 경우 class로 지정해서 정의하여 사용하게 된다.

 

#E(아이디 선택자) : descendant selector와 같이 사용하면 우선순위의 조정에 많이 사용된다.

 

복합 선택자

하위 선택자(A B) : 태그 A로 감싸져 있는 태그 B를 지정

자식 선택자(A>B) : 태그 A로 감싸져 있는 태그 B중 한 단계 밑에 것을 지정

인접 선택자(A+B) : 태그 A와 B가 연속으로 나와 있는것을 지정

 

E F (하위 선택자) : E 엘리먼트의 하위에 있는 F 엘리먼트들을 선택한다. 보통 ID Selector와 함께 사용하여 중복 선언을 피하고자 할 때 많이 사용한다. 또한 불필요하게 class를 많이 적어주지 않아도 많은 하위 엘리먼트를 한번에 선택할 수 있기 때문에 유용하다.

 

<ul id="list">
<li><a href="list.html?id=34&amp;type=blah">item 34</a></li>
<li><a href="list.html?id=35&amp;type=blah">item 35</a></li>
...
...
<li><a href="list.html?id=99&amp;type=blah">item 99</a></li>
</ul>

 

위와 같은 코드에서 a 엘리먼트에 스타일을 적용하고자 할 때 일일이 a 엘리먼트에 class를 기입하지 않아도 아래와 같이 하면 모든 하위 a 엘리먼트에 스타일을 적용할 수 있다.

 

ul#list a:link,
ul#list a:visited {
color: #999;
}
ul#list a:hover,
ul#list a:active {
color: #000;
}

 

E>F (자식 선택자) : E 엘리먼트의 자식 엘리먼트인 F 엘리먼트를 선택한다.

 

<ul class="depth1">
<li>
<a href="about.html>Company</a>
<ul class="depth2">
<li>
<a href="overview.html">Overview</a>
</li>
<li>
<a href="ceo.html">Ceo.html</a>
</li>
</ul>
</li>
</ul>

 

위의 코드에서 ul.depth1과 ul.depth2의 <li>에 스타일을 적용할 경우

 

ul.depth1 li {
background: #f9f9f9;
border-bottom: 1px solid #ddd;
}

 

이렇게 정의하게 되면 ul.depth2의 <li>까지 스타일이 적용된다.

 

ul.depth1>li {
background: #f9f9f9;
border-bottom: 1px solid #ddd;
}

 

이때 child selector를 사용해주면 depth1의 <li>만 선택을 해서 스타일을 적용할 수 있게 된다.

 

E+F (인접 선택자) : E와 F엘리먼트가 서로 근접해 있는 형제관계일 경우를 선택한다. 제목 바로 아래의 문단에만 특정 스타일을 적용하는 경우와 같이 다른 엘리먼트가 디자인 적으로 영향을 미칠 때에 유용하게 사용할 수 있다.

 

<h2>브라우져 워</h2>
<p>웹스탠다드를 보다 잘 이해하기 위해서는 브라우져 워에 대해서 짚어볼 필요가
있습니다. 초창기에는 많은 브라우져들이 있었고 그중 사용자가 가장 많은 표준
브라우져는 넷스케이프 네비게이터(이하 NN)였습니다. 그리고 이 시장에
마이크로소프트(이하 MS)가 진입을 했습니다. 초기 windows(win95?) 사용자는
윈도우를 설치 하더라도 … 즉 많은 브라우져가 있었고 IE 에 의한 독점이 이루어지지
않고 서로 시장 점유율을 높이려고 노력하던 시대를 Browser War 라고 합니다.</p>
<h2>브라우져 독점의 폐단과 우리의 웹시장</h2>
<p>우리의 웹시장이 IT 에 대한 지원과 더불어 엄청난 속도로 발전을 했다는 것은
모든 사람이 아는 사실입니다. 그리고 그러한 발전이 양적인 발전이지 질적인 발전은
떨어진 다는 것도 대부분의 사람들이 인식하고 있는 사실입니다. …그리고 약간
비약하자면 이러한 현상에 브라우져의 독점 현상이 일조를 했습니다. 사람들은 MS 의
IE 에서 돌아가는 javascript 를 구현하고 MS 에서 제시하는 방법론을 아무 저항없이
받아 들였습니다.</p>

 

제목 바로 다음에 나오는 문단의 첫글자를 크게 나타내고자 할 경우 이 셀렉터를 이용하면 별도의 추가 마크업 없이 쉽게 구현할 수 있다.

 

h2+p:first-letter {
float: left;
font-size: 2.2em;
}

 

별도의 코드 없이 타이틀 바로 다음의 "웹" 이라는 글자와 "우"자를 선택하여 스타일이 적용된다.

 


 

가상 클래스 선택자

first-child 선택자 (A:first-child) - 태그 A로 감싸져 있는 가장 처음 태그를 지정

언어 선택자 (A:lang(B)) - 태그 A중 언어가 B로 설정된 것을 지정

링크 선택자 (A:link) - 태그 A중 링크가 걸려있으면 지정

       (A:visited) - 태그 A중 링크가 걸렸고 사용자가 이미 클릭한 태그를 지정

동적 선택자 (A:active) - 태그 A중 사용자가 마우스를 누르고 있는 태그를 지정

       (A:hover) - 태그 A중 사용자가 마우스 포인터를 위에 올려 놓은 태그를 지정

       (A:focus) - 태그 A중 사용자의 키보드 입력을 받는 태그를 지정

 

E:first-child(:first-child 수도 클래스) : E 엘리먼트 중에서 맨처음 나오는 E엘리먼트를 선택한다.

E:lang(c)(언어 수도 클래스) : 언어가 c인 E엘리먼트를 선택한다.

E:link, E:visited ( 링크 수도 클래스) : 링크가 E엘리먼트와 방문한 E링크 엘리먼트를 선택한다.

E:active, E:hover, E:focus (동적 수도 클래스)  : 사용자 액션이 active, hover, focus인 E엘리먼트들을 선택한다.

 

동적 선택자

:first-line 선택자 (A:first-line) : 태그 A의 문단 중 첫번째 줄을 지정

:first-letter 선택자 (A:first-letter) : 태그 A의 문단 중 첫번째 글자를 지정

:before 선택자 (A:before) : 태그 A의 문단 앞을 지정

:after 선택자 (A:after) : 태그 A의 문단 뒤를 지정

 

3) CSS 선언 방법

 

외부선언 (external css)

<link rel="stylesheet" type="text/css" href="myCss.css" />

HTML <head> 엘리먼트에 위와 같이 선언하여 외부에 별도의 파일로 되어 있는 CSS 정의를 불러온다. 여러 HTML 파일이 하나의 CSS파일을 공유할 수 있어서 표현에 일관성을 갖게 해준다. 우선 순위는 가장 낮다.

 

문서 안에 포함 (embeded css)

<head>
<style type="text/css">
body {
margin: 0;
padding: 0;
}
</style>
</head>

HTML <head> 엘리먼트 안에 <style>엘리먼트를 사용하여 하나의 문서 안에 CSS를 정의한다.

 

엘리먼트에 직접 선언 (inline css)

<div style="padding: 10px; border: 1px solid #eee;">
<p>contents</p>
</div>

HTML 엘리먼트에 style 속성을 이용하여 직접 선언하는 방법이다.

 

사용자 정의 스타일(user defined css)

가장 우선 순위가 높은 선언으로 웹페이지 제작자가 선언하는 것이 아니라 웹사이트를 이용하는 사용자가 직접 자신에게 맞는 스타일을 선언하는 방법이다.

 

4) CSS 적용의 체크 포인트 4가지

 

첫째, XHTML이 표준 문법이어야 한다.

         W3C의 Markup Validation Service(http://validator.w3.org)를 이용

둘째, XHTML 문서가 의미와 구조적으로 구성되어야 한다.

셋째, CSS가 표준 문법이어야 한다.

          주석구문 : CSS /* comment */

                            HTML <!-- comment --> or // comment

          단위표기 : CSS의 값들 중에 0을 제외한 모든 값들은 단위를 표기해야 한다.

 

<td style=”padding: 15 20 10 30;”> (X)

<td style=”padding: 15px 20px 10px 30px;”> (O)

반드시 단위를 기입해주고 세미콜론(;)으로 구문의 끝을 표시해야 한다.

 

잘못된 컬러값 사용 :

컬러의 이름을 넣는 방법 - color : red;

#rrggbb 방법 - color : #ff0000; (=color : #f00;)

rgb(r,g,b) 방법 - color : rgb(255,0,0); (=color:rgb(100%,0%,0%);)

넷째, CSS를 표준대로 잘 구현한 브라우저를 이용해야 한다.

 


 

 

Posted by hellodie
프로그래밍2011/03/21 17:09

출처 : http://force44.blog.me/130102073170

1. 웹표준과 웹접근성

 - 전에

Interent 이란?

∎ International과 Network를 합쳐서 Internet이라고 한다. 여기서 International은 국제적인, Network는 한 대 이상의 컴퓨터를 물리적인 선으로 연결해 놓은 것을 의미한다. 즉, 전 세계의 컴퓨터가 개별적으로 연결되어 있는 네트워크를 연결해 놓은 거대한 통신망이다.


Web이란?

 World Wide Web ☆3가지 모듀 같은 의미☆

∎ Internet 상에 분산되어 존재하는 온간 종류의 정보를 통일된 방법으로 찾아 볼수 있게 하는 광역 정보 서비스 및 소프트웨어를 말한다. 

∎ 인터넷상의 다양한 자원 또는 정보에 쉽게 접근 할 수 있는 기능을 제공해 주는 그래픽 사용자 인터페이스 환경의 하이퍼 텍스트 기반 정보시스템.

∎ 인터넷을 통해 전 세계에 거미줄 처럼 연결 되어 있는 정보를 누구나 쉽게 접근 할 수 있도록 하는 시스템


 인터넷에 있는 정보 자원을 쉽게 접속 할 수 있게 하는 웹의 3가지 기능

1. 규격화되고 통일된 웹 자원의 위치 지정 방법(예:URI)

2. 웹의 자원에 접근 하는 프로토콜(예:HTTP)

3. 자원들 사이에 쉽게 접근 할수 있는 언어(Hypertext) (예:HTML)





=> 결국 모든 인터넷은 웹으로 통한다



- 웹표준

Web이 무엇인지를 알았다면 Web표준을 왜 필요한지 느낌이 올 것이다. @.@

웹 브라우저를 통해 웹을 볼 수 있다. 즉, 하나의 웹 브라우저만 있으면 모든 웹을 볼 수 있어야 하는데 웹을 해석하는 방식이 브라우저간 다르기 때문에 개발자가 개고생한다.!! 맞나?


 W3C의 토론을 통해 나온 권고안(Recomendation)


웹의 창시자 팀버너스리 :

“웹 기술발전을 장려하고 관련기술을 잘 운영하기 위한 규약(Standard)을 개발해 WWW의 잠재성을 최대한 발휘시키기 위함”


∎ 웹브라우저 이기종 간의 호환성 필요 :

   오래된 브라우저 사용자의 불편함을 고려, 기능이라도 호환 가능하도록 해주는 공통된      표현(Cross Browising)필요

 

 웹표준을 지킨다? => W3C의 권고안을 지킨다.


 웹표준 권고안에 따른 웹사이트 개발 방법론


1. 웹표준을 지켜라

∎ XHTML1.x나 HTML4.x 표준에 맞추어진 문서는 99% 접근성이 좋은 사이트

∎ table구조는 div로, font,b등의 태그는 CSS로 사용하라.

ex) 일반적으로 큰 규모의 사이트들을 제외하고는 지켜 지고 않고 있다. 일반 쇼핑몰 가서 스타일 제거해보면 그대로다(테이블을 사용하기 때문).


2. 구조와 표현, 동작 을 분리하라

∎ 문서구조(Markup)과 디자인요소(CSS) 분리 (겉모양은 같으나 HTML은 완전히 다름)

 



∎ 문서(Markup)과 이벤트를 이용한 동작(Javascript)의 분리

 



3. 최소한의 디버깅을 거쳐라

 HTML과XHTML, CSS, DOM, JAVASCRIPT가 표준 문법을 사용 했는지 확인

 http://validator.w3.org - 브라우저유효성검사

 http://jigsaw.w3.org/css-validator - CSS 유효성확인

 http://www.stg.brown.edu/service/xmlvalid - XML 유효성확인

 http://www.iabf.or.kr/web/kadowah.asp - 한국형 접근성 평가 도구


4. 효율적인 웹개발 방법론을 가져라

 HTML에 표현과 내용을 분리하면 기획자와 디자이너, 개발자가 같은 시간내에 같은 일을 하는것이 가능해 짐.


 웹표준의 장점

1. 마크업 용량이 줄어든다.

-> 코드량이 줄어드는 것은 페이지 로딩시간이 빠라짐을 의미

-> 서버의 성능을 효율적으로 관리, 처리능력을 극대화하여 비용절감


2. 컨테츠와 문서모양의 분리.

-> CSS를 사용하여 문서의 유지보수가 쉬어짐.


3. 높은 웹접근성

-> 대부분의 웹브라우저, 휴대폰, PDA, 장애인지원용 소프트웨어등 여러개의 단말기 적용


4. 향후 호환성을 보장받음 : 상호호환성(Cross Browsing)

-> 오래된 브라우저 사용자들의 불편함을 고려

-> 다른 기종 혹은 플랫폼에 따라 달리 구현되는 기술을 비슷하게 만듦과 동시에 어느 한쪽에 최적화되어 치우치지 않도록 공통요소를 사용하여 웹페이지를 제작하는 기법.



정리 :

HTML문서를 문서로써 사용한다. 즉, table을 화면구성을 위해서 쓰는 것이 아니고 table의 원 용도로서 사용 And HTML 자체 내에 텍스트 스타일 관련 Tag 사용 X And 표준으로 채택되지 않은 Tag 사용 X -> <Frame>, <embed> , ....


- 웹접근성 

 1. 모든 인간은 법 앞에 평등하다.! 또한 인터넷 앞에서도 평등하다. 결론은 어떠한 장애를 가진 사람도 인터넷 정보에 접근에 있었어서 불편을 느끼면 안된다.

ex) 앞을 보지 못하는 사람의 경우, 웹을 이용 인터넷에 접근하려고 할때 불편함을 느끼면 안된다. 해결책 -> 나는 못한다.ㅈㅅ

 2. 어떠한 플랫폼으로도 접근 가능해야 한다.

ex) 태블릿PC, SmartPhone, .. (요건 웹표준으로 가능?)

 - 웹접근성에 대한 지침서도 엄청많다.ㅡㅡㅎ

보다 자세한 내용은  ==> http://vryus.blog.me/20103612133 엄청잘나와있다.@.@

[출처] ○ 웹표준과 웹접근성|작성자 샌드

Posted by hellodie
프로그래밍2011/01/22 16:53
< 프로그램 디버그시 유용한 프로그램 >

1. IE
 1)DeBugBar :  http://www.debugbar.com/   
  IE 환경에서 페이지 에러를 확인할수 있는 프로그램이다. FireFox의 FireBug 랑 비슷한 프로그램
 2) IETester : http://www.my-debugbar.com/wiki/
  IE 모든 버전을 기준으로 테스트 할수 있는 프로그램이다
 3) Companion.JS : http://www.my-debugbar.com/wiki/CompanionJS/HomePage
    IE Javascript 테스트 프로그램이다.
    
2. FireFox
1) FireBug : 부가기능 추가로 설치하면 된다.
2) Html Validator : HTML 페이지를 웹표준을 따르고 있는지 테스트 해주는 프로그램
Posted by hellodie
프로그래밍2011/01/13 10:48

출처 : http://blog.naver.com/PostView.nhn?blogId=jsluvhy&logNo=101987161

1. 상위,하위 행번호 return
   FG1.GetNodeRow(FG1.Row,0)  
   parameter : row(행번호), 옵션(0:가장 상위 parent, 1:상위parent .. 등등)
   설명 : 현제 row의 상위(parent) row번호를 리턴한다.

   참조(API)

FlexNTRoot

0

Returns the index of the node's top level ancestor.

FlexNTParent

1

Returns the index of the node's immediate parent.

FlexNTFirstChild

2

Returns the index of the node's first child node.

FlexNTLastChild

3

Returns the index of the node's last child node.

FlexNTFirstSibling

4

Returns the index of the node's first sibling node (may be same row)

FlexNTLastSibling

5

Returns the index of the node's last sibling node (may be same row)

FlexNTPreviousSibling

6

Returns the index of the node's previous sibling node (-1 if this is the first sibling)

FlexNTNextSibling

7

Returns the index of the node's next sibling node (-1 if this is

 

2. Cell color변경
   FG1.Cell(6, i, 0) = 0xfff4dd;
   parameter : 옵션, (시작)row번호, (시작)cell번호, [끝 row번호], [끝 cell번호]
   설명 : 백그라운드 색갈을 바꾼다. 옵션에 따라 색갈뿐만 아니라 여러가지 (foreGroundcolor등..) 도 바꿀수 있다.
   CELL함수 옵션에 따라 여러가지 기능을 표현할수 있다. 참고로 7은 글자색일껄... 13은 BOLD...

   row 전체를 할경우 [ ex) gridList.Cell(6, i, 0, i, gridList.Cols-1) = 0xfff4dd;]

 

2-1. Cell font Bold

    gridList.Cell(13, row, 0, row, gridList.Cols-1) = true;

    설명 : font를 Bold로 지정

 

2-1. Cell 의 이전값 가져오기

   var aa = FG1.Cell(20, i, 0)

   parameter : 옵션, row번호, cell번호
   설명 : 수정전 값을 가져온다.

 

3. 포커스 이동
   FG2.ShowCell(row,1); 
   parameter : row번호, cell번호.
   설명 : 포커스지정, 포커스가있는곳으로 스크롤바 위치 변경

 

4. 더블클릭했을때 수정여부 설정
   FG1.Editable = flexEDKbdMouse; //수정가능  2
   FG1.Editable = flexEDNone; //수정불가 0
   설명 : 폴더 수정가능, 수정 불가

 

5. ROW 삭제
   FG1.RemoveItem(FG1.Row); //선택한 행 삭제

 

6. 좌우정렬
   FG1.Col = FG1.ColIndex("PASSWORD"); //row 선택
   FG1.CellAlignment = flexAlignLeftCenter; //해당 row left 정렬

 

7. 체크박스
   FG1.ColDataType(7) = flexDTBoolean; // 컬럼[7]의 타입을 CHECK_BOX로 선언.
   FG1.AddItem()을 할때 값을 0으로 준다. (그럼 체크되지 않은 체크박스가 해당행에 생성된다)
   FG1.Editable = flexEDKbdMouse;  // Editable 을 해야 체크를 할수 있다.
   설명 : 해당행을 CHECKBOX 로 생성

 

8. 셀값을 가져온다.
   FG1.TextMatrix(i, 7)
   parameter : row(행번호), CELL(열번호)
   설명 : 해당셀의 값을 return

 

9. 전체 row count값을 return
   FG1.Rows 
   설명 : 아래와 같이 모든행의 count를 가져올때 쓴다.
   for(var i=1; i<FG1.Rows; i++)
   {       
 val = FG1.TextMatrix(i, 0); 
   } 
   CELL의 전체COUNT를 가져오려면...FG1.Cols 이거겠지...

 

10. cell index를 구한다. 
    FG1.ColIndex("타이틀"); 
    설명 : 파리미터에 컬럼명을 넣으면 cell index를 return 한다.
    주의 : 만약 VsFlexGridScript.js 를 사용한다면 "E"를 추가해서 넣어라.
           예로 FG1.ColIndex("E타이틀") 이런식으로 말이다. 
           E가 아니고 다른것도 붙을수 있다. 자세한건 나한테 물어라....
    
11. 타이틀을 변경하거나 타이틀값을 가져온다.
    FG1.TextArray(0) = "타이틀";
    파라미터 : CELL INDEX 
    설명 : 타이틀을 변경하거나 타이틀 값을 가져올때 사용한다.

            단 이것은 ColIndex(컬럼키)의 컬럼키와 다른 단순한 name일뿐이다.

 

11-1 Column index에 해당하는 Key를 가져온다.

     var colName = gridList.ColKey(j);

 

12. 행 위치를 이동한다.
    FG1.RowPosition(1) = 2;
    파라미터 : ROW INDEX
    설명 : 한마디로 1 ROW 를 2번자리로 옮기고 2번놈은 1번놈으로 가라. 이런거지..

 

13. TREE 형태로 표현   

    FG1.OutlineBar = 2;                
    FG1.OutlineCol = gridList.ColIndex("WBS");   // WBS란 컬럼을 트리로 지정한다.

    일단 위 두줄에 구문을 실행한다.
    FG1.IsSubtotal(FG1.Rows - 1) = true; 

    FG1.RowOutlineLevel(FG1.Rows - 1) = level;   
    위 두 구문은 TREE에서 공식과 같은 구문이다. 
    ROW를 하나씩 그릴때마 이구문은 무조건적으로 들어가야한다.
    이구분을 빼면 그냥 테이블 형태로 그려질껄...

 

13-1. Tree를 열다/닫다

// 몇번 행의 트리를 열어라.

FG1.IsCollapsed(nodeRowNum) = 0; //0모두 열고, 1은.. 2... 

 

14. row에 hidden 값을 준다..??
    FG1.RowData(0) = "abcd";
    설명 : 행마다 보이지 않는 특별한 값을 준다.... 불필요할꺼같은데.. 일단 적어놓자.. 기록은 필수.!!
           이걸 설명해놓으면 FG1.RowData(i)라는 걸로 검색이 되는데 이건 할줄모르겠당...

 

15. cursor 위치를 옮긴다.

    FG1.Row = 5 <== 커서를 5번째줄로 이동

 

16. ROW 추가

    FG2.AddItem (mvArray[i].NAME, j+1);   // 명칭(\t 구분),   행
    FG2.IsSubtotal(j+1) = true;                  // 이거랑 아래껀 그냥 셋트라고 생각해라.
    FG2.RowOutlineLevel(j+1) = 3;           // level를 넣는다.

 

17. 셀 병합

   FG2.MergeCells = 4;
   FG2.MergeCol(-1) = true;

   설명 : AddItem 이 같은 셀(세로)을 병합한다.  

   FG2.MergeCells = 1;  
   FG2.MergeRow(-1) = true; 

   설명 : AddItem 이 같은 셀(가로)을 병합한다.

 

18. Row의 Level 구하기

    VSFlexGrid.RowOutlineLevel(Row As Long) [ = value As Integer ]

 

19.  fixed 된 row를 구한다. & 설정한다.

      설명 : header부분다음줄 즉 fixed된 row를 구한다.

      FG1.gridList.FixedRows;

      FG1.FixedRows = 2;

 

20. COMBO BOX

     설명 : 특정 컬럼을 COMBO로 설정

     문법 : VSFlexGrid.ColComboList(Col As Long)[ = value As String ]

     예제 : fg.ColComboList(1) = "#1;Full time|#23;Part time|#65;Contractor|#78;Intern|#0;Other"

 

21. row를 감춘다.

     gridList.RowHidden(row) = "True";

 

22. col을 감춘다.

     gridList.ColHidden(col) = "True";

 

23. formatting

    VSFlexGrid.ColFormat(Col As Long)[ = value As String ]

       Format             Content             Display

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

       #,###.##           1234.56             1,234.56

 

24. 해당 행/열 선택

     VSFlexGrid.Select(i, j);

     설명 : i 는 row 고 j는 셀이다. i 행의 j 열을 선택한다. 보통 (3. 포커스 이동)과  함께 쓰인다.

 

25. Cell에 프로그래스 바 표시

     gridList.Cell(flexcpFloodPercent, Row, Col) = 50   <========= 50%를 표시
     gridList.FloodColor  = 0xfec8c5;  <============= 프로그래스바 색

 

26. SelectionMode

     gridList.SelectionMode = 3;     

     설명 : 그리드를 선택 즉 클릭 했을때 선택되어 보여지는 범위를 설정한다.

     옵션 : 0  : (default) 아무것도 선택 안한다.

              1 : row

              2 : Column

              3 : row + Ctrl기능 사용가능

 

27. 제목 표시줄 (Head, (Title)) 또는 Row 을 숨긴다.

     FG1.RowHidden(0) = true; // 위에 제목표시줄을 없엔다.

 

28. Column을 숨긴다.

     FG1.ColHidden([colIndex]) = true;

 

29. GRID 전체 수정, 비수정 모드

     gridList.Editable = 0; //수정 불가.    보통 EnterCell Event와 함께 쓴다.

 

=========================== EVENT ============================

1. AfterEdit(row, col)

   - KeyIn이 완료 되었을때 시점

 

 

 

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

본 소스에 주석처리를 해놓았습니다. 아마 이걸 이용해서 엑셀만한 기능은 못될지언정 비스무리 하게 만들 수는 있을 것 같네요. 

소스내용은 MSHFlexGrid와 텍스트 박스를 이용해서 현재 선택된 셀에 텍스트 박스를 위치시켜 값을 입력받을 수 있게 하며

마우스 포인터가 다른 셀등으로 빠져 나갔을 경우 입력한 값을 셀에 입력합니다. 



더 응용해서 1, 2, 3번째 셀에 숫자값을 입력하면 바로바로 5번째 셀에 1, 2, 3셀의 값을 더해서 뿌려줍니다. 

4번째 셀은 마우스가 가도 입력되지 못하는 코드를 추가했습니다. 



아래는 젤 중요한 대목입니다. 사실 이 코드 밖에 없죠.

Dim PrevRow                         As Byte

Dim PrevCol                          As Byte  '이전에 선택된 셀

Dim SelRow                           As Byte

Dim SelCol                           As Byte  '선택된 셀 저장



Private Sub XpathGrid_Click()

    Dim i As Byte

    TxtInput.Text = ""

    TxtInput.SetFocus

    If XpathGrid.MouseCol = 0 Or XpathGrid.MouseRow = 0 Then Exit Sub

    '현재 선택한 셀이 0,0이면 그냥 빠져나갑니다.

    If XpathGrid.MouseCol = 4 Then Exit Sub

    '4번째 Col셀일 경우 입력받지 못하게 합니다.

        

    SelRow = XpathGrid.MouseRow - 1 '현재 선택한 Row값을 구합니다.

    SelCol = XpathGrid.MouseCol - 1 '현재 선택한 Col값을 구합니다.

    

    TxtInput.Top = XpathGrid.Top + (XpathGrid.RowHeight(XpathGrid.MouseRow) * XpathGrid.MouseRow) + 25

    '현재 텍스트 박스의 Top의 위치를 구합니다.

    TxtInput.Left = XpathGrid.Left + (XpathGrid.ColWidth(XpathGrid.MouseCol) * XpathGrid.MouseCol) - 65

    '현재 텍스트 박스의 Left의 위치를 구합니다.

    PrevCol = XpathGrid.MouseCol: PrevRow = XpathGrid.MouseRow

    '현재 선택한 셀의 위치를 이전위치변수값에 저장합니다.

End Sub



Private Sub XpathGrid_LeaveCell()

'셀에서 포커스가 뜨게 되면

    XpathGrid.TextMatrix(PrevRow, PrevCol) = TxtInput.Text '텍스트 박스에 입력한 값을 셀에 입력합니다.

    XpathGrid.CellAlignment = flexAlignCenterCenter '가운데 위치하도록

    TxtInput.Move 4460, 4270 '텍스트 박스를 안보이는 곳으로 위치

    

    XpathGrid.TextMatrix(PrevRow, 5) = Val(XpathGrid.TextMatrix(PrevRow, 1)) + Val(XpathGrid.TextMatrix(PrevRow, 2)) + Val(XpathGrid.TextMatrix(PrevRow, 3))

    '값을 더해 맨우측에 값을 넣습니다. Val()는 문자는 0으로 취급합니다. 예외오류 사항 체크는 IsNumeric()함수로 하시면 되겠죠?

End Sub








참고로 MSDN에 있는 MSGFlexGrid의 상수값도 참고해보세요



참고. MSHFlexGrid 컨트롤 상수 (MSDN에서 발췌합니다.)



이 절에는 MSHFlexGrid의 컨트롤 상수를 설명합니다. 다른 언급이 없을 경우 이들 상수는 MSFlexGrid에도 적용할 수 있습니다. 

AddModeSettings 속성(MSHFlexGrid)
상수 값 설명 
flexNoAddNew 0 현재 셀이 마지막 행에 있지 않고 보류 중인 AddNew 작업도 없습니다. 
flexAddNewCurrent 1 현재 셀이 마지막 행에 있지만 보류 중인 AddNew 작업은 없습니다. 
flexAddNewPending 2 현재 셀이 마지막 행 다음에 있습니다. 이것은 MSHFlexGrid의 사용자 인터페이스를 통해 사용자가 시작한 보류 AddNew 작업의 결과이거나 프로그램적으로 열의 Value나 Text 속성을 설정한 결과입니다. 


AllowUserResizing 속성
상수 값 설명 
flexResizeNone 0 마우스로 크기를 재조정할 수 없습니다. 기본값입니다. 
flexResizeColumns 1 마우스로 열의 크기를 재조정할 수 있습니다. 
flexResizeRows 2 마우스로 행의 크기를 재조정할 수 있습니다. 
flexResizeBoth 3 마우스로 열과 행의 크기를 재조정할 수 있습니다. 


Appearance 속성
상수 값 설명 
flexFlat 0 MSHFlexGrid의 전체 모양이 평면이거나 표준입니다. 
flex3D 1 MSHFlexGrid의 전체 모양이 3차원입니다. 


BorderStyle 속성
상수 값 설명 
flexBorderNone 0 테두리가 없습니다. 
flexBorderSingle 1 단일 테두리입니다. 


CellAlignment 속성
상수 값 설명 
flexAlignLeftTop 0 셀 내용을 왼쪽 위로 맞춥니다. 
flexAlignLeftCenter 1 셀 내용을 왼쪽 가운데로 맞춥니다. 문자열에 대한 기본값입니다. 
flexAlignLeftBottom 2 셀 내용을 왼쪽 아래로 맞춥니다. 
flexAlignCenterTop 3 셀 내용을 가운데 위로 맞춥니다. 
flexAlignCenterCenter 4 셀 내용을 중앙에 놓습니다. 
flexAlignCenterBottom 5 셀 내용을 가운데 아래로 맞춥니다. 
flexAlignRightTop 6 셀 내용을 오른쪽 위로 맞춥니다. 
flexAlignRightCenter 7 셀 내용을 오른쪽 가운데로 맞춥니다. 숫자에 대한 기본값입니다. 
flexAlignRightBottom 8 셀 내용을 오른쪽 아래로 맞춥니다. 
flexAlignGeneral 9 셀 내용을 일반적인 맞춤 방법으로 정렬합니다. 문자열에 대해서는 "왼쪽 가운데"로 숫자에 대해서는 "오른쪽 가운데"로 맞춥니다. 


CellPictureAlignment 속성
상수 값 설명 
flexAlignLeftTop 0 그림을 왼쪽 위로 맞춥니다. 
flexAlignLeftCenter 1 그림을 왼쪽 가운데로 맞춥니다. 
flexAlignLeftBottom 2 그림을 왼쪽 아래로 맞춥니다. 
flexAlignCenterTop 3 그림을 가운데 위로 맞춥니다. 
flexAlignCenterCenter 4 그림을 중앙에 놓습니다. 
flexAlignCenterBottom 5 그림을 가운데 아래로 맞춥니다. 
flexAlignRightTop 6 그림을 오른쪽 위로 맞춥니다. 
flexAlignRightCenter 7 그림을 오른쪽 가운데로 맞춥니다. 
flexAlignRightBottom 8 그림을 오른쪽 아래로 맞춥니다. 


CellTextStyle, TextStyle, TextStyleFixed 속성
상수 값 설명 
flexTextFlat 0 표준 평면 텍스트입니다. 
flexTextRaised 1 텍스트가 볼록하게 표시됩니다. 
flexTextInset 2 텍스트가 오목하게 표시됩니다. 
flexTextRaisedLight 3 텍스트가 약간 볼록하게 표시됩니다. 
flexTextInsetLight 4 텍스트가 약간 오목하게 표시됩니다. 


CellType 속성(MSHFlexGrid)
상수 값 설명 
flexCellTypeStandard 0 표준 셀입니다. 
flexCellTypeFixed 1 고정된 행이나 열에 포함된 셀입니다. 
flexCellTypeHeader 2 데이터 밴드의 머리글 셀입니다. 
flexCellTypeIndent 3 데이터 밴드를 들여쓰기하는 열에서 사용하는 셀입니다. 
flexCellTypeUnpopulated 4 채워지지 않는 셀입니다. 


ColAlignment 속성
상수 값 설명 
flexAlignLeftTop 0 열 내용을 왼쪽 위로 맞춥니다. 
flexAlignLeftCenter 1 열 내용을 왼쪽 가운데로 맞춥니다. 문자열에 대한 기본값입니다. 
flexAlignLeftBottom 2 열 내용을 왼쪽 아래로 맞춥니다. 
flexAlignCenterTop 3 열 내용을 가운데 위로 맞춥니다. 
flexAlignCenterCenter 4 열 내용을 중앙에 놓습니다. 
flexAlignCenterBottom 5 열 내용을 가운데 아래로 맞춥니다. 
flexAlignRightTop 6 열 내용을 오른쪽 위로 맞춥니다. 
flexAlignRightCenter 7 열 내용을 오른쪽 가운데로 맞춥니다. 숫자에 대한 기본값입니다. 
flexAlignRightBottom 8 열 내용을 오른쪽 아래로 맞춥니다. 
flexAlignGeneral 9 열 내용을 일반적인 맞춤 방법으로 정렬합니다. 문자열에 대해서는 왼쪽 가운데로 숫자에 대해서는 오른쪽 가운데로 맞춥니다. 


ColHeader 속성(MSHFlexGrid)
상수 값 설명 
FlexColHeaderOn 0 각 밴드에 머리글을 표시합니다. 
flexColHeaderOff 1 밴드에 머리글이 표시되지 않습니다. 
flexColHeaderOnce 2 밴드에 머리글을 표시합니다. 밴드가 축소되면 한 개의 머리글만 표시됩니다. 이중 머리글은 표시되지 않습니다. 


DisplayBandSettings 속성(MSHFlexGrid)
상수 값 설명 
flexBandDisplayHorizontal 0 MSHFlexGrid내의 밴드가 수평으로(가로질러) 표시됩니다. 기본값입니다. 
flexBandDisplayVertical 1 MSHFlexGrid내의 밴드가 수직으로(위 아래로) 표시됩니다. 


DisplayCellSettings 속성(MSHFlexGrid)
상수 값 설명 
FlexCellDisplayHorizontal 0 MSHFlexGrid내의 밴드가 수평으로(가로질러) 표시됩니다. 
flexCellDisplayVertical 1 MSHFlexGrid내의 밴드가 수직으로(위 아래로) 표시됩니다. 


FillStyle 속성
상수 값 설명 
flexFillSingle 0 단일. Text나 셀의 속성을 변경할 경우 활성 셀만 영향을 받습니다. 기본값입니다. 
flexFillRepeat 1 반복. Text나 셀의 속성을 변경할 경우 선택된 모든 셀이 영향을 받습니다. 


FocusRect 속성
상수 값 설명 
flexFocusNone 0 현재 셀 주위에 포커스 사각형을 표시하지 않습니다. 
flexFocusLight 1 현재 셀 주위에 가는 포커스 사각형을 표시합니다. 기본값입니다. 
flexFocusHeavy 2 현재 셀 주위에 굵은 포커스 사각형을 표시합니다. 


GridLines, GridLinesFixed 속성
상수 값 설명 
flexGridNone 0 선 없음. 셀 사이에 선이 없습니다. MSFlexGrid에서 GridLines의 기본값입니다. 
flexGridFlat 1 선. 셀 사이의 선 유형이 표준 평면 선으로 설정됩니다. MSHFlexGrid에서 GridLines의 기본값입니다. 
flexGridInset 2 오목한 선. 셀 사이의 선 유형이 오목한 선으로 설정됩니다. MSFlexGrid에서 GridLinesFixed의 기본값입니다. 
flexGridRaised 3 볼록한 선. 셀 사이의 선 유형이 볼록한 선으로 설정됩니다. MSHFlexGrid에서 GridLinesFixed의 기본값입니다. 


HighLight 속성
상수 값 설명 
flexHighlightNever 0 선택된 셀을 반전하지 않습니다. 
flexHighlightAlways 1 선택된 셀을 항상 반전합니다. 기본값입니다. 
FlexHighlightWithFocus 2 컨트롤에 포커스가 있을 경우에만 반전합니다. 


MergeCells 속성
상수 값 설명 
flexMergeNever 0 병합 안함. 동일한 내용을 가진 셀들을 그룹화하지 않습니다. 기본값입니다. 
flexMergeFree 1 자유. 동일한 내용을 가진 셀들을 항상 병합합니다. 
flexMergeRestrictRows 2 행 제한. 행 내에서 동일한 내용을 갖는 인접 셀(현재 셀의 왼쪽에 있는)만 병합합니다. 
flexMergeRestrict-Columns 3 열 제한. 열 내에서 동일한 내용을 갖는 인접 셀(현재 셀의 위에 있는)만 병합합니다. 
flexMergeRestrictBoth 4 모두 제한. 행이나 열 내에서 동일한 내용을 갖는 인접 셀(현재 셀의 왼쪽 또는 위에 있는)만 병합합니다. 


MousePointer 속성
상수 값 설명 
flexDefault 0 MSHFlexGrid의 윤곽 
flexArrow 1 화살표 
flexCross 2 십자 모양 
flexIBeam 3 텍스트 입력을 위한 I형 
flexIcon 4 정사각형 내의 정사각형 
flexSize 5 위, 아래, 왼쪽, 오른쪽을 가리키는 화살표 모양의 크기 조정 포인터 
flexSizeNESW 6 오른쪽 위와 왼쪽 아래를 가리키는 화살표 모양의 크기 조정 포인터 
flexSizeNS 7 위와 아래를 가리키는 화살표 모양의 크기 조정 포인터 
flexSizeNWSE 8 왼쪽 위와 오른쪽 아래를 가리키는 화살표 모양의 크기 조정 포인터 
flexSizeEW 9 왼쪽과 오른쪽을 가리키는 화살표 모양의 크기 조정 포인터 
flexUpArrow 10 위쪽 화살표 
flexHourGlass 11 모래 시계 모양 
flexNoDrop 12 포인터 놓기 못함 
flexCustom 13 사용자 정의 포인터 


PictureType 속성
상수 값 설명 
flexPictureColor 0 전체 색상을 사용한 고품질의 이미지를 만듭니다.  
flexPictureMonochrome 1 메모리를 적게 사용하는 저품질의 단색 이미지를 만듭니다. 


RowSizingSettings 속성(MSHFlexGrid)
상수 값 설명 
flexRowSizeIndividual 0 행의 크기를 재조정할 경우 조정된 행만 높이가 변경됩니다. 기본값입니다. 
flexRowSizeAll 1 행의 크기를 재조정할 경우 MSHFlexGrid의 모든 행 높이가 변경됩니다. 


SelectionMode 속성
상수 값 설명 
flexSelectionFree 0 자유. MSHFlexGrid의 각 셀을 스프레드시트 유형으로 선택할 수 있습니다. 기본값입니다. 
flexSelectionByRow 1 행 단위. 다중 열 목록 상자나 레코드 단위로 표시할 때처럼 전체 행 단위로만 선택할 수 있습니다. 
flexSelectionByColumn 2 열 단위. 차트의 범위를 선택하거나 정렬을 위해 필드를 선택할 때처럼 열 단위로만 선택할 수 있습니다. 


ScrollBars 속성
상수 값 설명 
flexScrollNone 0 MSHFlexGrid에 스크롤 막대가 없습니다. 
flexScrollHorizontal 1 MSHFlexGrid에 수평 스크롤 막대를 둡니다. 
flexScrollVertical 2 MSHFlexGrid에 수직 스크롤 막대를 둡니다. 
flexScrollBoth 3 MSHFlexGrid에 수평 및 수직 스크롤 막대를 둡니다. 기본값입니다. 


Sort 속성
상수 값 설명 
flexSortNone 0 없음. 정렬하지 않습니다. 
flexSortGenericAscending 1 일반 오름차순. 텍스트가 문자열인지 숫자인지를 예측하는 오름차순 정렬을 수행합니다. 
flexSortGenericDescending 2 일반 내림차순. 텍스트가 문자열인지 숫자인지를 예측하는 내림차순 정렬을 수행합니다. 
flexSortNumericAscending 3 숫자 오름차순. 문자열을 숫자로 변환하는 오름차순 정렬을 수행합니다. 
flexSortNumericDescending 4 숫자 내림차순. 문자열을 숫자로 변환하는 내림차순 정렬을 수행합니다. 
flexSortStringNoCaseAsending 5 문자열 오름차순. 대/소문자를 구분하지 않는 문자열 비교를 사용하는 오름차순 정렬을 수행합니다. 
flexSortNoCaseDescending 6 문자열 내림차순. 대/소문자를 구분하지 않는 문자열 비교를 사용하는 내림차순 정렬을 수행합니다. 
flexSortStringAscending 7 문자열 오름차순. 대/소문자 구분 문자열 비교를 사용하는 오름차순 정렬을 수행합니다. 
flexSortStringDescending 8 문자열 내림차순. 대/소문자 구분 문자열 비교를 사용하는 내림차순 정렬을 수행합니다. 
flexSortCustom 9 사용자 정의. Compare 이벤트를 사용하여 행을 비교합니다.

 

====================================================================================================================

 

FlexGrid Insert/Remove Example
 
SUMMARY
 
이번에는 FlexGrid에서 특정 위치에 칼럼을 삽입하거나 삭제하는 방법을 배워볼 것이다. 엑셀에서 칼럼을 추가하거나 삭제할 때의 방식과 비슷하도록 하기 위해 고정행 위에서 마우스 오른쪽 버튼을 클릭할 때 팝업 메뉴를 표시한 후 처리하도록 구성했다(아래 그림 참조). 추가가 가능한 칼럼은 과목 칼럼으로 한정한다.


 




BASIS

이 예제를 완성하려면 비주얼 베이직에서 팝업 메뉴를 표시하는 방법과FlexGrid에서 칼럼을 추가하거나 삭제하는 간단한 방법에 대해 알아야 한다.당연하게도(^^).... 참고문헌 [1], [2]에서 각 방법에 대한 친절한 설명을 찾을 수 있었다. 아래에 퍼왔으니 참고하시길...
 
 
Pop-Up Menus (참고문헌 [2]에서 가져왔음)

Visual Basic also supports pop-up menus, those context-sensitive menus that most commercial applications show when you right-click on an user interface object. In Visual Basic, you can display a pop-up menu by calling the form's PopupMenu method, typically from within the MouseDown event procedure of the object:
 
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, _
        X As Single, Y As Single)
    If Button And vbRightButton Then
        ' User right-clicked the list box.
        PopupMenu mnuListPopup
    End If
End Sub

The argument you pass to the PopupMenu method is the name of a menu that you have defined using the Menu Editor. This might be either a submenu that you can reach using the regular menu structure or a submenu that's intended to work only as a pop-up menu. In the latter case, you should create it as a top-level menu in the Menu Editor and then set its Visible attribute to False. If your program includes many pop-up menus, you might find it convenient to add one invisible top-level entry and then add all the pop-up menus below it. (In this case, you don't need to make each individual item invisible.) The complete syntax of the PopupMenu method is quite complex:
 
PopupMenu Menu, [Flags], [X], [Y], [DefaultMenu]
 

By default, pop-up menus appear left aligned on the mouse cursor, and even if you use a right-click to invoke the menu you can select a command only with the left button. You can change these defaults using the Flags argument. The following constants control the alignment: 0-vbPopupMenuLeftAlign (default), 4-vbPopupMenuCenterAlign, and 8-vbPopupMenuRightAlign. The following constants determine which buttons are active during menu operations: 0-vbPopupMenuLeftButton (default) and 2-vbPopupMenuRightButton. For example, I always use the latter because I find it natural to select a command with the right button since it's already pressed when the menu appears:
 

PopupMenu mnuListPopup, vbPopupMenuRightButton
 

The x and y arguments, if specified, make the menu appear in a particular position on the form, rather than at mouse coordinates. The last optional argument is the name of the menu that's the default item for the pop-up menu. This item will be displayed in boldface. This argument has only a visual effect; If you want to offer a default menu item, you must write code in the MouseDown event procedure to trap double-clicks with the right button.
 
 
 
ColPosition Property
Moves a given column to a new position.
 
Syntax
[form!]vsFlexGrid.ColPosition(Col As Long)[ = NewPosition As Long ]
 
Remarks
The Col and NewPosition parameters must be valid column indices (in the range 0 to Cols - 1), or an error will be generated.
When a column or row is moved with ColPosition or RowPosition, all formatting information moves
with it, including width, height, alignment, colors, fonts, etc. To move text only, use the Clip property instead.
The ColPosition property gives you programmatic control over the column order. You may also use the ExplorerBar property to allow users to move columns with the mouse.
 
 
IMPLEMENTATION
 
팝업 메뉴를 표시하는 이벤트로 MouseUp을 선택했다. 일단 마우스 오른쪽 버튼을 눌렀는지 확인한 후 다음으로 과목명 칼럼을 클릭했는지 확인한다. 두가지 조건을 모두 만족하면 엑셀의 동작방식과 비슷한 효과를 주기 위해 해당 칼럼을 모두 선택 상태로 만들고 팝업 메뉴를 표시한다.
 
Private Sub FG_MouseUp(Button As Integer, Shift As Integer, _
                       X As Single, Y As Single)
    If Button And vbRightButton Then
        
과목명 셀을 클릭할 때만 팝업 메뉴를 표시한다.
        If (FG.MouseRow = 1) And (FG.MouseCol > 1) And (FG.MouseCol < FG.Cols - 2) Then
            
선택한 느낌이 들도록....
            FG.Col = FG.MouseCol
            FG.Row = FG.MouseRow + 1
            FG.RowSel = FG.Rows - 1
            FG.ColSel = FG.MouseCol

            
팝업 메뉴 표시함.
            PopupMenu mnuGridPopup
        End If
    End If
End Sub
 
 
"Insert Column" 메뉴를 선택하면 과목명을 입력받은 후 칼럼을 추가하고 양식을 유지시키기 위한 몇가지 작업을 추가로 처리한다. 핵심 코드는 굵게 표시한 2줄이다. 칼럼수를 늘린 후에 ColPosition 속성을 이용해서 추가된 칼럼(.Cols-1)을 사용자가 선택한 칼럼(.Col) 앞으로 이동시키는 것이다. 아주 간편하게 처리된다.
 
Private Sub mnuInsertColumn_Click()
    With FG
        ' insert column
        Dim str As String
        str = InputBox("
과목명을 입력하세요")
        If str <> "" Then
            .Cols = .Cols + 1          ' add column
            .ColPosition(.Cols - 1) = .Col    ' move into place

            .Cell(flexcpText, 1, .Col) = str
            .Cell(flexcpAlignment, 1, .Col) = flexAlignCenterCenter
            .Cell(flexcpText, 0, .Col) = "
과목"
        End If
    End With
End Sub
 
 
 
 
"Remove Column" 메뉴를 선택하면 사용자가 선택한 칼럼(.Col)을 마지막 칼럼(.Cols-1)으로 이동시킨 후에 칼럼의 수를 1만큼 감소시켜 삭제하는 효과를 준다. 어려울게 없다.
 
Private Sub mnuRemoveColumn_Click()
    With FG
        ' delete column
        .ColPosition(.Col) = .Cols - 1 ' move to right
        .Cols = .Cols - 1              ' delete column

        
칼럼이 삭제됐으므로 계산을 다시 수행한다.
        Dim nTotal As Integer
        Dim dAverage As Single

        For i = 2 To .Rows - 1
            nTotal = .Aggregate(flexSTSum, i, 2, i, .Cols - 3)
            dAverage = .Aggregate(flexSTAverage, i, 2, i, .Cols - 3)

            .Cell(flexcpText, i, .Cols - 2) = CStr(nTotal)
            .Cell(flexcpText, i, .Cols - 1) = Format(dAverage, "#,##.0")
        Next
    End With
End Sub
 
 
지금까지 FlexGrid가 제공하는 기능 중 내가 주로 쓸 몇가지 기능 위주로 알아봤다. 매뉴얼을 살펴보니 이것 외에도 다양한 기능을 제공하는데, 그럼에도 불구하고 300달러의 가격 밖에 안되니 가격대 성능비가 뛰어난 제품이라 하겠다. 아주 마음에 든다.
 
 
REFERENCE
 
[1] VSFlexGrid 8.0 Manual, ComponentOne, 2005.
     - f:\ftp_root\program\develop\FlexGrid\VSFlexGrid8Manual2005.pdf
     - pp.269, FAQ: How can I add or delete a column at a given position?
[2] Francesco Balena, "Programming Microsoft Visual Basic 6.0", Microsoft Press, 1999.
     - Chapter 3. Intrinsic Controls, Menus.
 
Project Folder : D:\KDSONG\Study\Visual Basic\Controls\VSFlexGrid\FlexGridInsertRemove\
 
KEYWORDS : FlexGrid grid selection insert remove column copy paste 리드 복사 붙여넣기 선택 영역
열 칼럼 삽입 삭제
Posted by hellodie
프로그래밍2011/01/12 10:31

출처 : utils.egloos.com/3011811 

ant 사용법이라고 하는데....잘모르겠고...일단 퍼왔음

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

아래 내용은 
고수로 가는 지름길! Jakarta Project
이클립스 기반 프로젝트 필수 유틸리티: CVS, Ant, JUnit
두 책의 ant 부분을 보고 정리하였습니다.

# build.xml 파일의 기본구조
<?xml version="1.0" encoding="euc-kr"?>
<project name="projectName" default="defaultTargetName" basedir=".">
 <property name="" location=""/>
 <target name="">...</target>
 <target name="" depends="">...</target>
 <target name="" depends="">...</target>  
 <target name="" depends="" if="">...</target> 
 <target name="" depends="" unless="">...</target>  
</project>

# project 태그 
 1) name : 프로젝트의 이름 
 2) default : Ant를 실행할때 target을 지정하지 않은 경우 기본적으로 사용할 target (필수)
 3) basedir : 경로 계산할때의 기준 디렉토리. 지정하지 않은 경우 현재 디렉토리가 basedir로 사용된다. basedir 프로퍼티의 값으로도 사용된다.

# target 태그
 1) name : 타켓의 이름 (필수)
 2) depends : 이 타겟이 의존하고 있는 타겟의 목록. 각 타켓의 이름은 ,(콤마) 로 구분한다.
 3) if : 지정한 프로퍼티가 설정되어 있는 경우 이 타겟을 수행한다.
 4) unless : 지정한 프로퍼티가 설정되어 있지 않은 경우 이 타겟을 수행한다.
 5) description : 타겟이 수행하는 기능에 대한 설명
 
# ant 경로 규칙 
 1) * : 0개 또는 그이상의 글자가 매칭
 2) ? : 한글자와 매칭 
 3) ** : 다계층을 나타냄  예) dir/**/A => dir/dir1/A, dir/dir2/A, dir/dir1/dirA/A 다 포함.
 4) / 또는 \ 으로 끝날 경우  : /** 또는 \** 과 동일
 
# includes 속성 : 포함시킬 파일의 목록 (include 태그, includesfile 속성으로 사용 가능)

# excludes 속성 : 제외시킬 파일의 목록 (exclude 태그, excludesfile 속성으로 사용 가능)

# excludes 속성 명시 여부에 상관없이 제외 되는 것들 : 제외 시키고 싶지 않을 경우 defaulteexcludes = "no" 설정
 - **/*~, **/#*#, **/.#*, **/%*%, **/._*
 - **/CVS, **/CVS/**, **/.cvsignore
 - **/SCCS, **/SCCS/**
 - **/vssver.scc
 - **/.svn, **/.svn/**
 - **/.DS_Store

# fileset 태그 : 파일 집합
 1) dir : 파일 집합을 표시할 때의 루트 디렉토리 (dir 또는 file 중 한개 반드시 명시)
 2) file : 한 개의 파일을 명시할 때 사용하는 속성  (dir 또는 file 중 한개 반드시 명시)
 3) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
 4) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
  사용 예)
 <fileset dir="${basedir}/src" defaultexcludes="no">
  <include name="**/*.java"/>
  <include name="**/*.properties"/>
  <exclude name="**/*.bak"/>
 </fileset>

# dir 태그 : 디렉토리 집합
 1) dir : 디렉토리 집합을 표시할 때의 루트 디렉토리 (필수)
 2) casesensitive : 대소분자 구분 여부 (true/false) 기본값 true
 3) followsymlinks : 심볼릭 링크를 따라갈지의 여부 (true/false) 기본값 true)
  사용 예)
 <dirset dir="" includes="" excludes=""/>
 
# patternset 태그 : 재사용 가능한 파일 집합
 사용 예)
 <patternset id="commonJar">
  <include name="servlet.jar"/>
  <include name="mail.jar"/>
  <include name="activation.jar"/>    
 </patternset>
 
 <fileset dir="j2eelib">
  <patternset refid="commonJar"/>
 </fileset>
 
# path 태그 : 재사용 가능한 경로 목록의 집합
 사용 예)
 <path id="project.class.path">
  <pathelement location="fileupload/WEB-INF/classes"/>
  <pathelement path="lib/servlet.jar;lib/commons-fileupload-1.0.jar"/>
 </path>
 
 <classpath refid="project.class.path"/>
 
 - location : 하나의 파일 또는 디렉토리 지정
 - path : 여러 경로를 지정 (; 또는 : 으로 구분)


# 아래의 build.xml 파일에서 ant makeZip 을 할경우 complie 은 두번이 아닌 한번만 실행되게 된다.
 <project name="build" default="makeZip" basedir=".">
  <target name="compile"/>
   <target name="srcCopy" depends="compile"/>
   <target name="classCopy" depends="compile"/>
   <target name="makeZip" depends="srcCopy, classCopy"/>
 </project>

# property 태그 : property 지정
 1) name : 프로퍼티의 이름
 2) value : 프로퍼티의 값을 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
 3) location : 지정한 경로명의 절대 경로명을 값으로 지정 (name 속성 지정시 value 또는 location 둘중 하나 반드시 사용)
 4) resource : 프로퍼티 파일을 읽어 올 때 사용할 자원명을 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 5) file : 지정한 파일로부터 프로퍼티 목록을 읽어 온다 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 6) environment : 환경 변수를 읽어 올때 사용할 접두어를 지정 (name 속성 사용않는 경우 resource, file, environment 중 하나 반드시 사용)
 7) classpath : 자원으로부터 프로퍼티 파일을 읽어 올 때 사용할 클래스 패스
 8) classpathref : 클래스패스로 사용할 경로를 path 태그 로 부터 가져온다.
 9) prefix : resource 또는 file 속성을 사용하여 읽어 온 프로퍼티를 참조할 때 사용할 접두어를 지정한다. 만약 접두어 맨뒤에 "." 가 포함되어 있지 않을 경우, 자동으로 "."이 접두어 뒤에 붙는다.
 사용 예)
 <property file="${basedir}/buildprop/global.properties"/>
 
 <property environment="env"/>
 <echo message="JAVA_HOME ${env.JAVA_HOME}"/>

# 기본 프로퍼티 : property 태그 사용하지 않아도 사용 가능한 프로퍼티
 - 모든 자바의 시스템 프로퍼티
 - basedir : 프로젝트의 기본 디렉토리의 절대 경로. project 태그의 basedir 속성에 명시된 값
 - ant.file : 빌드 파일의 절대 경로
 - ant.version : Ant 버전
 - ant.project.name : 현재 실행주인 프로젝트의 이름. project 태그의 name 속성에 명시된 값
 - ant.java.version : Ant 가 발견한 자바 버전.
 
# javac
 1) srcdir : 소스가 위치한 디렉토리 (src 태그로 지정가능. 둘 중 하나 필수)
 2) descdir : 생성된 클래스가 위치할 디렉토리를 지정. javac -d 옵션과 동일
 3) classpath : 컴파일할 때 사용할 클래스패스 (class 태그로 지정 가능)
 4) classapathref : path 태그로 지정한 경로를 클래스패스로 참조
 5) encoding : 소스파일의 인코딩을 지정. javac -encoding 옵션과 동일
 6) nowarn : 컴파일시 -nowarn 옵션 추가 (on) 기본값은 off
 7) deprection : 컴파일시 -deprecation 옵션 추가 (on) 기본값은 off
 사용 예)
 <javac srcdir="" descdir="">
  <classpath>
   <fileset>
    <patternset refid=""/>
   </fileset>
  </classpath>
 </javac>
 
# jar
 1) destfile : 생성할 jar 파일 지정
 2) basedir : jar 파일로 압축할 기본 디렉토리 지정

 사용 예)
  <jar destfile="${disc}/lib/app.jar" basedir="${build}/classes"/>
  
  <jar destfile="${disc}/lib/app.jar">
   <fileset dir="${build}/classes" exclude="**/test*.class"/>
   <fileset dir="${src}/resources"/>
  </jar>

# zip
 - 기본적으로 jar 사용법와 같이 사용 가능.
 - zipfileset 태그를 사용하여 압축되는 파일의 경로명을 변경할 수 있음.
 - zipfileset 의 속성
  1) prefix : ZIP 파일에 압축될 때 변경되어 들어갈 경로명
  2) fullpath : 특정 파일의 변경될 경로를 지정
  3) filemode : 유닉스 기반의 시스템에서 압축되는 파일의 모드를 지정. 기본값은 644
  4) dirmode : 유닉스 기반의 시스템에서 압축되는 디렉토리의 모드를 지정. 기본값은 775
 사용 예)
 <zip destfile="${dist}/example.zip">
  <zipfileset dir="build/api" prefix="docs/api"/>
  <zipfileset dir="${basedir}"includes="chang.log.20031227" fullpath="docs/chagelog.txt"/>
  <zipfileset dir="build/classes" prefix="classes"/>
  <zipfileset dir="build/src" prefix="src"/>
 </zip>

# war
  사용 예)
  <war destfile="main.war" webxml="src/metadata/web.xml">
   <fileset dir="src/mainapp/html"/>
   <fileset dir="src/mainapp/jsp"/>
   <lib dir="lib">
    <exclude name="logging2.jar"/>
   </lib>
   <classes dir="build/main/classes"/>
   <zipfileset dir="src/imagefile/images" prefix="images"/>
  </war>

# tar
 - 기본 사용 법 : <tar destfile="" basedir=""/>
 - tarfileset 태그
 - targileset 의 속성
  1) mode : 3자리 8진수값. 775 등의 값을 갖는다.
  2) username : 파일에 대한 사용자 이름을 지정한다. UID와는 다르다.
  3) group : 파일에 대한 그룹 이름을 지정한다. GID와는 다르다.
  4) prifix : tar 파일에 압축될 때 변경되어 들어갈 경로명
  5) fullpath : 특정 파일의 변경될 경로를 지정
  6) preserveLeadingSlashes : 맨 앞의 '/'를 유지할지의 여부를 지정. 기본값 : false
 사용 예)
 <tar destfile="${dist}/example.tar">
  <tarfileset dir="build/api" prefix="docs/api"/>
  <tarfileset dir="${basedir}" includes="chage.log.20031227" fullpath="docs/chagelog.txt"/>
  <tarfileset dir="build/classes" prefix="classes"/>
  <tarfileset dir="build/src" prefix="src"/>
 </tar>
 <gzip zipfile="${dist}/example.tar.gz" src="${dist}/example.tar"/>
 
 <tar destfile="${dist}/example.tar.gz" basedir="${build}" compression="gzip"/>

# javadoc
 1) sourcepath : 소스 파일의 경로 지정. 하위 디렉토리까지 모두 처리 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 2) sourcepathref : path 에서 지정한 경로를 소스 파일의 경로로 사용 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 3) sourcefiles : 소스 파일의 목록을 지정. 각 파일은 콤마(,)로 구분 (sourcepath, sourcepathref, sourcefiles 중 하나는 필수)
 4) destdir : 결과 파일이 생성될 디렉토리
 5) packagenames : 콤마로 구분된 패키지 파일의 목록. 패키지명이 *로 끝날 경우 그 하위 패키지까지 모두 처리한다.
 6) excludepackagenames : 문서를 생성하지 않을 패키지의 목록을 지정. 각 패키지는 콤마(,)로 구분. 패키지명이 *으로 끝날 경우 그 하위 패키지까지 모두 제외
 7) access : 접근 모드를 지정. public, protected, package, private 중 한 가지 값. 기본값 : protected
 8) public : 생성되는 API 문서에 public 클래스와 멤버만 보여준다.
 9) protected : 생성되는 API 문서에 protected/public 클래스와 멤버만 보여준다.
 10) package : 생성되는 API 문서에 package/protected/public 클래스와 멤버만 보여준다.
 11) private : 생성되는 API 문서에 private/package/protected/public 클래스와 멤버만 보여준다.
 12) encoding : 소스 파일의 인코딩을 명시.
 13) locale : ko_KR과 같이 사용할 로케일을 지정.
 14) charset : 생성된 문서를 보여줄 때 사용할 케릭터셋을 지정.
 15) version : @version 주석을 포함.
 16) author : @author 주석을 포함.
 17) nodeprecated : deprecated 정보를 포함하지 않는다.
 18) nodeprecatedlist : deprecated 목록을 생성하지 않는다.
 19) windowtitle : 문서를 위한 제목을 텍스트로 입력.
 20) overview : HTML 문서로부터 개략 문서를 읽어 온다.
 21) helpfile : 도움말로 사용할 HTML 파일을 지정.
 22) stylesheetfile : 스타일 시트로 사용할 파일을 지정.
 23) header : 생성될 HTML 파일의 헤더로 사용될 HTML 코드를 명시
 24) footer : 생성될 HTML 파일의 풋터로 사용될 HTML 코드를 명시 
 
 사용 예)
 <javadoc destdir="{build}/api"
  sourcepath="src"
  packagenames="javacan.main.*"
  excludepackagenames="javacna.main.test.*"
  windowtitle="Main 웹 어플리케이션"
  encoding="euc-kr" />
  
 <javadoc destdir="{build}/api"
  windowtitle="Main 웹 어플리케이션"
  encoding="euc-kr">
  <packageset dir="src" defaultexcludes="yes">
   <include name="javacan/main/**"/>
   <exclude name="javacan/main/test/**"/>   
  </packageset>
 </javadoc>
 
# copy
 1) file : 복사할 파일을 지정 (fileset으로 복사할 파일 목록을 지정하지 않는 경우 필수)
 2) tofile : 복사될 파일을 지정
 3) todir : 원본을 복사할 디렉토리를 지정
 4) overwrite : 기존 파일 덮어쓰기 여부 (true/false) 기본값 : false
 5) preservelastmodified : 원본의 최종 수정 날짜 유지 여부(true/false) 기본값 : false
 6) includeEmptyDirs : 텅빈 디렉토리도 복사할지의 여부(true/false) 기본값 : true
 사용 예)
 <copy file="${workspace}/readme.txt.200312" tofile="${build}/readme.txt"/>
 <copy file="${workspace}/readme.txt.200312" todir="${build}"/>
 <copy todir="${build}/src">
  <fileset dir="${workspace}/src"/>
 </copy>
 
# mkdir
 사용 예)
 <mkdir dir="${build}/webapp/WEB-INF/classes"/>
 webapp/WEB-INF 또한 존재 하지 않는 경우 생성

# delete 
 사용 예)
 <delete>
  <fileset dir="${build}"/>
 </delete>
 
 위의 경우 ${build} 와 그 하위 디렉토리의 모든 파일을 삭제. 그러나 디렉토리는 남아있음.(fileset 은 파일의 집합)
 아래와 같이 해주면 디렉토리도 전부 삭제
 
 <delete includeEmptyDirs="true">
  <fileset dir="${build}"/>
 </delete>
 
# ant : 또 다른 빌드 파일의 실행. 여러개의 서브 프로젝트로 구성되어 있을 경우 유용
 1) antfile : 사용할 빌드 파일을 지정. 명시하지 않을 경우 build.xml. dir 속성에 주어진 디렉토리에 대해 상대경로
 2) idr : 새로운 Ant 프로젝트의 basedir을 지정.
 3) target : 수행할 타켓을 지정
 4) output : 새로운 Ant 프로젝트의 수행 결과를 저장할 파일을 명시
 5) inheritAll : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 프로퍼티 전달 여부(true/false). 기본값 : true
 6) inheritRefs : 새로운 Ant 프로젝트에 현재 Ant 프로젝트의 모든 참조 전달 여부(true/false). 기본값 : true
 사용예)
 <target name="makeSubProject">
  <ant dir="subproject/logging" target="prepare">
   <property name="module1.4" value="jdk1.4"/>
  </ant>
  <ant dir="subproject/common" target="prepare"/>
 </target>

# java
 1) classname : 실행할 클래스 이름 (classname, jar 둘중 하나 필수)
 2) jar : 실행할 jar 파일의 위치 (classname, jar 둘중 하나 필수)
 3) classpath : 사용할 클래스패스를 지정
 4) classpathref : 미리 지정한 path 태그를 참조
 5) fork : 세러은 가상머신에서 클래스 수행 여부 (true/false). 기본값 : false
 6) maxmemory : 포크된 가상 머신에 할당할 메모리의 최대 크기를 지정 (fork가 false인 경우 무시)
 7) dir : 가상 머신을 호출할 디렉토리 (fork가 false인 경우 무시)
 사용 예)
 <java classname="javacan.main.prepare.TableInitilizer">
  <classpath>
   <pathelement path="${java.class.path}"/>
  </classpath>
  <sysproperty key="module" value="test"/>
  <arg value="-init -d"/>
 </java>
 
# native2ascii : 유니코드로의 변환
 1) src : 변환할 파일들이 위치한 기준 디렉토리
 2) dest : 변환한 결과를 저장할 디렉토리
 3) encoding : 변환할 파일의 인코딩 (기본으로 JVM의 기본 인코딩 사용)
 4) reverse : 이스케이프된 유니코드를 지정한 인코딩을 사용하는 문자열로 변환.
 사용 예)
 <native2ascii src="${config}"
  dest="${build}/config"
  includes="**/*.properties"
  excludes="**/test/*.properties"

#ftp
put,get,del 등의 action을 줄수도 있다.

#telnet
<read> 사용할때 주의점은 <write> 사용 후에 존재하는 경로를 적어줘야
정상적으로 작동한다.
ex) <write> cd /home/test </write>
      <read> /home/test </read>
Posted by hellodie