Power Builder SelectRow 색상 변경하기

sangeun jo·2021년 11월 9일
0

PowerBuilder

목록 보기
3/9

파워빌더 강의를 따라가던 중 사소한 문제를 발견했다. 내 프로그램은 선택된 로우의 사원명이 하이라이트 되고, 직급, 부서명 콜론의 텍스트가 안 보인다. 위 사진이 강좌에 있는 프로그램의 모습이고, 아래 사진이 내 프로그램이다.

검색하여 알아낸 사실은 일단 SelectRow를 쓰면, 1) 자동으로 배경색은 파란색, 글자색은 하얀색으로 바뀌고, 2) 수정 가능한 포커스된 콜론은 하이라이트 된다는 것이다. SelectRow를 사용하는 이상 색상을 변경하거나 하이라이트를 없앨 수는 없다.

즉 글자가 안보이게 된 이유는 SelectRow로 인해 글자가 흰색으로 변경되었는데 DropDownListBox가 흰색배경이기 때문이다. DropDwonList의 배경 색상을 변경하는 방법은 찾을 수 없었다. 그럼 SelectRow를 사용하지 않고 직접 컬러 속성만 변경하면 되지 않을까?

배경색, 글자색 직접 변경하는 법


속성창에서 폰트 탭으로 들어가면 빨간 버튼 같은 게 있다.

누르면 이렇게 창이 뜨는데 Expression이라는 곳에 스크립트를 작성할 수 있다. 다들 Expression으로 처리하라는데 어딘지 몰라서 한참 헤맸다.

if(getrow() = currentrow(), rgb(255, 255, 255), rgb(0, 0, 0))

현재 행이 포커스되었다면 첫번째 rgb 색상(흰색)으로 바꾸고, 포커스가 떠나면 두번째 rgb 색상(검은색)으로 바꾸어라는 스크립트이다. 다시 문제로 돌아와서 해결책을 찾아보면

Text Color 스크립트: 현재 행이 포커스되었다면 글자 색상을 흰색으로 바꾸고, 포커스가 떠나면 검은색으로 바꾼다.

Background Color 스크립트: 현재 행이 포커스되었다면 배경색을 파란색으로 바꾸고, 포커스가 떠나면 하얀색으로 바꾼다.

//Text Color Expression
if(getrow() = currentrow(), rgb(255, 255, 255), rgb(0, 0, 0))
//Background Color Expression
if(getrow() = currentrow(), rgb(0, 128, 255), rgb(255, 255, 255))

이 스크립트를 모든 컬럼에 일일이 적용시켜야한다. 기존에 사용했던 SelectRow는 주석처리해야 Expression에 작성한 스크립트가 동작한다.

실행결과 겉보기에는 문제없이 작동했다.만약 로직 구성과 상관없는 관상용이라면 여기까지만 해도 문제없다.

그런데 행을 삭제하는 등의 작업을 할 때에는 문제가 생긴다. SelectRow는 SetRow과 AcceptText 메소드의 역할도 포함하는 것으로 예상되는데, SelectRow를 사용하지 않는다면 이 두 역할을 직접 처리해야한다. 나는 SelectRow 대신 SetRow를 사용하고 삭제 등의 작업이 필요한 스크립트 맨 위에 AcceptText 메서드를 사용해서 해결했다.

profile
코더가 아니라 개발자가 되자

0개의 댓글