2010년 8월 7일 토요일

[파워빌더]2개 이상의 DataWindow의 크기 조절

굴림//-. Window위에 나란히 배치된 2개 이상의 DataWindow의 크기 조절
// 화면을 디자인하다 보면 윈도우 탐색기의 중앙분리막대처럼
// 한쪽이 커지면 한쪽이 작아지게 하는 기능이 필요할 때가 있다.
// 아쉽게도 PowerBuilder에는 그런 기능을 하는 Object는 없다.
// 그렇게 되는 것처럼 보이도록 디자인을 하고 Program을 작성해야 한다.
//
// w_form이라는 Window위에 dw_1과 dw_2라는 DataWindow Object가 2개 있다고 가정하자.
// dw_1은 왼쪽에 dw_2는 오른쪽에 위치하고 dw_1의 폭이 확대되면 dw_2의 폭은 줄어든다.
// 반대로 dw_2의 폭이 확대되면 dw_1의 폭은 줄어든다.
//
// 1. w_form위의 적당한 위치에 StaticText Object를 하나 놓는다. st_1이라 하자
// 2. st_1의 Property에서 [Pointer] Tab을 선택한 뒤 SizeWE! (↔)를 선택하자.
// 3. st_1에 User Event를 몇 개 추가한다.
// -. mousemove : pbm_mousemove를 추가한다.
// -. mousedown : pbm_lbuttondown을 추가한다.
// -. mouseup : pbm_lbuttonup을 추가한다.
//
// 4. w_form에 윈도우 함수를 하나 추가한다.

// function prototype : void w_resize( void )
long ll_Max
ll_Max = dw_2.X + dw_2.Width // dw_2의 오른쪽 끝지점
dw_1.Width = st_1.X - ( dw_1.X + 2)
dw_2.X = st_1.X + 10 // st_1의 두께를 8로 보고 dw_1과 dw_2사이를 12로 본다.
dw_2.Width = ll_Max - dw_2.X // dw_2의 폭은 오른쪽 끝지점에서 X좌표를 빼준다.

// 5. st_1에 아래와 같은 Script를 구성한다.

// constructor EVENT for st_1
This.X = (dw_1.X + dw_1.Width + 2)
This.Y = dw_1.Y
This.Height = dw_1.Height
This.Width = 8
This.BackColor = Parent.BackColor
dw_2.X = (dw_1.X + dw_1.Width + 14 )

//mousemove EVENT for st_1
// 왼쪽버튼을 누른 상태로 움직인다면 마우서 커서를 따라서 움직이도록 한다.
IF KeyDown( KeyLeftButton! ) Then
This.X = Parent.PointerX()
End If

// mousedown EVENT for st_1

// 마우스로 찍으면 시각적으로 표시되도록 한다.
This.BackColor = RGB( 0, 0, 0 )

//mouseup EVENT for st_1
// 마우스를 떼면 안보이게 한다.
This.BackColor = Parent.BackColor
// dw_1을 벗어나 너무 오른쪽으로 가는 것을 방지한다.
IF This.X < ( dw_1.X + 500 ) Then
This.X = dw_1.X + 500
END IF
// dw_2를 벗어나 너무 왼쪽으로 가는 것을 방지한다.
IF This.X > ( (dw_2.X + dw_2.Width) - 500 ) Then
This.X = (dw_2.X + dw_2.Width) - 500
End IF

// 데이타윈도우 크기를 조절한다.
wf_resize()

댓글 없음: