본문 바로가기
Delphi/프로시저-함수

MessageBox 사용법

by MonoSoft 2021. 5. 20.
728x90
반응형

데스크톱 (Windows) 응용 프로그램의 경우 

메시지 (대화 상자) 상자를 사용하여

응용 프로그램 사용자에게 일부 작업을 수행해야 함,

일부 작업이 완료되었음을 알리거나

일반적으로 사용자의주의를 끌 수 있습니다.

에서 델파이사용자에게 메시지를 표시하는

방법에는 여러 가지가 있습니다. 

ShowMessage 또는 InputBox와 같이

RTL에서 제공되는 루틴을 표시하는

기성 메시지를 사용할 수 있습니다. 

또는 (재사용을 위해) 자신 만의

대화 상자를 만들 수 있습니다 : CreateMessageDialog.

위의 모든 대화 상자의 일반적인 문제는 응용 프로그램이

활성화되어 있어야 사용자에게 표시된다는 것 입니다. 

"활성"은 응용 프로그램에 "입력 포커스"가있는 경우를 나타냅니다.

사용자의주의를 끌고 다른 작업을 하지 않으려면

애플리케이션이 활성화되지 않은 경우에도

시스템 모달 최상위 메시지 상자  표시 할 수 있어야합니다 .

System-Modal Top Most Message Box

이것은 복잡하게 들릴 수 있지만

실제로는 그렇지 않습니다.

Delphi는 대부분의 Windows API 호출에 쉽게

액세스 할 수 있으므로 "MessageBox"Windows

API 함수를 실행하면 문제가 해결됩니다.

모든 Delphi 양식의 uses 절에 기본적으로 포함 된

"windows.pas"단위로 정의 된 MessageBox 함수는

메시지 상자를 생성, 표시 및 작동합니다. 

메시지 상자에는 미리 정의 된 아이콘 및 누름 버튼의

조합과 함께 애플리케이션 정의 메시지 및 제목이 포함됩니다.

MessageBox가 선언되는 방법은 다음과 같습니다.

function MessageBox (
  hWnd : HWND;
  lpText,
  lpCaption : PAnsiChar;
  uType : Cardinal) : 정수;

첫 번째 매개 변수 인 hwnd 는 생성 될

메시지 상자의 소유자 창의 핸들입니다. 

대화 상자가있는 동안 메시지 상자를 만드는 경우

대화 상자의 핸들을 hWnd 매개 변수로 사용합니다.

lpText  lpCaption은 캡션과 메시지 상자에

표시되는 메시지 텍스트를 지정합니다.

 

마지막은 uType 매개 변수이며 가장 흥미 롭습니다. 

이 매개 변수는 대화 상자의 내용과 동작을 지정합니다. 

이 매개 변수는 다양한 플래그의 조합 일 수 있습니다.

예 : 시스템 날짜 / 시간이 변경 될 때 시스템 모달 경고 상자

시스템 모달 최상위 메시지 상자를 만드는

예를 살펴 보겠습니다. 

당신은 것입니다  윈도우 메세지 처리때 모든 실행중인

응용 프로그램에 전달되는 시스템날짜/시간변경 

"날짜 및 시간 속성"제어판 애플릿을 사용

-for 예.

MessageBox 함수는 다음과 같이 호출됩니다.

  Windows.MessageBox (
    핸들,
    '비활성 애플리케이션의 시스템 모달 메시지'# 13 # 10 ',
    '비활성 애플리케이션의 메시지!',
    MB_SYSTEMMODAL 또는 MB_SETFOREGROUND 또는 MB_TOPMOST 또는 MB_ICONHAND);

가장 중요한 부분은 마지막 매개 변수입니다. 

"MB_SYSTEMMODAL 또는 MB_SETFOREGROUND 또는 MB_TOPMOST"는

메시지 상자가 시스템 모달이고

가장 위에 있고 전경 창이되도록합니다.

 

MB_SYSTEMMODAL 플래그는 사용자가

hWnd 매개 변수로 식별 된 창에서 작업을

계속하기 전에 메시지 상자에 응답해야 함을 보장합니다.

 

MB_TOPMOST 플래그는 메시지 상자가

최상위가 아닌 모든 창 위에 배치되어야하며

창이 비활성화 된 경우에도 그 위에 유지되어야 함을 지정합니다.

 

MB_SETFOREGROUND 플래그는

메시지 상자가 포 그라운드 창이되도록합니다

 

 

다음은 전체 예제 코드입니다

 

( "unit1"단위에 정의 된 "Form1"이라는 TForm) :

단위 Unit1;

상호 작용

용도

  Windows, 메시지, SysUtils, 변형, 클래스,

  그래픽, 컨트롤, 양식, 대화 상자, ExtCtrls;

유형

  TForm1 = 클래스 (TForm)

  은밀한

    절차 WMTimeChange (var Msg : TMessage); 메시지 WM_TIMECHANGE;

  공공의

    {공개 선언}

   ;

var

  Form1 : TForm1;

 

구현 {$ R * .dfm}

 

procedure TForm1.WMTimeChange (var Msg : TMessage);

시작하다

  Windows.MessageBox (

    핸들,

    '비활성 애플리케이션의 시스템 모달 메시지'# 13 # 10 ',

    '비활성 애플리케이션의 메시지!',

    MB_SYSTEMMODAL 또는 MB_SETFOREGROUND 또는 MB_TOPMOST 또는 MB_ICONHAND);

;

.

 

이 간단한 응용 프로그램을 실행 해보십시오. 

응용 프로그램이 최소화되어 있는지

또는 최소한 다른 응용 프로그램이

활성화되어 있는지 확인하십시오. 

"날짜 및 시간 속성"제어판 애플릿을 실행하고

시스템 시간을 변경하십시오. 

애플릿의 "확인"버튼을 누르 자마자 비활성

응용 프로그램의 시스템

모달 최상위 메시지 상자가 표시됩니다.

 

 

showmessage를 사용하다가 

window경고창에 아이콘이미지가 들어가는걸 보고

찾다 보니 이런게 있었넹... 오홋

 

MessageBox를 이용하세요

 

int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
);

핸들은 지금 윈도우의 핸들을 넘겨주시면 되구요..(form.handle)
lpText엔 메시지
lpCaption엔 메시지창의 Caption
uType엔 아이콘과 버튼들입니다

형태구요 다음과 같이 사용하시면 됩니다
MessageBox(Handle, '메시지', '캡션', MB_ICONERROR or MB_OK);

아이콘 종류는

MB_ICONEXCLAMATION [삼각형 느낌표]
MB_ICONWARNING [삼각형 느낌표]
MB_ICONINFORMATION [말풍선느낌표]
MB_ICONASTERISK [말풍선느낌표]
MB_ICONQUESTION [말풍선물음표] 
MB_ICONSTOP [빨간엑스표]
MB_ICONERROR [빨간엑스표]
MB_ICONHAND [빨간엑스표]

버튼은

MB_ABORTRETRYIGNORE
MB_OK
MB_OKCANCEL
MB_RETRYCANCEL
MB_YESNO
MB_YESNOCANCEL

서로 조합해서 사용하시면 됩니다
728x90
반응형

댓글