Діалоги
Діалогові вікна мови користувача дозволяють вам визначити власний зовнішній інтерфейс програми мови користувача. У наступних розділах детально описано діалоги мови користувача:
- Попередньо визначені діалоги описують готові до використання стандартні діалоги
- Об’єкти діалогу визначають об’єкти, які можна використовувати в діалозі
- Інформація про макет пояснює, як визначити розташування об’єктів у діалоговому вікні
- Функції діалогу описує спеціальні функції для використання з діалогами
- Повний приклад показує повний ULP із діалоговим вікном введення даних
Попередньо визначені діалоги
Попередньо визначені діалоги реалізують типові стандартні діалоги, які часто використовуються для вибору імен файлів або видачі повідомлень про помилки.
Перегляньте розділ «Об’єкти діалогу» для отримання інформації про те, як визначити власні складні діалоги користувача.
dlgDirectory()
функція
Відображає діалогове вікно каталогу.
Синтаксис
string dlgDirectory ( string Title [, string Start ])
Повернення
Функція dlgDirectory повертає повний шлях до вибраного каталогу. Якщо користувач скасував діалогове вікно, результатом буде порожній рядок.
Дивіться також dlgFileOpen
Функція dlgDirectory відображає діалогове вікно каталогу, з якого користувач може вибрати каталог. Заголовок буде використано як заголовок діалогового вікна.
Якщо Пуск не порожній, він буде використаний як початкова точка для dlgDirectory.
приклад
string dirName ; dirName = dlgDirectory ( "Select a directory" , "" );
dlgFileOpen(), dlgFileSave()
функція
Відображає діалогове вікно файлу.
Синтаксис
string dlgFileOpen ( string Title [, string Start [, string Filter ]])
string dlgFileSave ( string Title [, string Start [, string Filter ]])
Повернення
Функції dlgFileOpen і dlgFileSave повертають повний шлях до вибраного файлу. Якщо користувач скасував діалогове вікно, результатом буде порожній рядок.
Дивіться також dlgDirectory
Функції dlgFileOpen і dlgFileSave відображають діалогове вікно файлу, з якого користувач може вибрати файл. Заголовок буде використано як заголовок діалогового вікна.
Якщо поле «Пуск» не пусте, його буде використано як початкову точку діалогового вікна файлу. Інакше буде використано поточний каталог.
Відображатимуться лише файли, що відповідають фільтру . Якщо фільтр порожній, будуть відображені всі файли.
Фільтр може бути простим символом підстановки (як у « *.brd
»), списком символів узагальнення (як у « *.bmp
*.jpg
») або може навіть містити описовий текст, як у «Растрові файли ( *.bmp
) ". Якщо поле зі списком «Тип файлу» діалогового вікна файлу має містити кілька записів, вони мають бути розділені подвійною крапкою з комою, як у «Растрові файли ( *.bmp
);; Інші зображення ( *.jpg
*.png
)».
приклад
string fileName ; fileName = dlgFileOpen ( "Select a file" , "" , "*.brd" );
dlgMessageBox()
функція
Відображає вікно повідомлення.
Синтаксис
int dlgMessageBox ( string Message [, button_list ])
Повернення
Функція dlgMessageBox повертає індекс кнопки, яку вибрав користувач. Перша кнопка в button_list має індекс 0.
Дивіться також status()
Функція dlgMessageBox відображає дане повідомлення в модальному діалоговому вікні та чекає, поки користувач не вибере одну з кнопок, визначених у button_list .
Якщо повідомлення містить будь-які теги HTML, символи '<', '>' і '&' повинні бути надані як <
, >
і &
, відповідно, якщо вони мають відображатися як такі.
button_list — необов’язковий список рядків, розділених комами, який визначає набір кнопок, які відображатимуться внизу вікна повідомлення. Можна визначити максимум три кнопки. Якщо button_list не вказано, за замовчуванням встановлено «OK».
Перша кнопка у списку button_list стане кнопкою за замовчуванням (яка буде вибрана, якщо користувач натисне ENTER), а остання кнопка у списку стане «кнопкою скасування», яка буде вибрана, якщо користувач натисне ESCape або закриє вікно повідомлення . Ви можете зробити іншу кнопку кнопкою за замовчуванням, починаючи її назву з «+», або ви можете зробити іншу кнопку кнопкою скасування, починаючи її назву з «-». Щоб текст кнопки починався з фактичного «+» або «-», його потрібно екранувати.
Якщо текст кнопки містить «&», символ після амперсанда стане гарячою клавішею, і коли користувач натисне відповідну клавішу, ця кнопка буде вибрана. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
Вікну повідомлень можна додати піктограму, встановивши для першого символу Повідомлення значення
';' - for an Information
'!' - for a Warning
':' - for an Error
Однак, якщо повідомлення починається з одного з цих символів, його потрібно екранувати.
У 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
функція
Визначає розташування комірки в контексті макета сітки.
Синтаксис
dlgCell ( int row , int column [, int row2 , int column2 ]) statement
Дивіться також dlgGridLayout, dlgHBoxLayout, dlgVBoxLayout, інформація про макет, повний приклад
Оператор dlgCell визначає розташування комірки в контексті макета сітки.
Індекси рядків і стовпців починаються з 0, тому верхня ліва комірка має індекс (0, 0).
За допомогою двох параметрів діалоговий об’єкт, визначений інструкцією, буде розміщено в одній клітинці за адресами рядків і стовпців. З чотирма параметрами діалоговий об’єкт охоплюватиме всі клітинки від рядка/стовпця до рядка2/стовпця2.
За замовчуванням dlgCell містить dlgHBoxLayout , тому, якщо комірка містить більше одного діалогового об’єкта, вони будуть розташовані поруч один з одним горизонтально.
приклад
string Text ; dlgGridLayout { dlgCell ( 0 , 0 ) dlgLabel ( "Cell 0,0" ); dlgCell ( 1 , 2 , 4 , 7 ) dlgTextEdit ( Text );
}
dlgCheckBox
функція
Визначає прапорець.
Синтаксис
dlgCheckBox ( string Text , int & Checked ) [ statement ]
Дивіться також dlgRadioButton, dlgGroup, інформація про макет, повний приклад
Оператор dlgCheckBox визначає прапорець із заданим текстом.
Якщо текст містить «&», символ після амперсанда стане гарячою клавішею, і коли користувач натисне Alt+гаряча клавіша, прапорець буде перемикатися. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
dlgCheckBox в основному використовується в dlgGroup, але також може використовуватися іншим чином. Усі прапорці в одному діалоговому вікні повинні мати різні позначені змінні!
Якщо користувач позначає 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
функція
Визначає поле вибору поля зі списком.
Синтаксис
dlgComboBox(масив рядків[], int &вибрано) [ оператор ]
Дивіться також dlgListBox, dlgLabel, інформація про макет, повний приклад
Інструкція dlgComboBox визначає поле вибору поля зі списком із вмістом заданого масиву.
Вибране відображає індекс вибраного запису поля зі списком. Перший запис має індекс 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 ]);
dlgDialog
функція
Виконує діалог мови користувача.
Синтаксис
int dlgDialog ( string Title ) block ;
Повернення
Функція dlgDialog повертає ціле значення, якому можна надати визначене користувачем значення через виклик функції dlgAccept().
Якщо діалогове вікно просто закрито, повернене значення буде -1.
Дивіться також dlgGridLayout, dlgHBoxLayout, dlgVBoxLayout, dlgAccept, dlgReset, dlgReject, Повний приклад
Функція 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
функція
Відкриває контекст макета сітки.
Синтаксис
dlgGridLayout statement
Дивіться також dlgCell, dlgHBoxLayout, dlgVBoxLayout, інформація про макет, повний приклад
Оператор 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
функція
Визначає групове поле.
Синтаксис
Оператор dlgGroup(string Title).
Дивіться також dlgCheckBox, dlgRadioButton, інформація про макет, повний приклад
Оператор dlgGroup визначає групу з заданим заголовком.
За замовчуванням dlgGroup містить dlgVBoxLayout , тому простий групі не потрібно турбуватися про макет.
dlgGroup в основному використовується для розміщення набору перемикачів або прапорців, але також може містити будь-які інші об’єкти у своєму операторі. Перемикачі в dlgGroup нумеруються, починаючи з 0.
приклад
int align = 1 ; dlgGroup ( "Alignment" ) { dlgRadioButton ( "&Top" , align ); dlgRadioButton ( "&Center" , align ); dlgRadioButton ( "&Bottom" , align );
}
dlgHBoxLayout
функція
Відкриває контекст макета горизонтального поля.
Синтаксис
dlgHBoxLayout statement
Дивіться також dlgGridLayout, dlgVBoxLayout, інформація про макет, повний приклад
Оператор dlgHBoxLayout відкриває контекст макета горизонтального поля для даного оператора.
приклад
dlgHBoxLayout { dlgLabel ( "Box 1" ); dlgLabel ( "Box 2" ); dlgLabel ( "Box 3" );
}
dlgIntEdit
функція
Визначає поле введення цілого числа.
Синтаксис
dlgIntEdit ( int & Value , int Min , int Max )
Дивіться також dlgRealEdit, dlgStringEdit, dlgLabel, інформація про макет, повний приклад
Оператор dlgIntE*dit визначає поле введення цілого числа з заданим значенням.
Якщо значення початково виходить за межі діапазону, визначеного Min і Max, воно буде обмежено цими значеннями.
приклад
int Value = 42 ; dlgHBoxLayout { dlgLabel ( "Enter a &Number between 0 and 99" ); dlgIntEdit ( Value , 0 , 99 );
}
dlgLabel
функція
Визначає текстову мітку.
Синтаксис
dlgLabel ( string Text [, int Update ])
Дивіться також інформацію про макет, повний приклад, dlgRedisplay()
Оператор dlgLabel визначає мітку з заданим текстом.
Текст може бути або рядковим літералом, як у "Hello", або рядковою змінною.
Якщо текст містить будь-які теги HTML, символи '<', '>' і '&' повинні бути задані як " <
", " >
" і " &
", відповідно, якщо вони мають відображатися як такі.
Зовнішні гіперпосилання в Тексті будуть відкриті відповідною прикладною програмою.
Якщо параметр Update не дорівнює 0, а Text є рядковою змінною, його вміст можна змінити в операторі, наприклад, dlgPushButton , і мітка буде автоматично оновлена. Звичайно, це корисно, лише якщо Text є виділеною рядковою змінною (а не, наприклад, змінною циклу оператора for).
Якщо текст містить «&», а об’єкт після мітки може мати фокус клавіатури, символ після амперсанда стане гарячою клавішею, і коли користувач натисне Alt+гарячу клавішу, фокус перейде до об’єкта, який було визначено негайно після dlgLabel. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
приклад
string OS = "Windows" ; dlgHBoxLayout { dlgLabel ( OS , 1 ); dlgPushButton ( "&Change OS" ) { OS = "Linux" ; }
}
dlgListBox
функція
Визначає поле вибору списку.
Синтаксис
dlgListBox ( string array [], int & Selected ) [ statement ]
Дивіться також dlgComboBox, dlgListView, dlgSelectionChanged, dlgLabel, Layout Information, A Complete Example
Оператор dlgListBox визначає поле вибору поля зі списком із вмістом заданого масиву.
Вибране відображає індекс вибраного запису списку. Перший запис має індекс 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
функція
Визначає поле вибору перегляду списку з кількома стовпцями.
Синтаксис
dlgListView(заголовки рядків, масив рядків[], int &Selected[, int &Sort]) [ оператор ]
Дивіться також dlgListBox, dlgSelectionChanged, dlgLabel, інформація про макет, повний приклад
Інструкція dlgListView визначає поле вибору перегляду списку з кількома стовпцями з вмістом заданого масиву.
Заголовки – це розділений табуляцією список заголовків стовпців.
Вибране відображає індекс вибраного запису перегляду списку в масиві (послідовність, у якій фактично відображаються записи, може відрізнятися, оскільки вміст dlgListView можна сортувати за різними стовпцями). Перший запис має індекс 0.
Якщо спочатку не буде вибрано жодного конкретного запису, Selected має бути ініціалізовано значенням -1. Якщо встановлено значення -2, поточним стає перший елемент відповідно до поточного стовпця сортування. Якщо не вибрано жодного запису перегляду, повертається -1.
Сортування визначає, який стовпець слід використовувати для сортування списку. Крайній лівий стовпець має номер 1. Знак цього параметра визначає напрямок сортування (додатні значення сортуються в порядку зростання). Якщо значення сортування дорівнює 0 або перевищує дійсну кількість стовпців, сортування не виконуватиметься. Повернене значення Sort відображає стовпець і режим сортування, вибраний користувачем, натиснувши заголовки стовпців списку. За замовчуванням dlgListView сортує за першим стовпцем у порядку зростання.
Кожен елемент масиву визначає вміст одного рядка в поданні списку та повинен містити значення, розділені табуляцією. Якщо в елементі масиву менше значень, ніж записів у рядку Headers, інші поля будуть порожніми. Якщо в елементі масиву більше значень, ніж записів у рядку Headers, зайві елементи буде мовчки видалено. Жоден із рядків у масиві не може бути порожнім (якщо є порожній рядок, усі рядки після та включно з ним буде видалено).
Запис списку, який містить переведення рядка ('
'), буде відображено в кількох рядках відповідно.
Необов’язковий оператор виконується кожного разу, коли користувач двічі клацає на записі dlgListView (дивіться dlgSelectionChanged для інформації про те, як викликати оператор, коли змінюється лише вибір у списку). Перед виконанням інструкції всі змінні, які використовувалися з діалоговими об’єктами, оновлюються до своїх поточних значень, і будь-які зміни, внесені до цих змінних усередині інструкції, будуть відображені в діалоговому вікні, коли інструкція повернеться.
Якщо початкове значення Selected виходить за межі діапазону індексів масиву, жоден запис не буде вибрано.
Якщо Headers є порожнім рядком, перший елемент масиву використовується як рядок заголовка. Отже, індекс першого запису дорівнює 1.
Вміст dlgListView можна відсортувати за будь-яким стовпцем, клацнувши заголовок цього стовпця. Стовпці також можна поміняти місцями, «клацнувши та перетягнувши» заголовок стовпця. Зауважте, що жодна з цих змін не вплине на вміст масиву. Якщо вміст має бути відсортований буквено-цифровим способом, можна використовувати числовий масив string[].
приклад
string Colors [] = { "red The color RED" , "green The color GREEN" , "blue The color BLUE" };
int Selected = 0 ; // initially selects "red" dlgListView ( "Name Description" , Colors , Selected ) dlgMessageBox ( "You have selected " + Colors [ Selected ]);
dlgPushButton
функція
Визначає кнопку.
Синтаксис
dlgPushButton ( string Text ) statement
Дивіться також інформацію про макет, функції діалогового вікна, повний приклад
Інструкція dlgPushButton визначає кнопку з заданим текстом.
Якщо текст містить «&», символ після амперсанда стане гарячою клавішею, і коли користувач натисне Alt+гаряча клавіша, кнопка буде вибрана. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
Якщо текст починається із символу «+», ця кнопка стане кнопкою за замовчуванням, яку буде вибрано, якщо користувач натисне ENTER. Якщо текст починається із символу «-», ця кнопка стане кнопкою скасування, яку буде вибрано, якщо користувач закриє діалогове вікно.
Переконайтеся, що оператор такої позначеної кнопки скасування містить виклик dlgReject()! Інакше користувач взагалі не зможе закрити діалогове вікно!
Щоб мати справжній символ «+» або «-» як перший символ тексту, його потрібно екранувати.
Якщо користувач вибирає 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
функція
Визначає перемикач.
Синтаксис
dlgRadioButton ( string Text , int & Selected ) [ statement ]
Дивіться також dlgCheckBox, dlgGroup, інформація про макет, повний приклад
Інструкція dlgRadioButton визначає перемикач із заданим текстом.
Якщо текст містить «&», символ після амперсанда стане гарячою клавішею, і коли користувач натисне Alt+гаряча клавіша, кнопка буде вибрана. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
dlgRadioButton можна використовувати лише в dlgGroup . Усі перемикачі в одній групі повинні використовувати ту саму обрану змінну!
Якщо користувач вибирає dlgRadioButton , індекс цієї кнопки в dlgGroup зберігається у змінній Selected . Початкове значення Selected визначає, який перемикач буде вибрано спочатку. Якщо вибрано виходить за межі допустимого діапазону для цієї групи, перемикач не буде вибрано. Щоб отримати правильний вибір перемикачів, Selected має бути встановлено перед визначенням першого dlgRadioButton і не має бути змінено між додаванням наступних перемикачів. Інакше не визначено, який перемикач (якщо такий є) буде вибрано.
Необов'язковий оператор виконується щоразу, коли вибрано dlgRadioButton.
приклад
int align = 1 ; dlgGroup ( "Alignment" ) { dlgRadioButton ( "&Top" , align ); dlgRadioButton ( "&Center" , align ); dlgRadioButton ( "&Bottom" , align );
}
dlgRealEdit
функція
Визначає реальне поле введення.
Синтаксис
dlgRealEdit ( real & Value , real Min , real Max )
Дивіться також dlgIntEdit, dlgStringEdit, dlgLabel, інформація про макет, повний приклад
Оператор dlgRealEdit визначає справжнє поле введення із заданим значенням.
Якщо значення початково виходить за межі діапазону, визначеного Min і Max, воно буде обмежено цими значеннями.
приклад
real Value = 1.4142 ; dlgHBoxLayout { dlgLabel ( "Enter a &Number between 0 and 99" ); dlgRealEdit ( Value , 0.0 , 99.0 );
}
dlgSpacing
функція
Визначає додатковий простір у контексті макета коробки.
Синтаксис
dlgSpacing ( int Size )
Дивіться також dlgHBoxLayout, dlgVBoxLayout, dlgStretch, інформація про макет, повний приклад
Інструкція dlgSpacing визначає додатковий простір у вертикальному або горизонтальному контексті макета поля.
Розмір визначає кількість пікселів додаткового простору.
приклад
dlgVBoxLayout { dlgLabel ( "Label 1" ); dlgSpacing ( 40 ); dlgLabel ( "Label 2" );
}
dlgSpinBox
функція
Визначає поле вибору поля обертання.
Синтаксис
dlgSpinBox ( int & Value , int Min , int Max )
Дивіться також dlgIntEdit, dlgLabel, інформація про макет, повний приклад
Інструкція dlgSpinBox визначає поле введення вікна обертання з заданим значенням.
Якщо значення початково виходить за межі діапазону, визначеного Min і Max, воно буде обмежено цими значеннями.
приклад
int Value = 42 ; dlgHBoxLayout { dlgLabel ( "&Select value" ); dlgSpinBox ( Value , 0 , 99 );
}
dlgStretch
функція
Визначає порожній розтягуваний простір у контексті макета коробки.
Синтаксис
dlgStretch ( int Factor )
Дивіться також dlgHBoxLayout, dlgVBoxLayout, dlgSpacing, інформація про макет, повний приклад
Інструкція dlgStretch визначає порожній розтягуваний простір у вертикальному або горизонтальному контексті макета прямокутника.
Фактор визначає коефіцієнт розтягування простору.
приклад
dlgHBoxLayout { dlgStretch ( 1 ); dlgPushButton ( "+OK" ) { dlgAccept (); }; dlgPushButton ( "Cancel" ) { dlgReject (); };
}
dlgStringEdit
функція
Визначає поле введення рядка.
Синтаксис
dlgStringEdit ( string & Text [, string & History [][, int Size ]])
Дивіться також dlgRealEdit, dlgIntEdit, dlgTextEdit, dlgLabel, інформація про макет, повний приклад
Оператор dlgStringEdit визначає однорядкове поле введення тексту з заданим текстом.
Якщо вказано історію , рядки, які користувач ввів протягом певного часу, зберігаються в цьому масиві рядків. Потім у полі введення є кнопка, яка дозволяє користувачеві вибирати з попередньо введених рядків. Якщо вказано розмір, більший за нуль, у масиві зберігається лише така кількість рядків. Якщо історія містить дані під час щойно відкритого діалогового вікна, ці дані використовуватимуться для ініціалізації історії. Остання введена користувачем інформація зберігається під індексом 0. Жоден із рядків в історії не може бути порожнім. Якщо є порожній рядок, усі рядки після та включно з ним буде видалено.
приклад
string Name = "Linus" ; dlgHBoxLayout { dlgLabel ( "Enter &Name" ); dlgStringEdit ( Name );
}
dlgTabPage
функція
Визначає сторінку вкладки.
Синтаксис
dlgTabPage ( string Title ) statement
Дивіться також dlgTabWidget, інформація про макет, повний приклад
Оператор dlgTabPage визначає сторінку вкладки з заданим заголовком, що містить даний оператор.
Якщо заголовок містить «&», символ після амперсанда стане гарячою клавішею, і коли користувач натисне Alt+гарячу клавішу, відкриється ця сторінка вкладки. Щоб у тексті був фактичний символ «&», його потрібно екранувати.
Сторінки вкладок можна використовувати лише в dlgTabWidget.
За замовчуванням dlgTabPage містить dlgVBoxLayout , тому проста сторінка вкладки не повинна турбуватися про макет.
приклад
dlgTabWidget { dlgTabPage ( "Tab &1" ) { dlgLabel ( "This is page 1" );
} dlgTabPage ( "Tab &2" ) { dlgLabel ( "This is page 2" );
}
}
dlgTabWidget
функція
Визначає контейнер для сторінок вкладок.
Синтаксис
dlgTabWidget { tabpages } dlgTabWidget ( int & Index ) { tabpages }
Дивіться також dlgTabPage, інформація про макет, повний приклад
dlgTabWidget визначає контейнер для набору сторінок вкладок.
вкладки мають бути послідовністю з одного або кількох об’єктів dlgTabPage. У цій послідовності не повинно бути інших діалогових об’єктів.
Індекс визначає, яку вкладку слід вибрати спочатку. Якщо цей вибір змінюється, змінна 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
" , TabNr , CheckBoxValue [ TabNr ]); dlgMessageBox ( Msg );
}
}
}
}
};
dlgTextEdit
функція
Визначає поле для введення багаторядкового тексту.
Синтаксис
dlgTextEdit ( string & Text )
Дивіться також dlgStringEdit, dlgTextView, dlgLabel, інформація про макет, повний приклад
Інструкція dlgTextEdit визначає поле введення багаторядкового тексту з заданим Текстом.
Рядки в тексті мають бути розділені символом нового рядка ('
'). Будь-які пробіли в кінці рядків, які містяться в тексті, буде видалено, а після повернення в кінці рядків не буде пробілів. Порожні рядки в кінці тексту будуть повністю видалені.
приклад
string Text = "This is some text.
Line 2
Line 3" ; dlgVBoxLayout { dlgLabel ( "&Edit the text" ); dlgTextEdit ( Text );
}
dlgTextView
функція
Визначає поле перегляду багаторядкового тексту.
Синтаксис
dlgTextView(рядок Текст) dlgTextView(рядок Текст, рядок &Посилання) оператор
Дивіться також dlgTextEdit, dlgLabel, інформація про макет, повний приклад
Інструкція dlgTextView визначає поле перегляду багаторядкового тексту з заданим текстом.
Текст може містити теги HTML.
Зовнішні гіперпосилання в Тексті будуть відкриті відповідною прикладною програмою.
Якщо надано посилання, а текст містить гіперпосилання, інструкція виконуватиметься щоразу, коли користувач клацає гіперпосилання, при цьому значення посилання буде встановлено на значення, яке тег <a href=...>
визначає як значення href. Якщо після виконання оператора змінна Link не є порожньою, буде виконано обробку гіперпосилань за замовчуванням. Це також має місце, якщо Link містить деякий текст перед відкриттям dlgTextView, що дозволяє початкове прокручування до заданої позиції. Якщо вказано посилання, зовнішні гіперпосилання не відкриватимуться.
приклад
string Text = "Це трохи тексту.
Рядок 2
Рядок 3"; dlgVBoxLayout { dlgLabel("&Переглянути текст"); dlgTextView(Текст); }
dlgVBoxLayout
функція
Відкриває контекст макета вертикального поля.
Синтаксис
dlgVBoxLayout statement
Дивіться також dlgGridLayout, dlgHBoxLayout, інформація про макет, повний приклад
Оператор 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 ();
}
Контекст вертикального макета
Об’єкти у контексті вертикального макета дотримуються тих самих правил, що й об’єкти в контексті горизонтального макета, за винятком того, що вони розміщуються зверху вниз.
Змішування контекстів макета
Вертикальний, горизонтальний і сітковий контексти макета можна змішувати, щоб створити бажану структуру макета діалогового вікна. Перегляньте повний приклад для демонстрації цього.
Діалогові функції
У діалогових вікнах мови користувача можна використовувати такі функції:
- dlgAccept() закриває діалогове вікно та приймає його вміст
- dlgRedisplay() негайно повторно відображає діалогове вікно після зміни будь-яких значень
- dlgReset() скидає всі діалогові об’єкти до початкових значень
- dlgReject() закриває діалогове вікно та відхиляє його вміст
- dlgSelectionChanged() повідомляє, чи змінився поточний вибір у dlgListView або dlgListBox
dlgAccept()
функція
Закриває діалогове вікно та приймає його вміст.
Синтаксис
void dlgAccept ([ int Result ]);
Дивіться також dlgReject, dlgDialog, повний приклад
Функція dlgAccept змушує dlgDialog закриватися та повертатися після завершення поточної послідовності операторів.
Будь-які зміни, внесені користувачем у значення діалогового вікна, будуть прийняті та скопійовані в змінні, надані під час визначення об’єктів діалогового вікна.
Необов’язковий результат – це значення, яке буде повернено діалоговим вікном. Зазвичай це має бути додатне ціле число. Якщо значення не вказано, за умовчанням воно дорівнює 1.
Зауважте, що dlgAccept() повертає до нормального виконання програми, отже, у послідовності, як
dlgPushButton ( "OK" ) { dlgAccept (); dlgMessageBox ( "Accepting!" );
}
оператор після dlgAccept() все одно буде виконано!
приклад
int Result = dlgDialog ( "Test" ) { dlgPushButton ( "+OK" ) dlgAccept ( 42 ); dlgPushButton ( "Cancel" ) dlgReject ();
};
dlgRedisplay()
функція
Повторно відображає діалогове вікно після зміни значень.
Синтаксис
void dlgRedisplay ( void );
Дивіться також dlgReset, dlgDialog, повний приклад
Функцію dlgRedisplay можна викликати, щоб негайно оновити dlgDialog після внесення змін до змінних, які використовуються під час визначення об’єктів діалогу.
Вам потрібно лише викликати dlgRedisplay() , якщо ви хочете, щоб діалогове вікно оновлювалося під час виконання програмного коду. У наведеному нижче прикладі статус змінено на "Виконується…" і dlgRedisplay() має бути викликано, щоб ця зміна набула чинності до виконання "дій програми". Після остаточного зміни статусу на «Завершено». немає необхідності викликати 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." ;
}
};
dlgReset()
функція
Скидає всі діалогові об’єкти до початкових значень.
Синтаксис
void dlgReset ( void );
Дивіться також dlgReject, dlgDialog, повний приклад
Функція dlgReset копіює початкові значення назад у всі діалогові об’єкти поточного dlgDialog.
Будь-які зміни, внесені користувачем у значення діалогового вікна, будуть відхилені.
Виклик dlgReject() передбачає виклик dlgReset() .
приклад
int Number = 1 ;
int Result = dlgDialog ( "Test" ) { dlgIntEdit ( Number ); dlgPushButton ( "+OK" ) dlgAccept ( 42 ); dlgPushButton ( "Cancel" ) dlgReject (); dlgPushButton ( "Reset" ) dlgReset ();
};
dlgReject()
функція
Закриває діалогове вікно та відхиляє його вміст.
Синтаксис
void dlgReject ([ int Result ]);
Дивіться також dlgAccept, dlgReset, dlgDialog, повний приклад
Функція dlgReject змушує dlgDialog закриватися та повертатися після завершення поточної послідовності операторів.
Будь-які зміни, внесені користувачем у значення діалогового вікна, будуть відхилені. Змінні, надані під час визначення діалогових об’єктів, будуть скинуті до початкових значень, коли діалогове вікно повернеться.
Необов’язковий результат – це значення, яке буде повернено діалоговим вікном. Зазвичай це має бути 0 або ціле від’ємне значення. Якщо значення не вказано, за умовчанням воно дорівнює 0.
Зауважте, що dlgReject() повертає до нормального виконання програми, тому в послідовності, як
dlgPushButton ( "Cancel" ) { dlgReject (); dlgMessageBox ( "Rejecting!" );
}
оператор після dlgReject() все одно буде виконано!
Виклик dlgReject() передбачає виклик* dlgReset()*.
приклад
int Result = dlgDialog ( "Test" ) { dlgPushButton ( "+OK" ) dlgAccept ( 42 ); dlgPushButton ( "Cancel" ) dlgReject ();
};
dlgSelectionChanged()
функція
Повідомляє, чи змінився поточний вибір у dlgListView або dlgListBox.
Синтаксис
int dlgSelectionChanged ( void );
Повернення
Функція dlgSelectionChanged повертає ненульове значення, якщо змінився лише вибір у списку.
Дивіться також dlgListView, dlgListBox
Функцію dlgSelectionChanged можна використовувати в контексті списку, щоб визначити, чи оператор dlgListView або dlgListBox був викликаний через те, що користувач двічі клацнув на елементі, чи змінився лише поточний вибір у списку.
Якщо оператор dlgListView або dlgListBox не містить жодного виклику dlgSelectionChanged, цей оператор виконується лише тоді, коли користувач двічі клацає елемент у списку. Однак, якщо ULP потрібно відреагувати на зміни в поточному виборі в списку, він може викликати dlgSelectionChanged в операторі списку. Це спричиняє також виклик інструкції, якщо поточний вибір у списку змінюється.
Якщо елемент списку спочатку вибрано під час відкриття діалогового вікна, а оператор списку містить виклик dlgSelectionChanged, оператор виконується з dlgSelectionChanged, що повертає true, щоб вказати початкову зміну з «без вибору» на фактичний вибір. Будь-які пізніші програмні зміни до рядків або вибір списку не призведуть до автоматичного виконання оператора списку. Це важливо пам’ятати, якщо поточний елемент списку керує іншим діалоговим об’єктом, наприклад dlgTextView, який показує розширене представлення поточного вибраного елемента.
приклад
string Colors [] = { "red The color RED" , "green The color GREEN" , "blue The color BLUE" };
int Selected = 0 ; // initially selects "red"
string MyColor ; dlgLabel ( MyColor , 1 ); dlgListView ( "Name Description" , Colors , Selected ) {
if ( dlgSelectionChanged ())
MyColor = Colors [ Selected ];
else dlgMessageBox ( "You have chosen " + Colors [ Selected ]);
}
Втеча персонажа
Деякі символи мають спеціальні значення в текстах кнопок або міток, тому їх потрібно екранувати, якщо вони мають відображатися буквально. Для цього вам потрібно додати перед символом зворотну косу риску, як у
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 ();
}
};
Орігінал сторінки: Dialogs