배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Access 버전:   공통
검색어:   팝업, 모달, 모듈
제목:   [팁#11] 액세스 탈출하기
     
 

New Page 2
  STEP> 액세스 탈출하기

간혹 질문 중에 액세스 프로그램의 배경이나 액세스 창 자체를 안보이게 하거나 배경그림을 바꿀 수 없느냐는 질문이 올라오곤 합니다

답변은 "안됩니다" 입니다. 실제로 정상적으로 할 수 있는 방법은 없습니다. 하지만 언제나 그렇듯 꿍수가 있습니다.

1. 팝업과 모달

을 생성한 후, 속성창의 기타 탭을 보면 '팝업'이라는 항목과 '모달'이라는 항목이 있습니다.

팝업 항목값을 예로 전환하면 생성한 폼이 팝업 창이 됩니다. 팝업창이란 비 활성화 된 상태에서 다른 창에 가려지지 않고 언제나 상위에 디스플레이 되는 창을 말합니다. 바로 위의 속성창이 팝업창 입니다. 폼을 구성할 때 때로 속성창에 가려져서 귀찮을 때가 종종 있지요? 팝업창이기 때문입니다.

모달창은 일단 활성화가 되면 종료되기 전까지는 다른 창으로 포커스를 넘겨주지 않는 창을 말합니다. 예를 들면 에러 등을 보여주는 메시지 박스나 옵션창이 모달 형식의 창입니다. 버튼을 클릭하여 창이 사라지기 전에는 같은 어플리케이션 내에서 다른 액션을 취할 수가 없습니다.

그렇다면 팝업창이나 모달창을 여러 개 띄우면 어떻게 될까요? 모순이라는 단어가 생각나는 군요.

답은 단순하게도 나중에 활성화 된 창이 우선 순위 입니다. 모달창의 경우는 나중에 활성화 된 창이 가장 상위에 존재하고 창이 사라지면 그 다음 모달창이 활성화 되는 방식이고 팝업창의 경우는 마찬가지로 나중 창이 상위에 존재 하되 다른 창을 활성화 시키면 같은 팝업창이기에 활성화 된 창이 상위에 존재하게 됩니다

팝업창은 액세스 자체의 창보다도 상위에 디스플레이 됩니다. 팝업창을 하나 만들거나 속성창을 열고 액세스 창을 작게 만들어 보십시오.

위의 그림처럼 생성한 폼이 액세스창의 상위에 존재함을 알 수 있습니다

이제 액세스의 크기를 최소화 단추를 클릭하여 작업 표시줄로 숨기면 어떻게 될까요? 액세스 창과 생성한 폼이 같이 최소화 되어 버립니다.

당연한 결과인가요? 그렇다면 폼이 디스플레이 되기 전에 액세스 창을 최소화 시키면 어떻게 될까요

2. 액세스 메뉴를 모듈에서 사용하기

모듈상에서 대부분의 액세스의 메뉴 기능을 사용할 수 있습니다. 심지어 이름 표시줄에 있는 최대화, 최소화 단추도 사용할 수 있습니다.

Application.RunCommand 메뉴상수 or DoCmd.RunCommand 메뉴상수

위와 같은 형식으로 모듈상에서 코딩 해 주면 됩니다. 최소화 명령을 의미하는 메뉴상수는 acCmdAppMinimize 입니다. 최대화는 acCmdAppMaximize 이겠지요.

Application.RunCommand acCmdAppMinimize 이 매크로는 액세스의 윈도우를 최소화 하라는 명령입니다. 

이제 생성한 폼의 이벤트 중 하나에 위의 매크로를 작성해 보겠습니다어떤 이벤트가 적당할 까요? 폼을 열 때 자동으로 실행하는 이벤트가 몇 가지가 있습니다.

On Open 폼을 메모리에 올릴 때 발생합니다.
On Load 폼이 메모리에서 완성 되어 폼의 레코드가 표시될 때 발생합니다.
On Resize 사용자 정의 폼의 크기를 조정할 때 발생합니다.
On Activate 폼이 활성화 될 때 발생합니다. 비로소 폼이 화면에 디스플레이 되는 순간입니다.
On Current

한 레코드에 있던 포커스가 다른 레코드로 이동하거나 폼이 새로 고쳐지거나 다시 쿼리 될 때 발생합니다.

위에서부터 차례로 발생하는 이벤트이며 상위 두 가지 이벤트는 오직 폼이 열릴 때 한번 발생합니다

만들어둔 팝업 형태의 폼의 두 이벤트 중 하나의 이벤트에 예의 매크로를 아래와 같이 작성합니다.

Private Sub Form_Open(Cancel As Integer)
    Application.RunCommand acCmdAppMinimize
End Sub

폼을 열면 액세스 창이 최소화 되고 난 후, 액세스 창이 화면에 없는 상태에서 팝업폼이 열립니다.

한가지 아쉬운 점은 작업표시줄에 있는 최소화 된 액세스 창을 마우스 오른쪽 버튼을 클릭하여 '이전 크기로' 항목을 클릭하면 액세스 창이 원래 상태로 돌아 온다는 것입니다. 

이것 마저 봉쇄하려면 폼의 모달 속성을 ''로 지정합니다. 폼은 같은 어플리케션의 하나인 액세스 창에 포커스를 넘겨 주지 않기 때문에 작업 표시줄의 액세스 창은 활성화 될 수 없습니다

그렇다면 저 폼을 메뉴폼으로 만들고 명령단추를 클릭하여 다른 폼을 열게 하면 다른 폼은 화면에 나타날까요? 다른 폼의 팝업 속성이 ''이면 화면에 디스플레이 되고 '아니오'라면 최소화 된 액세스 창 안에 갇히게 됩니다

이제 도구 메뉴의 시작 항목을 클릭하여 시작 폼을 위의 폼으로 설정해 두면 액세스 창이 보이지 않는 프로그램을 사용할 수 있습니다.

덧붙이자면 API함수를 사용하여 액세스 창을 아예 보이지 않게 할 수도 있습니다. 작업표시줄에도 나타나지 않습니다. 그렇기 때문에 여러 프로그램을 열어 두면 프로그램이 뒤에 가려졌을 때 활성화 시키기가 불편하더군요. 그리고 해서는 안 되는 것을 강제로 한 것이기 때문에 폼을 사용할 때 세심한 주의를 기울이지 않으면 오류가 발생합니다.