사용자 언어 대화상자를 사용하여 사용자 언어 프로그램에 대한 사용자 고유의 프론트 엔드를 정의할 수 있습니다. 다음 섹션에서는 사용자 언어 대화상자에 대해 자세히 설명합니다.
미리 정의된 대화상자는 파일 이름을 선택하거나 오류 메시지를 표시하는 데 자주 사용되는 일반적인 표준 대화상자를 구현합니다.
복잡한 사용자 대화상자를 정의하는 방법에 대한 자세한 내용은 대화상자 객체를 참조하십시오.
기능
디렉토리 대화상자를 표시합니다.
문법
string dlgDirectory(string Title[, string Start])
반환
dlgDirectory 함수는 선택한 디렉토리의 전체 경로 이름을 반환합니다. 사용자가 대화상자를 취소한 경우 결과는 빈 문자열이 됩니다.
dlgDirectory 함수는 사용자가 디렉토리를 선택할 수 있는 디렉토리 대화상자를 표시합니다. Title은 대화상자의 제목으로 사용됩니다.
Start가 비어 있지 않으면 dlgDirectory의 시작점으로 사용됩니다.
예
string dirName;
dirName = dlgDirectory("Select a directory", "");
기능
파일 대화상자를 표시합니다.
문법
string dlgFileOpen(string Title[, string Start[, string Filter]])
string dlgFileSave(string Title[, string Start[, string Filter]])
반환
dlgFileOpen 및 dlgFileSave 함수는 선택한 파일의 전체 경로 이름을 반환합니다. 사용자가 대화상자를 취소한 경우 결과는 빈 문자열이 됩니다.
dlgFileOpen 및 dlgFileSave 함수는 사용자가 파일을 선택할 수 있는 파일 대화상자를 표시합니다. Title은 대화상자의 제목으로 사용됩니다.
Start가 비어 있지 않으면 파일 대화상자의 시작점으로 사용됩니다. 그렇지 않은 경우 현재 디렉토리가 사용됩니다.
Filter와 일치하는 파일만 표시됩니다. Filter가 비어 있으면 모든 파일이 표시됩니다.
Filter는 간단한 와일드카드(예: "*.brd
"), 와일드카드 리스트(예: "*.bmp
*.jpg
")이거나 "비트맵 파일(*.bmp
)"과 같이 설명적인 문자를 포함할 수도 있습니다. 파일 대화상자의 "파일 유형" 콤보 상자에 항목이 여러 개 포함되어 있으면 "비트맵 파일(*.bmp
), 기타 이미지(*.jpg
*.png
)"와 같이 이중 세미콜론으로 구분해야 합니다.
예
string fileName;
fileName = dlgFileOpen("Select a file", "", "*.brd");
기능
메시지 상자를 표시합니다.
문법
int dlgMessageBox(string Message[, button_list])
반환
dlgMessageBox 함수는 사용자가 선택한 버튼의 색인을 반환합니다. button_list의 첫 번째 버튼은 색인이 0입니다.
dlgMessageBox 함수는 모달 대화상자에 지정된 메시지를 표시하고 사용자가 button_list에 정의된 버튼 중 하나를 선택할 때까지 기다립니다.
Message에 HTML 태그가 포함되어 있는 경우 '<', '>' 및 '&' 문자를 각각 <
, >
및 &
로 표시해야 하는 경우 해당 문자를 이 값으로 지정해야 합니다.
button_list는 쉼표로 구분된 문자열의 선택적 리스트로, 메시지 상자 하단에 표시될 버튼 세트를 정의합니다. 최대 3개의 버튼을 정의할 수 있습니다. button_list가 지정되지 않는 경우 기본적으로 "OK"로 지정됩니다.
button_list의 첫 번째 버튼은 기본 버튼(사용자가 Enter 키를 누르면 선택됨)이 되고 리스트의 마지막 버튼은 "취소 버튼"이 됩니다. 이 버튼은 사용자가 ESCape를 누르거나 메시지 상자를 닫으면 선택됩니다. 이름을 '+'로 시작하여 다른 버튼을 기본 버튼으로 지정하고 이름을 '-'로 시작하여 다른 버튼을 취소 버튼으로 지정할 수 있습니다. 실제 '+' 또는 '-'를 사용하여 버튼 문자를 시작하려면 빠져나가야 합니다.
버튼 문자에 '&'가 포함된 경우 앰퍼샌드 다음에 오는 문자가 핫키가 되고, 사용자가 해당 키를 누르면 해당 버튼이 선택됩니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
메시지 상자에는 메시지의 첫 문자를 다음과 같이 설정하여 아이콘을 지정할 수 있습니다.
';' - for an Information
'!' - for a Warning
':' - for an Error
그러나 메시지가 이러한 문자 중 하나로 시작되면 escape해야 합니다.
Mac OS X에서는 문자 ':'만 실제로 아이콘을 표시합니다. 다른 모든 문자는 무시됩니다.
예
if (dlgMessageBox("!Are you sure?", "&Yes", "&No") == 0) {
// let's do it!
}
사용자 언어 대화상자는 다음 대화상자 객체에서 만들어집니다.
dlgCell | 그리드 셀 컨텍스트 |
dlgCheckBox | 확인란 |
dlgComboBox | 콤보 상자 선택 필드 |
dlgDialog | 대화상자의 기본 컨테이너 |
dlgGridLayout | 그리드 기반 배치 컨텍스트 |
dlgGroup | 그룹 필드 |
dlgHBoxLayout | 수평 상자 배치 컨텍스트 |
dlgIntEdit | 정수 입력 필드 |
dlgLabel | 문자 레이블 |
dlgListBox | 리스트 상자 |
dlgListView | 리스트 뷰 |
dlgPushButton | 누름 버튼 |
dlgRadioButton | 라디오 버튼 |
dlgRealEdit | 실제 입력 필드 |
dlgSpacing | 배치 간격 객체 |
dlgSpinBox | 스핀 상자 선택 필드 |
dlgStretch | 배치 신축 객체 |
dlgStringEdit | 문자열 입력 필드 |
dlgTabPage | 탭 페이지 |
dlgTabWidget | 탭 페이지 컨테이너 |
dlgTextEdit | 문자 입력 필드 |
dlgTextView | 문자 뷰어 필드 |
dlgVBoxLayout | 수직 상자 배치 컨텍스트 |
기능
그리드 배치 컨텍스트 내에서 셀 위치를 정의합니다.
문법
dlgCell(int row, int column[, int row2, int column2]) statement
dlgCell 문은 그리드 배치 컨텍스트 내에서 셀의 위치를 정의합니다.
행 및 열 색인은 0에서 시작되므로 왼쪽 위 셀의 색인은 (0, 0)입니다.
2개의 매개변수를 사용하면 문으로 정의된 대화상자 객체가 행 및 열별로 단일 셀 주소에 배치됩니다. 4개의 매개변수를 사용하면 대화상자 객체는 행/열에서 행2/열2까지의 모든 셀에 걸쳐 있습니다.
기본적으로 dlgCell에는 dlgHBoxLayout이 포함되어 있으므로 셀에 둘 이상의 대화상자 객체가 포함된 경우 수평으로 나란히 옆에 배치됩니다.
예
string Text;
dlgGridLayout {
dlgCell(0, 0) dlgLabel("Cell 0,0");
dlgCell(1, 2, 4, 7) dlgTextEdit(Text);
}
기능
확인란을 정의합니다.
문법
dlgCheckBox(string Text, int &Checked) [ statement ]
dlgCheckBox 문은 지정된 Text를 사용하여 확인란을 정의합니다.
Text에 '&'가 포함된 경우 앰퍼샌드 다음에 오는 문자가 핫키가 되고 사용자가 Alt+핫키를 누르면 확인란이 전환됩니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
dlgCheckBox는 주로 dlgGroup 내에서 사용되지만 다른 방식으로도 사용할 수 있습니다. 동일한 대화상자 내의 모든 확인란에는 다른 Checked 변수가 있어야 합니다!
사용자가 dlgCheckBox를 선택하는 경우 연관된 Checked 변수가 1로 설정되고 그렇지 않은 경우 0으로 설정됩니다. Checked의 초기 값은 확인란이 처음에 선택되었는지 여부를 정의합니다. Checked가 0이 아니면 처음에 확인란이 선택되어 있습니다.
선택 사항 문은 dlgCheckBox가 전환될 때마다 실행됩니다.
예
int mirror = 0;
int rotate = 1;
int flip = 0;
dlgGroup("Orientation") {
dlgCheckBox("&Mirror", mirror);
dlgCheckBox("&Rotate", rotate);
dlgCheckBox("&Flip", flip);
}
기능
콤보 상자 선택 필드를 정의합니다.
문법
dlgComboBox(string array[], int &Selected) [ statement ]
dlgComboBox 문은 지정된 배열의 컨텐츠가 포함된 콤보 상자 선택 필드를 정의합니다.
Selected는 선택한 콤보 상자 항목의 색인을 반영합니다. 첫 번째 항목의 색인은 0입니다.
배열의 각 요소는 콤보 상자에 있는 한 항목의 컨텐츠를 정의합니다. 배열의 문자열이 비어 있지 않을 수 있습니다(빈 문자열이 있는 경우 해당 문자열을 포함하고 그 뒤에 나오는 모든 문자열이 삭제됨).
선택 사항 문은 dlgComboBox의 선택이 변경될 때마다 실행됩니다. 문이 실행되기 전에 대화상자 객체와 함께 사용된 모든 변수는 현재 값으로 업데이트되고, 문 안에 있는 이러한 변수에 대한 변경 사항은 문이 반환될 때 대화상자에 반영됩니다.
초기 값인 Selected가 배열 색인 범위를 벗어나는 경우 0으로 설정됩니다.
예
string Colors[] = { "red", "green", "blue", "yellow" };
int Selected = 2; // initially selects "blue"
dlgComboBox(Colors, Selected) dlgMessageBox("You have selected " + Colors[Selected]);
기능
사용자 언어 대화상자를 실행합니다.
문법
int dlgDialog(string Title) block ;
반환
dlgDialog 함수는 dlgAccept() 함수를 호출하여 사용자 정의 의미를 지정할 수 있는 정수 값을 반환합니다.
대화상자를 닫기만 하는 경우 반환 값은 -1이 됩니다.
dlgDialog 함수는 블록으로 정의된 대화상자를 실행합니다. 이는 실제로 사용자 언어 내장 함수인 유일한 대화상자 객체입니다. 따라서 함수 호출이 허용되는 모든 위치에서 사용할 수 있습니다.
블록에는 일반적으로 다른 대화상자 객체만 포함되어 있지만 조건부로 대화상자에 객체를 추가하려는 경우와 같은 상황에서 다른 사용자 언어 문을 사용할 수도 있습니다(아래의 두 번째 예 참조).
기본적으로 dlgDialog에는 dlgVBoxLayout이 포함되어 있으므로 간단한 대화상자에서는 배치에 대해 걱정할 필요가 없습니다.
사용자가 대화상자를 닫고 해당 컨텐츠를 수락할 수 있도록 dlgDialog는 특정 지점에서 dlgAccept() 함수 호출을 포함해야 합니다.
간단한 메시지 상자나 파일 대화상자만 필요한 경우 미리 정의된 대화상자 중 하나를 대신 사용할 수 있습니다.
예
int Result = dlgDialog("Hello") {
dlgLabel("Hello world");
dlgPushButton("+OK") dlgAccept();
};
int haveButton = 1;
dlgDialog("Test") {
dlgLabel("Start");
if (haveButton)
dlgPushButton("Here") dlgAccept();
};
기능
그리드 배치 컨텍스트를 엽니다.
문법
dlgGridLayout statement
dlgGridLayout 문은 그리드 배치 컨텍스트를 엽니다.
문에서 직접 사용될 수 있는 유일한 대화상자 객체는 그리드 배치 내에서 특정 대화상자 객체의 위치를 정의하는 dlgCell입니다.
행 및 열 색인은 0에서 시작되므로 왼쪽 위 셀의 색인은 (0, 0)입니다.
행 및 열 수는 그리드 배치 컨텍스트 내에서 정의된 대화상자 객체의 위치에 따라 자동으로 확장되므로 행 및 열 수를 명시적으로 정의할 필요가 없습니다.
예
dlgGridLayout {
dlgCell(0, 0) dlgLabel("Row 0/Col 0");
dlgCell(1, 0) dlgLabel("Row 1/Col 0");
dlgCell(0, 1) dlgLabel("Row 0/Col 1");
dlgCell(1, 1) dlgLabel("Row 1/Col 1");
}
기능
그룹 필드를 정의합니다.
문법
dlgGroup(string Title) statement
dlgGroup 문은 지정된 제목으로 그룹을 정의합니다.
기본적으로 dlgGroup에는 dlgVBoxLayout이 포함되어 있으므로 간단한 그룹에서는 배치에 대해 걱정할 필요가 없습니다.
dlgGroup은 주로 라디오 버튼 또는 확인란 세트를 포함하는 데 사용되지만 해당 문에 다른 객체를 포함할 수도 있습니다. dlgGroup 내의 라디오 버튼은 0부터 시작하여 번호가 매겨집니다.
예
int align = 1;
dlgGroup("Alignment") {
dlgRadioButton("&Top", align);
dlgRadioButton("&Center", align);
dlgRadioButton("&Bottom", align);
}
기능
수평 상자 배치 컨텍스트를 엽니다.
문법
dlgHBoxLayout statement
dlgHBoxLayout 문은 지정된 문에 대한 수평 상자 배치 컨텍스트를 엽니다.
예
dlgHBoxLayout {
dlgLabel("Box 1");
dlgLabel("Box 2");
dlgLabel("Box 3");
}
기능
정수 입력 필드를 정의합니다.
문법
dlgIntEdit(int &Value, int Min, int Max)
dlgIntE*dit 문은 지정된 Value로 정수 항목 필드를 정의합니다.
처음에 Value가 최소값과 최대값으로 정의된 범위를 벗어나는 경우 이러한 값으로 제한됩니다.
예
int Value = 42;
dlgHBoxLayout {
dlgLabel("Enter a &Number between 0 and 99");
dlgIntEdit(Value, 0, 99);
}
기능
문자 레이블을 정의합니다.
문법
dlgLabel(string Text [, int Update])
dlgLabel 문은 지정된 Text로 레이블을 정의합니다.
Text는 "Hello"에서처럼 문자열 리터럴이거나 문자열 변수일 수 있습니다.
Text에 HTML 태그가 포함되어 있는 경우 '<', '>' 및 '&' 문자를 각각 "<
", ">
" 및 "&
"로 표시해야 하는 경우 해당 문자에 이 값을 지정해야 합니다.
Text의 외부 하이퍼링크는 절절한 응용프로그램 프로그램에서 열립니다.
Update 매개변수가 0이 아니고 Text가 문자열 변수이면 해당 문에서 dlgPushButton과 같은 컨텐츠를 수정할 수 있으며 레이블은 자동으로 업데이트됩니다. 물론 이 매개변수는 Text가 전용 문자열 변수(예: for 문의 루프 변수가 아님)인 경우에만 유용합니다.
Text에 '&'가 포함되어 있고 레이블 뒤에 있는 객체에 키보드 포커스가 있으면 앰퍼샌드 다음에 오는 문자가 핫키가 되고, 사용자가 Alt+핫키를 누르면 dlgLabel 바로 다음에 정의된 객체로 포커스가 이동됩니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
예
string OS = "Windows";
dlgHBoxLayout {
dlgLabel(OS, 1);
dlgPushButton("&Change OS") { OS = "Linux"; }
}
기능
리스트 상자 선택 필드를 정의합니다.
문법
dlgListBox(string array[], int &Selected) [ statement ]
dlgListBox 문은 지정된 배열의 컨텐츠가 포함된 리스트 상자 선택 필드를 정의합니다.
Selected는 선택한 리스트 상자 항목의 색인을 반영합니다. 첫 번째 항목의 색인은 0입니다.
배열의 각 요소는 리스트 상자에 있는 한 줄의 컨텐츠를 정의합니다. 배열의 문자열이 비어 있지 않을 수 있습니다(빈 문자열이 있는 경우 해당 문자열을 포함하고 그 뒤에 나오는 모든 문자열이 삭제됨).
선택 사항 문은 사용자가 dlgListBox의 항목을 두 번 클릭할 때마다 실행됩니다(리스트의 선택 사항만 변경되는 경우 문이 호출되도록 하는 방법에 대한 내용은 dlgSelectionChanged 참조). 문이 실행되기 전에 대화상자 객체와 함께 사용된 모든 변수는 현재 값으로 업데이트되고, 문 안에 있는 이러한 변수에 대한 변경 사항은 문이 반환될 때 대화상자에 반영됩니다.
초기 값인 Selected가 배열 색인 범위를 벗어나는 경우 항목이 선택되지 않습니다.
예
string Colors[] = { "red", "green", "blue", "yellow" };
int Selected = 2; // initially selects "blue"
dlgListBox(Colors, Selected) dlgMessageBox("You have selected " + Colors[Selected]);
기능
다중 열 리스트 뷰 선택 필드를 정의합니다.
문법
dlgListView(string Headers, string array[], int &Selected[, int &Sort]) [ statement ]
dlgListView 문은 지정된 배열의 컨텐츠로 다중 열 리스트 뷰 선택 필드를 정의합니다.
Headers는 탭으로 구분된 열 헤더 리스트입니다.
Selected는 배열에서 선택한 리스트 뷰 항목의 색인을 반영합니다(dlgListView의 컨텐츠를 다양한 열을 기준으로 정렬할 수 있으므로 항목이 실제로 표시되는 순서는 다를 수 있음). 첫 번째 항목의 색인은 0입니다.
처음에 특정 항목을 선택하지 않을 경우 Selected를 -1로 초기화해야 합니다. -2로 설정하면 현재 정렬 열에 따라 첫 번째 항목이 현재 항목으로 설정됩니다. 뷰 항목을 선택하지 않은 경우 -1이 반환됩니다.
Sort는 리스트 뷰를 정렬하는 데 사용해야 하는 열을 정의합니다. 맨 왼쪽 열에는 1로 번호가 매겨집니다. 이 매개변수의 부호는 정렬할 방향을 정의합니다(양수 값은 오름차순으로 정렬됨). Sort가 0이거나 유효한 열 수를 초과하면 정렬이 수행되지 않습니다. Sort의 반환된 값은 리스트 열 헤더를 클릭하여 사용자가 선택한 열 및 정렬 모드를 반영합니다. 기본적으로 dlgListView는 첫 번째 열을 기준으로 오름차순으로 정렬합니다.
배열의 각 요소는 리스트 뷰에서 한 행의 컨텐츠를 정의하며 탭으로 구분된 값을 포함해야 합니다. 배열 요소의 값 개수가 Headers 문자열의 항목 개수보다 적으면 나머지 필드는 빈 상태가 됩니다. 배열 요소에 Headers 문자열에 있는 항목보다 많은 값이 있는 경우 불필요한 요소가 자동으로 삭제됩니다. 배열의 문자열이 비어 있지 않을 수 있습니다(빈 문자열이 있는 경우 해당 문자열을 포함하고 그 뒤에 나오는 모든 문자열이 삭제됨).
줄 바꿈('\n')을 포함하는 리스트 항목은 이에 따라 여러 줄로 표시됩니다.
선택 사항 문은 사용자가 dlgListView의 항목을 두 번 클릭할 때마다 실행됩니다(리스트의 선택 사항만 변경되는 경우 문이 호출되도록 하는 방법에 대한 내용은 dlgSelectionChanged 참조). 문이 실행되기 전에 대화상자 객체와 함께 사용된 모든 변수는 현재 값으로 업데이트되고, 문 안에 있는 이러한 변수에 대한 변경 사항은 문이 반환될 때 대화상자에 반영됩니다.
초기 값인 Selected가 배열 색인 범위를 벗어나는 경우 항목이 선택되지 않습니다.
Headers가 빈 문자열인 경우 배열의 첫 번째 요소가 헤더 문자열로 사용됩니다. 따라서 첫 번째 항목의 색인은 1이 됩니다.
dlgListView의 컨텐츠는 해당 열의 헤더를 클릭하여 임의 열을 기준으로 정렬할 수 있습니다. 열 헤더를 "클릭하고 끌어" 열을 교환할 수도 있습니다. 이러한 변경 사항은 배열의 컨텐츠에 영향을 주지 않습니다. 컨텐츠를 영숫자순으로 정렬하려면 숫자 string[] 배열을 사용할 수 있습니다.
예
string Colors[] = { "red\tThe color RED", "green\tThe color GREEN", "blue\tThe color BLUE" };
int Selected = 0; // initially selects "red"
dlgListView("Name\tDescription", Colors, Selected) dlgMessageBox("You have selected " + Colors[Selected]);
기능
누름 버튼을 정의합니다.
문법
dlgPushButton(string Text) statement
dlgPushButton 문은 지정된 Text로 누름 버튼을 정의합니다.
Text에 '&'가 포함된 경우 앰퍼샌드 다음에 오는 문자가 핫키가 되고 사용자가 Alt+핫키를 누르면 버튼이 선택됩니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
Text가 '+' 문자로 시작되는 경우 이 버튼이 기본 버튼이 되며, 사용자가 Enter 키를 누르면 이 기본 버튼이 선택됩니다. Text가 '-' 문자로 시작되는 경우 이 버튼이 취소 버튼이 되며, 사용자가 대화상자를 닫으면 이 기본 버튼이 선택됩니다.
이러한 표시된 취소 버튼의 문에 dlgReject()에 대한 호출이 포함되어 있는지 확인하십시오. 그렇지 않은 경우 사용자가 대화상자를 닫을 수 없습니다.
실제 '+' 또는 '-' 문자를 문자의 첫 번째 문자로 사용하려면 escape해야 합니다.
사용자가 dlgPushButton을 선택하면 지정된 문이 실행됩니다. 문이 실행되기 전에 대화상자 객체와 함께 사용된 모든 변수는 현재 값으로 업데이트되고, 문 안에 있는 이러한 변수에 대한 변경 사항은 문이 반환될 때 대화상자에 반영됩니다.
예
int defaultWidth = 10;
int defaultHeight = 20;
int width = 5;
int height = 7;
dlgPushButton("&Reset defaults") {
width = defaultWidth;
height = defaultHeight;
}
dlgPushButton("+&Accept") dlgAccept();
dlgPushButton("-Cancel") { if (dlgMessageBox("Are you sure?", "Yes", "No") == 0) dlgReject(); }
기능
라디오 버튼을 정의합니다.
문법
dlgRadioButton(string Text, int &Selected) [ statement ]
dlgRadioButton 문은 지정된 Text로 라디오 버튼을 정의합니다.
Text에 '&'가 포함된 경우 앰퍼샌드 다음에 오는 문자가 핫키가 되고 사용자가 Alt+핫키를 누르면 버튼이 선택됩니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
dlgRadioButton은 dlgGroup 내에서만 사용할 수 있습니다. 동일한 그룹 내의 모든 라디오 버튼은 동일한 Selected 변수를 사용해야 합니다!
사용자가 dlgRadioButton을 선택하는 경우 dlgGroup 내의 해당 버튼 색인이 Selected 변수에 저장됩니다. Selected의 초기 값은 어떤 라디오 버튼이 처음에 선택되는지를 정의합니다. Selected가 이 그룹에 대한 유효한 범위를 벗어날 경우 라디오 버튼이 선택되지 않습니다. 올바른 라디오 버튼을 선택하려면 첫 번째 dlgRadioButton이 정의되기 전에 Selected를 설정해야 하며, 후속 라디오 버튼을 추가하는 중간에는 이 옵션을 수정해서는 안 됩니다. 그렇지 않은 경우 선택할 라디오 버튼(있는 경우)이 정의되지 않습니다.
선택 사항 문은 dlgRadioButton을 선택할 때마다 실행됩니다.
예
int align = 1;
dlgGroup("Alignment") {
dlgRadioButton("&Top", align);
dlgRadioButton("&Center", align);
dlgRadioButton("&Bottom", align);
}
기능
실제 입력 필드를 정의합니다.
문법
dlgRealEdit(real &Value, real Min, real Max)
dlgRealEdit 문은 지정된 Value로 실제 입력 필드를 정의합니다.
처음에 Value가 최소값과 최대값으로 정의된 범위를 벗어나는 경우 이러한 값으로 제한됩니다.
예
real Value = 1.4142;
dlgHBoxLayout {
dlgLabel("Enter a &Number between 0 and 99");
dlgRealEdit(Value, 0.0, 99.0);
}
기능
상자 배치 컨텍스트에서 추가 공간을 정의합니다.
문법
dlgSpacing(int Size)
dlgSpacing 문은 수직 또는 수평 상자 배치 컨텍스트에서 추가 공간을 정의합니다.
Size는 추가 공간의 픽셀 수를 정의합니다.
예
dlgVBoxLayout {
dlgLabel("Label 1");
dlgSpacing(40);
dlgLabel("Label 2");
}
기능
스핀 상자 선택 필드를 정의합니다.
문법
dlgSpinBox(int &Value, int Min, int Max)
dlgSpinBox 문은 지정된 Value로 스핀 상자 입력 필드를 정의합니다.
처음에 Value가 최소값과 최대값으로 정의된 범위를 벗어나는 경우 이러한 값으로 제한됩니다.
예
int Value = 42;
dlgHBoxLayout {
dlgLabel("&Select value");
dlgSpinBox(Value, 0, 99);
}
기능
상자 배치 컨텍스트에서 빈 신축 가능 공간을 정의합니다.
문법
dlgStretch(int Factor)
dlgStretch 문은 수직 또는 수평 상자 배치 컨텍스트에서 빈 신축 가능 공간을 정의합니다.
Factor는 공간의 신축 계수를 정의합니다.
예
dlgHBoxLayout {
dlgStretch(1);
dlgPushButton("+OK") { dlgAccept(); };
dlgPushButton("Cancel") { dlgReject(); };
}
기능
문자열 입력 필드를 정의합니다.
문법
dlgStringEdit(string &Text[, string &History[][, int Size]])
dlgStringEdit 문은 지정된 Text로 한 줄 문자 입력 필드를 정의합니다.
History가 지정되면 사용자가 시간에 따라 입력한 문자열이 해당 문자열 배열에 저장됩니다. 그러면 입력 필드에 이전에 입력한 문자열에서 선택할 수 있는 버튼이 표시됩니다. 0보다 큰 Size가 지정되면 해당 수의 문자열만 배열에 저장됩니다. 대화상자가 새로 열릴 때 History에 데이터가 포함되어 있으면 해당 데이터가 사용 내역을 초기화하는 데 사용됩니다. 가장 최근에 입력한 사용자 입력은 색인 0에 저장됩니다. History의 문자열은 비어 있을 수 없습니다. 빈 문자열이 있으면 해당 문자열을 포함하며 그 뒤에 나오는 모든 문자열이 삭제됩니다.
예
string Name = "Linus";
dlgHBoxLayout {
dlgLabel("Enter &Name");
dlgStringEdit(Name);
}
기능
탭 페이지를 정의합니다.
문법
dlgTabPage(string Title) statement
dlgTabPage 문은 지정된 문이 포함된 지정된 Title로 탭 페이지를 정의합니다.
Title에 '&'가 포함된 경우 앰퍼샌드 다음에 오는 문자가 핫키가 되고 사용자가 Alt+핫키를 누르면 탭 페이지가 열립니다. 문자에 실제 '&' 문자가 있는 경우 escape해야 합니다.
탭 페이지는 dlgTabWidget 내에서만 사용할 수 있습니다.
기본적으로 dlgTabPage에는 dlgVBoxLayout이 포함되어 있으므로 간단한 탭 페이지에서는 배치에 대해 걱정할 필요가 없습니다.
예
dlgTabWidget {
dlgTabPage("Tab &1") {
dlgLabel("This is page 1");
}
dlgTabPage("Tab &2") {
dlgLabel("This is page 2");
}
}
기능
탭 페이지에 대한 컨테이너를 정의합니다.
문법
dlgTabWidget { tabpages }
dlgTabWidget(int &Index) { tabpages }
dlgTabWidget은 탭 페이지 세트에 대한 컨테이너를 정의합니다.
tabpages는 하나 이상의 dlgTabPage 객체 시퀀스여야 합니다. 이 시퀀스에는 다른 대화상자 객체가 없어야 합니다.
Index는 초기에 선택해야 하는 탭을 정의합니다. 이 선택이 변경되면 변수 Index가 그에 따라 설정됩니다. 첫 번째 페이지는 제목과 관계없이 색인 0을 가집니다.
예
dlgTabWidget {
dlgTabPage("Tab &1") {
dlgLabel("This is page 1");
}
dlgTabPage("Tab &2") {
dlgLabel("This is page 2");
}
}
dlgDialog("test")
{
int TabNr = 0;
int CheckBoxValue[];
dlgTabWidget(TabNr) {
for (int i = 0; i <= 9; i++) {
string s;
sprintf(s, "%d", i);
dlgTabPage("Tab " + s) {
dlgLabel("This is page " + s);
dlgCheckBox(s, CheckBoxValue[i]) {
string Msg;
sprintf(Msg, "Value #%d: %d\n", TabNr, CheckBoxValue[TabNr]);
dlgMessageBox(Msg);
}
}
}
}
};
기능
여러 줄 문자 입력 필드를 정의합니다.
문법
dlgTextEdit(string &Text)
dlgTextEdit 문은 지정된 Text로 여러 줄 문자 입력 필드를 정의합니다.
Text의 줄은 새 행 문자('\n')로 구분해야 합니다. Text에 포함된 줄 끝의 공백 문자는 제거되고, 반환 시 줄 끝에 공백 문자가 포함되지 않습니다. 문자 끝의 빈 줄은 완전히 제거됩니다.
예
string Text = "This is some text.\nLine 2\nLine 3";
dlgVBoxLayout {
dlgLabel("&Edit the text");
dlgTextEdit(Text);
}
기능
여러 줄 문자 뷰어 필드를 정의합니다.
문법
dlgTextView(string Text) dlgTextView(string Text, string &Link) statement
dlgTextView 문은 지정된 Text로 여러 줄 문자 뷰어 필드를 정의합니다.
Text에는 HTML 태그가 포함될 수 있습니다.
Text의 외부 하이퍼링크는 절절한 응용프로그램 프로그램에서 열립니다.
Link가 지정되고 Text에 하이퍼링크가 포함된 경우 사용자가 하이퍼링크를 클릭할 때마다 문이 실행되고, Link 값은 <a href=...>
태그가 href 값으로 정의하는 값으로 설정됩니다. 문 실행 후 Link 변수가 비어 있지 않으면 기본 하이퍼링크 처리가 발생합니다. 이는 dlgTextView가 열리기 전에 Link에 일부 문자가 포함되어 지정된 위치로의 초기 스크롤을 허용하는 경우에도 마찬가지입니다. Link가 지정되면 외부 하이퍼링크가 열리지 않습니다.
예
string Text = "This is some text.\nLine 2\nLine 3"; dlgVBoxLayout { dlgLabel("&View the text"); dlgTextView(Text); }
기능
수직 상자 배치 컨텍스트를 엽니다.
문법
dlgVBoxLayout statement
dlgVBoxLayout 문은 지정된 문에 대한 수직 상자 배치 컨텍스트를 엽니다.
기본적으로 dlgDialog에는 dlgVBoxLayout이 포함되어 있으므로 간단한 대화상자에서는 배치에 대해 걱정할 필요가 없습니다.
예
dlgVBoxLayout {
dlgLabel("Box 1");
dlgLabel("Box 2");
dlgLabel("Box 3");
}
사용자 언어 대화상자 내의 모든 객체는 배치 컨텍스트 내에 배치됩니다.
배치 컨텍스트는 그리드, 수평 또는 수직일 수 있습니다.
그리드 배치 컨텍스트의 객체는 객체가 배치될 셀의 그리드 좌표를 지정해야 합니다. 행 5, 열 2에 문자 레이블을 배치하려면 다음을 작성합니다.
dlgGridLayout {
dlgCell(5, 2) dlgLabel("Text");
}
객체가 둘 이상의 셀에 걸쳐 있게 될 경우 시작 셀과 끝 셀의 좌표를 지정해야 합니다. 행 1, 열 2에서 행 3, 열 5까지 확장되는 그룹을 배치하려면 다음을 작성합니다.
dlgGridLayout {
dlgCell(1, 2, 3, 5) dlgGroup("Title") {
//...
}
}
수평 배치 컨텍스트의 객체는 왼쪽에서 오른쪽으로 배치됩니다. 특수 객체 dlgStretch 및 dlgSpacing을 사용하여 사용 가능한 공간의 분산을 더 미세하게 조정할 수 있습니다.
대화상자의 오른쪽 모서리까지 배치되는 두 개의 누름 버튼을 정의하려면 다음을 작성합니다.
dlgHBoxLayout {
dlgStretch(1);
dlgPushButton("+OK") dlgAccept();
dlgPushButton("Cancel") dlgReject();
}
수직 배치 컨텍스트의 객체는 상단에서 하단으로 배치된다는 점을 제외하고 수평 배치 컨텍스트의 객체와 동일한 규칙을 따릅니다.
수직, 수평 및 그리드 배치 컨텍스트를 혼합하여 대화상자의 원하는 배치 구조를 작성할 수 있습니다. 이에 대한 데모를 보려면 전체 예를 참고하십시오.
사용자 언어 대화상자에서 다음 함수를 사용할 수 있습니다.
기능
대화상자를 닫고 컨텐츠를 수락합니다.
문법
void dlgAccept([ int Result ]);
dlgAccept 함수는 현재 문 시퀀스가 완료된 후 dlgDialog를 닫고 결과를 반환합니다.
사용자가 변경한 대화상자 값이 모두 수락되고 대화상자 객체가 정의될 때 지정된 변수에 복사됩니다.
선택적 Result는 대화상자에서 반환되는 값입니다. 일반적으로 이는 양의 정수 값이어야 합니다. 값을 지정하지 않으면 기본값은 1입니다.
*dlgAccept()*는 일반 프로그램 실행으로 되돌아가므로 다음과 같은 시퀀스에서 문이 계속 실행됩니다.
dlgPushButton("OK") {
dlgAccept();
dlgMessageBox("Accepting!");
}
이러한 시퀀스에서 dlgAccept() 이후의 문이 계속 실행됩니다!
예
int Result = dlgDialog("Test") {
dlgPushButton("+OK") dlgAccept(42);
dlgPushButton("Cancel") dlgReject();
};
기능
값을 변경한 후 대화상자를 다시 표시합니다.
문법
void dlgRedisplay(void);
대화상자 객체를 정의할 때 사용되는 변수가 변경된 후 dlgRedisplay 함수를 호출하여 dlgDialog를 즉시 새로 고침할 수 있습니다.
프로그램 코드를 실행하는 동안 대화상자를 새로 고침하려는 경우 *dlgRedisplay()*를 호출하기만 하면 됩니다. 아래 예에서는 상태가 "Running..."으로 변경되고, "프로그램 동작"이 수행되기 전에 dlgRedisplay()를 호출하여 이 변경 사항을 적용해야 합니다. 마지막 상태가 "Finished."로 변경된 후에는 문을 빠져나간 후에 모든 대화상자 객체가 자동으로 업데이트되므로 dlgRedisplay()를 호출할 필요가 없습니다.
예
string Status = "Idle";
int Result = dlgDialog("Test") {
dlgLabel(Status, 1); // note the '1' to tell the label to be updated!
dlgPushButton("+OK") dlgAccept(42);
dlgPushButton("Cancel") dlgReject();
dlgPushButton("Run") {
Status = "Running...";
dlgRedisplay();
// some program action here...
Status = "Finished.";
}
};
기능
모든 대화상자 객체를 초기 값으로 재설정합니다.
문법
void dlgReset(void);
dlgReset 함수는 초기 값을 현재 dlgDialog의 모든 대화상자 객체에 다시 복사합니다.
사용자가 대화상자에서 변경한 사항은 모두 삭제됩니다.
*dlgReject()*를 호출하면 *dlgReset()*이 호출됩니다.
예
int Number = 1;
int Result = dlgDialog("Test") {
dlgIntEdit(Number);
dlgPushButton("+OK") dlgAccept(42);
dlgPushButton("Cancel") dlgReject();
dlgPushButton("Reset") dlgReset();
};
기능
대화상자를 닫고 해당 컨텐츠를 거부합니다.
문법
void dlgReject([ int Result ]);
dlgReject 함수는 현재 문 시퀀스가 완료된 후 dlgDialog를 닫고 결과를 반환합니다.
사용자가 대화상자에서 변경한 사항은 모두 삭제됩니다. 대화상자 객체가 정의되었을 때 지정된 변수는 대화상자가 반환될 때 원래 값으로 재설정됩니다.
선택적 Result는 대화상자에서 반환되는 값입니다. 일반적으로 이는 0이나 음수 정수 값이어야 합니다. 값을 지정하지 않으면 기본값은 0입니다.
*dlgReject()*는 일반 프로그램 실행으로 되돌아가므로 다음과 같은 시퀀스에서 문이 계속 실행됩니다.
dlgPushButton("Cancel") {
dlgReject();
dlgMessageBox("Rejecting!");
}
이러한 시퀀스에서 dlgReject() 이후의 문이 계속 실행됩니다!
*dlgReject()*를 호출하면 * dlgReset()*이 호출됩니다.
예
int Result = dlgDialog("Test") {
dlgPushButton("+OK") dlgAccept(42);
dlgPushButton("Cancel") dlgReject();
};
기능
dlgListView 또는 dlgListBox의 현재 선택이 변경되었는지 여부를 알려줍니다.
문법
int dlgSelectionChanged(void);
반환
리스트의 선택만 변경된 경우 dlgSelectionChanged 함수는 0이 아닌 값을 반환합니다.
dlgSelectionChanged 함수는 사용자가 항목을 두 번 클릭했기 때문에 dlgListView 또는 dlgListBox의 문이 호출되었는지 또는 리스트의 현재 선택만 변경되었는지 여부를 결정하기 위해 리스트 컨텍스트에서 사용될 수 있습니다.
dlgListView 또는 dlgListBox의 문에 dlgSelectionChanged에 대한 호출이 포함되어 있지 않은 경우 해당 문은 사용자가 리스트에서 항목을 두 번 클릭할 때만 실행됩니다. 그러나 ULP가 리스트의 현재 선택에 대한 변경 사항에 반응해야 하는 경우 리스트 문 내에서 dlgSelectionChanged를 호출할 수 있습니다. 이렇게 하면 리스트의 현재 선택이 변경되는 경우에도 해당 문이 호출됩니다.
대화상자가 열릴 때 리스트 항목이 초기에 선택되고 리스트 문에 dlgSelectionChanged에 대한 호출이 포함되면 "선택 없음"에서 실제 선택으로의 초기 변경을 나타내기 위해 이 문이 true를 반환하는 dlgSelectionChanged와 함께 실행됩니다. 나중에 문자열이나 리스트 선택을 프로그래밍 방식으로 변경해도 리스트 문이 자동으로 실행되지 않습니다. 현재 리스트 항목이 다른 대화상자 객체(예: 현재 선택한 항목의 확장된 표현을 표시하는 dlgTextView)를 제어하는 경우 이 점을 기억하는 것이 중요합니다.
예
string Colors[] = { "red\tThe color RED", "green\tThe color GREEN", "blue\tThe color BLUE" };
int Selected = 0; // initially selects "red"
string MyColor;
dlgLabel(MyColor, 1);
dlgListView("Name\tDescription", Colors, Selected) {
if (dlgSelectionChanged())
MyColor = Colors[Selected];
else
dlgMessageBox("You have chosen " + Colors[Selected]);
}
일부 문자는 버튼 또는 레이블 문자에서 특별한 의미를 가지므로 문자 그대로 나타나려면 escape해야 합니다. 이렇게 하려면 다음과 같이 문자 앞에 백슬래시를 추가해야 합니다.
dlgLabel("Miller \\& Co.");
이렇게 하면 대화상자에 "Miller & Co."가 표시됩니다. 이 선은 먼저 사용자 언어 파서로 이동하며 여기서 첫 번째 백슬래시가 제거되므로 실제로는 두 개의 백슬래시 문자가 있습니다.
다음은 사용자 언어 대화상자의 전체 예입니다.
int hor = 1;
int ver = 1;
string fileName;
int Result = dlgDialog("Enter Parameters") {
dlgHBoxLayout {
dlgStretch(1);
dlgLabel("This is a simple dialog");
dlgStretch(1);
}
dlgHBoxLayout {
dlgGroup("Horizontal") {
dlgRadioButton("&Top", hor);
dlgRadioButton("&Center", hor);
dlgRadioButton("&Bottom", hor);
}
dlgGroup("Vertical") {
dlgRadioButton("&Left", ver);
dlgRadioButton("C&enter", ver);
dlgRadioButton("&Right", ver);
}
}
dlgHBoxLayout {
dlgLabel("File &name:");
dlgStringEdit(fileName);
dlgPushButton("Bro&wse") {
fileName = dlgFileOpen("Select a file", fileName);
}
}
dlgGridLayout {
dlgCell(0, 0) dlgLabel("Row 0/Col 0");
dlgCell(1, 0) dlgLabel("Row 1/Col 0");
dlgCell(0, 1) dlgLabel("Row 0/Col 1");
dlgCell(1, 1) dlgLabel("Row 1/Col 1");
}
dlgSpacing(10);
dlgHBoxLayout {
dlgStretch(1);
dlgPushButton("+OK") dlgAccept();
dlgPushButton("Cancel") dlgReject();
}
};