* Powerbuilder 10.5

파워빌더 레이아웃은 비주얼 스튜디오나 이클립스와 유사합니다.

개발툴들의 UI 패턴이 비슷한 방식으로 발전하는 것 같습니다.
아마 서로 모방하면서 개선해 나가는 모양입니다.

파워빌더도 6 버전까지는 원하는 기능을 선택하려면 마우스 클릭을 여러번 하거나 그 기능을 찾기가 어려운 메뉴에 있었습니다. 그러다가 7버전에서 큰 변화를 줬죠. 8버전부터는 웍크스페이스, 타겟을 둬서 소스관리하기 편하게 했습니다.

이번 시간에는 컨트롤을 만들어 보기로 하겠습니다.

저번 시간에 만들어둔 w_list 윈도우를 오픈하세요.
(파빌 레이아웃 적응 훈련은 많이 하셨나요?
파빌 레이아웃을 변경하다가 이상한 레이아웃이 되면 어떻게 원상복구하라고 했던가요?
기억 안 나면 전 강의를 다시 보세요.)


먼저 윈도우의 크기 변경 방법을 알려드리겠습니다.

 

 

 

 


레이아웃창에서 우측, 아래측 경계, 모서리 부분을 드래그하면 윈도우 크기를 변경할 수 있습니다.
적당한 크기로 변경해 보세요.


이제 컨트롤을 만들겠습니다.

 


 

메뉴에서 OK 로 표시된 아이콘 오른쪽에 있는 를 클릭하면 옆의 그림과 같은 팝업창이 열립니다. 이 팝업창을 컨트롤 모음창이라고 하겠습니다.

여기에는 파빌에서 사용되는 각종 컨트롤들이 다 모여 있습니다.

OK 로 표시된 아이콘은 커맨드버튼 컨트롤입니다.

팝업창에서 커맨드버튼 아이콘을 클릭하세요. 그럼 컨트롤 모음 팝업창이 사라집니다. 커맨드버튼이 선택되었다는 뜻입니다. 그리고 바로 윈도우에서 임의의 위치를 다시 클릭하세요. 그럼 윈도우 위에 none 이라고 새겨진 커맨드버튼이 생성됩니다.


 


방향이동
커맨드버튼을 선택(클릭)한 뒤에 방향키를 누르면 방향을 이동시킬 수 있습니다.
또 드래그&드랍을 해도 마찬가지 입니다.

크기조절
버튼의 테두리나 모서리로 마우스를 이동해서 드래그하면 버튼의 크기가 조정됩니다.
커맨드버튼을 선택하고 shift 를 누른 상태에서 방향키를 눌러도 크기가 조정됩니다.

위의 방법은 모든 컨트롤에 똑같이 적용됩니다. 아주 중요한 내용이므로 반드시 숙지하시기 바랍니다.


버튼을 적당한 크기로 조정하고 우측 상단에 위치시키세요.
그리고 오른쪽 프라퍼티의 Text 속성을 보세요. none 이라고 되어 있습니다.
Text 속성의 입력칸에서 직접 이 글자를 닫기 로 변경하세요.



 


상단의 메뉴에서 변경해도 됩니다.


 


위의 화면처럼 되었나요?

그리고


프라퍼티 - Name
을 cb_1 에서 cb_exit 로 변경합니다.


 

 


그럼 위의 화면처럼 바뀝니다. cb_exit 는 커맨드버튼의 ID 입니다.

ID는 코딩하는데 직접 사용는 중요한 키이므로 다른 컨트롤들과 반드시 다른 이름을 사용해야 합니다.


현재 cb_exit 라는  커맨드버튼을 만들었습니다.



이제 컨트롤에 대해서 좀더 구체적인 설명을 하겠습니다.

Control is a graphical object that allows users to interact with your application or that you use to enhance the design of a window, visual user object, or DataWindow object. In windows and visual user objects, controls can also have events that can trigger scripts to perform actions or call functions.

컨트롤이란 사용자들이 프로그램과 상호작용할 수 있도록 하거나 개발자가 윈도우, 비주얼 유저 오브젝트 또는 데이터윈도우 오브젝트의 디자인을 개선하는데 사용되는 그래픽 오브젝트이다. 윈도우와 비주얼 유저 오브젝트 상에서 컨트롤은 동작을 실행하거나 함수를 호출하는 스크립트를 실행할 수 있는 이벤트들을 가질 수 있다.


이상은 파워빌더에서 정의하는 컨트롤입니다. 뭐 장황하기는 해도 그리 어려운 내용은 아닙니다. 다 이해할 필요는 없구요. 대충 의미만 파악하면 됩니다. 커맨트버튼을 자주 사용하면 자연스럽에 이해되는 내용이기 때문입니다.

오브젝트에 대해서 설명하겠습니다. C++ 이나 Java 처럼 파워빌더도 OOP 즉, 객체지향프로그래밍 언어입니다. 그래서 오브젝트 즉, 객체라는 표현을 쓰는데요. 또 가끔 class 라는 표현도 씁니다. 그러나 파워스크립트에서는 public class 클래스명... {} 과 같은 클래스 정의 문법은 사용하지 않습니다. 왜냐하면 파워빌더는 4GL 이기 때문입니다.

4GL 곧, 4세대 언어는 이전 세대 언어에 비해 인간에게 편리한 개발 환경을 제공하는 언어로 까다로운 문법을 과감하게 없애고 그래픽 개발 환경을 제공합니다. 그래서 엄청난 생산성 향상을 가져 왔습니다. 반면에 하드웨어 제어, 통신 등과 같이 빠른 퍼포먼스를 필요로 하는 분야에 취약한 것이 단점입니다. 파워빌더는  데이터베이스 연동 프로그램을 만드는데 최적화 되어 있어 그 외 분야에서는 인기가 별로 없습니다.

파워빌더의 오브젝트는 C++ 이나 Java 의 오브젝트와 유사하지만 실제로 사용되는 방식이 완전히 다릅니다. 자바에서 버튼을 사용하려면 class를 일일이 정의해서 사용하거나 제공되는 비교적 복잡한 라이브러리를 사용해야 합니다.  그러나 파워빌더는 막강한 그래픽 환경 속에서 손쉽게 만들어 사용할 수 있습니다. (이점은 비주얼베이직이나 델파이도 마찬가지입니다.)


아래는 파워빌더에서 정의하는 Object 입니다.

In object-oriented programming, a self-contained module of data and its associated methods.
In PowerBuilder, an object is usually a graphic entity that can be saved in a library (an application, DataWindow object, window, menu, or user object). But some objects (such as the Transaction object, custom class user objects, and structures) have no visual aspect.
Each object has a set of properties that describe its appearance and behavior. You can use functions, statements, or the assignment operator to test and set the properties of an object. You change the appearance of an object by setting the
properties of the object. You obtain information about the object by testing the properties.

객체지향 프로그래밍에서 데이터와 메서드를 스스로 담고 있는 모듈을 뜻한다.
파워빌더에서 대부분의 오브젝트는 라이브러리에 저장될 수 있는 그래픽적인 객체다(...). 그러나 몇몇의 오브젝트(...)는 눈에 보이는 속성을 갖고 있지 않다.
각각의 오브젝트는 겉모양과 기능을 나타내는 속성들을 갖고 있다. 오브젝트의 속성을 테스트하고 정하기 위해서 함수와 구문들 또는 할당 연산자를 사용할 수 있다. 오브젝트의 속성을 통해서 오브젝트의 겉모양을 바꾼다. 이 속성들을 테스트하면 오브젝트의 정보를 얻을 수 있다.

Objects also have events that can trigger scripts to perform actions or initiate functions.
An object's definition, as stored in a library, is called a class. When you set properties in a painter, you are changing the class. In a running application, an object is instantiated so that it exists in memory.
When scripts call functions and set properties for the object, they affect the object instance, not the original definition.

오브젝트는 또한 기능을 수행하거나 함수를 구동하는 스크립트를 실행할 수 있는 이벤트를 가지고 있다.
라이브러리에 저장되서 오브젝트를 정의한 것을 클래스라고 한다. 페인터에서 속성을 설정하면 클래스가 변경된다. 실행되고 있는 어플리케이션에서 오브젝트는 메모리에 로딩이 된다.
스크립트가 함수를 호출하고 오브젝트의 속성을 설정할 때, 오브젝트 인스턴스에 영향을 주지만 원래의 정의에 영향을 주지는 않는다.



이제 오브젝트와  컨트롤에 대해서 대충 감이 오시나요? 컨트롤은 사용자의 명령을 받아 실행하는 그래픽 오브젝트입니다.

초보자들 입장에서 오브젝트를 이해하기가 어려울 수 있습니다.

더 이해하고 싶다면 자바의 클래스(class), 오브젝트(object), 인스턴스(instance) 라는 단어를 공부해 보십시오. 파워빌더도 내부적으로 그러한 내용을 담고 있습니다. 파워빌더 오브젝트도 자바에서 얘기하는 오브젝트와 유사하다고 이해하시면 됩니다.

컨트롤 모음 팝업창에 있는 컨트롤들은 대부분 필수적으로 익혀야 합니다. 한 술에 배부를 수가 없으므로 하나 하나씩 차근차근 그 용례를 익히고 실습하는 수 밖에 없습니다.


그럼 또 다시 실습으로 들어가겠습니다.

또 다른 컨트롤을 만들어 볼까요?
아래 속성으로 커맨드버튼 세개를 만들어 보세요.

삭제 커맨드버튼
Name : cb_delete
Text : 삭제
위치 : 닫기 커맨드버튼 왼쪽

저장 커맨드버튼
Name : cb_save
Text : 저장
위치 : 삭제 커맨드버튼 왼쪽

조회 커맨드버튼
Name : cb_search
Text : 조회
위치 : 저장 커맨드버튼 왼쪽


 


 

앞으로 커맨트 버튼을 그냥 버튼이라고 하겠습니다.

총 네개의 버튼을 만들었네요.

w_list 윈도우는 사원목록화면이라고 했습니다.
짐작하시겠지만 사원목록을 보여주고 수정하는 기능을 가지고 있는 윈도우를 만들어 볼 생각입니다.

버튼을 만들고 크기와 위치를 잡으려고 할 때 좀 불편하지 않았나요?
마우스로 하나하나씩 작업을 하다 보니 버튼의 위치나 크기를 잡는 일이 만만치 않았을 겁니다.

그럼 빠르게 버튼을 만들고 한 번에 크기와 위치를 잡는 방법을 알려드리겠습니다.
이것도 중요하니 잘 보시기 바랍니다.



편리한 버튼 생성법
버튼을 생성할 때, 컨트롤 모음 팝업창을 이용했습니다. 닫기 버튼(최초의 버튼)을 만들 때는 그렇게 해야 합니다. 다른 방법이 없죠.
그러나 나머지 버튼들은 닫기 버튼을 복사해서 사용하면 됩니다.

1. ctrl + C (완전복사)    ->    ctrl + V  (붙여넣기)
   또는
2. ctrl + T (껍데기복사)  ->   자동으로 생성

나중에 설명하겠지만 버튼은 코딩을 하는 대상입니다.
버튼에는 이벤트가 있는데 그 이벤트에 코딩을 합니다.
1번은 버튼의 모든 속성과 코딩까지 모두 복사하는 겁니다.

2번은 새로운 버튼 하나를 생성해 놓고 Text 속성만 같게 합니다. 다른 내용은 복사되지 않습니다.


자동 맞춤 기능 쓰기
우리가 만든 버튼을 동일한 크기로 하고 싶다거나 상하좌우의 정렬을 하고 싶다면 파빌의 막강한 자동 맞춤 기능을 쓰면 됩니다. 이 기능에는 Align, Space, Size 세개의 속성이 있습니다.

메뉴 - Format


또는

 

 

 


위 그림처럼 상단 아이콘 메뉴에 있습니다.

먼저 자동으로 맞추고자 하는 컨트롤들을 ctrl 키를 누른 상태에서 클릭하면 선택이 됩니다. 이 때 가장 먼저 선택된 컨트롤이 기준입니다. 또는 드래그를 해서 선택해도 됩니다. 이 때 드래그 시작점과 가장 가까운 컨트롤이 기준입니다.

그런 다음 원하는 속성을

메뉴 - Format  에서  선택하거나 아이콘 메뉴에서 선택하면 됩니다. 
( 아무래도 메뉴보다는 아이콘 메뉴를 이용하는 것이 편리합니다.)

어렵지 않기 때문에 이 속성에 대해서는 설명하지 않고 넘어가겠습니다. 하지만 꼭 실습해 보시기 바랍니다.


다음 시간에는 컨트롤에 직접 코딩을 해 보겠습니다.
실질적인 기능을 추가하는 일입니다.


* 질문은 댓글로 남기세요.

 

 

 

Posted by A4M
,