* Powerbuilder 10.5


저번 시간에는 dw 컨트롤의 로우 선택 반전에 대해서 공부했습니다. 

1번 방법으로 스크립트를 두고 진행하겠습니다.
2번 방법으로 작성되어 있는 스크립트는 코멘트 처리해 놓는게 좋겠네요.
인스턴스 변수도 코멘트 처리하구요.







코멘트 처리 방법은 기억나시죠?

//, /**/

두 가지 방법이 있다고 했습니다.














코멘트 처리해두면, 다음에 볼 때 참고할 수 있습니다.


사실, 반전된 색깔과 모양이 좀 이쁘지는 않습니다.
난중에 SelectRow 함수를 쓰지 않고 쫌 뽀대나게끄럼 색깔 넣는 법을 다룹니다.


포커스(Focus)는 키보드로부터 입력을 받을 수 있는 컨트롤, 칼럼 또는 그래픽 오브젝트를 구분하는 도구입니다.
포커스가 특정 오브젝트로 가게 되면 키보드 명령을 받을 수 있습니다.

d_emp 데이터윈도우에서 사원명에 탭오더를 부여했었습니다. 그래서 사원명 칼럼에 포커스를 줄 수 있겠 된 것이죠. 현재의 어플리케이션을 실행해서 사원명 칼럼의 로우를 클릭하면 포커스는 자동으로 클릭한 로우로 이동합니다.
그런데 다른 칼럼의 로우를 클릭하면 색깔은 반전되어도 포커스는 이동하지 않습니다.








포커스는 여전히 첫번째 로우에 머물러 있네요.
클릭한 로우의 사원명을 바로 수정하고 싶다고 했을 때, 항상 사원명 칼럼의 로우를 클릭하거나 다른 칼럼의 로우를 클릭한 다음 다시 사원명 칼럼을 클릭해야 합니다. 이런 불편을 해소시켜야 겠네요.




그럼 아무런 칼럼을 클릭하더라도 클릭한 로우의 사원명 칼럼에 포커스가 가도록 해보겠습니다.

아무런 칼럼을 클릭하더라도 -> clicked 이벤트
클릭한 로우의 사원명 칼럼에 포커스가 가도록 -> ScrollToRow, SetColumn 함수


ScrollToRow 함수
설명
  dw 컨트롤에서 해당 로우로 스크롤을 이동한다.
  커런트(current) 로우 - 포커스가 위치한 로우 - 를 변경한다.

문법
  integer dwcontrol.ScrollToRow ( long row )


SetColumn 함수
설명
  dw 컨트롤에서 커런트(current) 칼럼 - 포커스가 위치해 있는 칼럼 - 을 지정한다.

문법
  integer dwcontrol.SetColumn ( string column)

  column : 포커스를 위치하고자 하는 dw 안에 있는 칼럼명, string




먼저, 사원명 칼럼의 칼럼명을 알아야 겠네요.

d_emp 로 들어가세요. (dw_emp -> 마우스 우클릭 -> Modify DataWindow...)

emp_ename 이네요. 이 이름이 Column Specification 에 그대로 보입니다.





이렇게 작성해 놓고 결과를 확인해 보세요.





어떤 칼럼의 어떤 로우을 클릭하더라도 클릭한 로우의 사원명에 포커스가 위치합니다.


dw_emp.SetColumn( "emp_ename" )
이 부분을 코멘트 처리하고 나서 결과를 확인해 보세요.

동일한 결과가 나옵니다. 왜냐하면, 포커스를 줄 수 있는 칼럼이 하나 밖에 없기 때문에 파워빌더 자체적으로 그 칼럼을 자동 선택하게 됩니다.

그러므로 여기서는
dw_emp.SetColumn( "emp_ename" )
이 부분을 생략해도 됩니다.

무슨 뜻인지 아시겠나요?

포커스를 줄 수 있는 칼럼이 여러 개일 때 SetColumn 함수가 유효하게 쓰일 수 있습니다.
다른 칼럼에 탭오더를 주고 한 번 테스트 해보세요.

여기서는 일단, 생략하지 않겠습니다.



SetFocus 함수가 있는데요. 호출하는 오브젝트에 포커스를 위치시킵니다.

다음이 dw 컨트롤 포커스 삼종 세트입니다.

1. SetFocus()      -> dw 컨트롤에 포커스를 준다.
2. ScrollToRow() -> dw 컨트롤의 해당 로우로 포커스를 이동시킨다.
3. SetColumn()    -> dw 컨트롤의 해당 칼럼으로 포커스를 이동시킨다.

1 -> 2 -> 3
또는
1 -> 3 -> 2

순서로 호출해야 합니다.

여기서는 SetFocus 함수를 따로 호출하지 않았는데, dw 컨트롤을 클릭을 하게 되면 자동으로 dw 컨트롤에 포커스를 주기 때문입니다.


위의 화면은 현재 어플리케이션을 실행했을 때, dw 컨트롤 내에서 로우가 아닌 공간(칼럼명 공간이나 맨 아래쪽의 빈 공간)을 클릭했을 때 나타나는 현상입니다.

이 공간을 클릭하면 clicked 이벤트의 row 는 0 이 됩니다.

dw_emp.SelectRow( 0, false)
dw_emp.SelectRow( row, true)      -> row = 0 이므로 이 부분 때문에 모든 로우가 반전됩니다.

dw_emp.ScrollToRow( row )
dw_emp.SetColumn( "emp_ename" )


ScrollToRow 에서 row 가 0 이면 첫번째 로우로 포커스를 이동하게 됩니다.


이 부분을 해결해 보는게 좋겠네요. 숙제입니다. ㅎㅎ


그럼 수고하셨어요.


* 질문은 댓글로 남기이소~

Posted by A4M
,