§ Поддержка диалогового окна в ваших частях приложения диалогового окна определяют, как это ведет себя; однако, использование и поведение диалогового окна зависят от приложения, которое использует это.
Функциональная схема
Диалоговые окна - для интерактивного использования. Сценарий может запустить диалоговое окно, но не может управлять это или обеспечивать ввод, как только это открыто. Это - тот же самый как acedCommand () и acedCmd () функции.
Примеры, данные в этом разделе демонстрируют типичную последовательность функции диалогового окна следующим образом:
1 Загружают файл DCL ads_load_dialog () запрос.
2 Запрос ads_new_dialog () чтобы отобразить специфическое диалоговое окно на экране графики AutoCAD.
Проверьте состояние значения, которое ads_new_dialog () возвращается. При запросе ads_start_dialog () когда ads_new_dialog () запрос потерпел неудачу, может иметь непредсказуемых результатов.
3 Инициализируют диалоговое окно, основывая значения неперекрывающего расположения, списки, и изображения.
Функции, типично вызываемые в это время следующие:
§ ads_set_tile () и ads_mode_tile () для общего неперекрывающего расположения оценивает и состояния
§ ads_start_list (), ads_add_list (), и ads_end_list () для списков
§ ads_dimensions_tile () для установки значений неперекрывающего расположения, наряду с следующими функциями создания изображения:
Ads_start_image ()
Ads_vector_image ()
Ads_fill_image ()
Ads_slide_image ()
Ads_end_image ()
Вы можете также вызывать ads_client_data_tile () в это время, чтобы связать специфичные для приложения данные с диалоговым окном и его компонентами.
Вызовите ads_action_tile () в этой точке, чтобы основать функции повторного вызова.
4 Запрос ads_start_dialog () чтобы повернуть контроль над к диалоговому окну так, чтобы пользователь мог вводить ввод.
5 ввода пользователя Процесса изнутри ваших функций. Это - то, когда Вы наиболее вероятно, чтобы использовать ads_get_tile (), ads_get_attr (), ads_get_attr_string (), ads_set_tile (), и ads_mode_tile ().
6 пользователь нажимает кнопку выхода, вызывая функцию вызвать ads_done_dialog (), который тогда заставляет ads_start_dialog () возвращать значение. В этой точке, разгрузите файл DCL, вызывая ads_unload_dialog ().
Эту последовательность можно показывать схематично в псевдокоде следующим образом:
Load_dialog
New_dialog
Action_tile; и другие инициализации
Start_dialog
; Тогда изнутри выражений действия / функции повторного вызова:
Get_tile; и другая входная обработка
Set_tile
Done_dialog
Unload_dialog
Эта схема обрабатывает только одно диалоговое окно и один файл DCL одновременно. Приложения обычно имеют множественные диалоговые окна. Самый простой и самый быстрый способ обрабатывать эти диалоговые окна состоит в том, чтобы сохранить все из них в единственном файле DCL. Запрос ads_load_dialog тогда загружает все диалоговые окна сразу, и Вы можете вызывать ads_new_dialog для любого диалогового окна. Если память ограничена, однако, Вам, вероятно, придется создавать множественные файлы DCL и использование ads_unload_dialog, чтобы удалить набор тех диалоговых окон от памяти прежде, чем Вы загружаете другой набор с ads_load_dialog.
Пример диалогового окна
Следующие разделы показывают, как создавать и отобразить типовое диалоговое окно.
Файл DCL определяет помеченный диалог “ Привет, мир ”, который содержит текстовое неперекрывающее расположение и единственную кнопку OK.
Типовой файл DCL
Следующий DCL для создания типового диалогового окна сохранен в файле, вызвал hello. dcl:
hello : dialog {
label = "Sample Dialog Box";
: text {
label = "Hello, world";
}
ok_only;
}
Пример функции ObjectARX
Следующая функция ObjectARX отображает пример:
int showalert()
{
int dcl_id, dbstatus;
ads_hdlg dbhello;
// Load the DCL file.
//
ads_load_dialog("hello. dcl", &dcl_id);
// Initialize the dialog.
//
if (ads_new_dialog("hello", dcl_id, NULLCB, &dbhello) != RTNORM) {
acdbFail("Unable to initialize dialog box called
\"hello\"\n");
return BAD; // Exit if this does not work
}
// Associate an action. End expression with a key, in this
// case, the OK button. End the dialog when OK is pressed.
//
ads_action_tile(dbhello, "accept", accept_OK);
// Display the dialog box.
//
ads_start_dialog(dbhello, &dbstatus);
ads_unload_dialog(dcl_id); // Unload the DCL file
return GOOD;
}
static void CALLB accept_OK(ads_callback_packet *cpkt)
{
// DLGOK == User pressed OK
//
ads_done_dialog(cpkt->dialog, DLGOK);
}
После ads_start_dialog () запрос, диалоговое окно остается активным, пока пользователь не выбирает неперекрывающее расположение (обычно кнопка). Функция ads_action_tile () вызвана, и это вызывает функцию повторного вызова. Параметры к функции повторного вызова включены в отдельную структуру пакета повторного вызова. Повторный вызов вызывает ads_done_dialog ().
Комплексное диалоговое окно требует, больше вызывает к ads_action_tile (), возможно другая инициализация вызывает, и вероятно большее количество ввода, обрабатывающего между ads_start_dialog () и ads_unload_dialog () вызывает. Полная последовательность запроса, тем не менее, остается тем же самый.
Функции, не позволенные, в то время как диалоговое окно активно
В то время как диалоговое окно активно, ads_start_dialog () функция выполняет ее команды. При этих условиях, Вы не можете называть некоторые функции ObjectARX, потому что ими или затрагивать дисплей, который не должен измениться, в то время как диалоговое окно видимо, или они требуют ввода пользователя, который не вовлекает диалоговое окно.
Если приложение вызывает одну из этих функций прежде, чем это вызывает ads_done_dialog (), AutoCAD заканчивает все диалоговые окна и отображает сообщение ошибки слежения:
AutoCAD rejected function
AutoCAD CMDACTIVE переменная системы имеет немного, который указывает, является ли диалоговое окно активным. Для подробной информации относительно переменных системы, см. Ссылку Команды AutoCAD.
Если пользователь ввел ввод, основанный на графическом экране скорее чем использование диалоговое окно непосредственно (например, определить точку или примитив), Вы должны скрыть диалоговое окно. То есть Вы должны вызвать ads_done_dialog () чтобы восстановить изображение графического экрана, и затем перезапускать диалоговое окно после того, как пользователь сделал выбор. Следующие списки показывают функции, которые не позволяются.
Запросы AutoCAD и функции Команды
Следующие функции AutoCAD не могут быть вызваны, в то время как диалоговое окно активно:
§ acedCommand ()
§ acedCmd ()
§ acedHelp ()
§ acedOsnap ()
Функции Ввода пользователя
Следующие функции ввода пользователя не могут быть вызваны, в то время как диалоговое окно активно:
§ acedGetInt ()
§ acedGetReal ()
§ acedGetString ()
§ acedGetPoint ()
§ acedGetCorner ()
§ acedGetDist ()
§ acedGetAngle ()
§ acedGetOrient ()
§ acedGetKword ()
§ acedGetInput ()
§ acedDragGen ()
Функции управления Дисплея
Следующие функции управления дисплея не могут быть вызваны{*названы*}, в то время как диалоговое окно активно:
§ acedPrompt ()
§ acedMenuCmd ()
§ acedRedraw ()
§ acedGraphScr ()
§ acedTextScr ()
§ acedTextPage ()
Функции, которые записывают текст, типа acutPrintf (), являются полезными для отображения информации при испытании диалогового окна, но они не должны использоваться в готовом изделии.
Графические Функции Нижнего уровня
Следующие графические функции не могут быть вызваны, в то время как диалоговое окно активно:
§ acedGrVecs ()
§ acedGrDrag ()
§ acedGrRead ()
§ acedGrText ()
§ acedGrDraw ()
§ acedGrText ()
Функции множества Выбора
Интерактивный acedSSGet () вызов, не позволяется, в то время как диалоговое окно активно, но другие опции позволяются.
Обрабатывающие примитив Функции
Следующие обрабатывающие примитив функции не могут быть вызваны, в то время как диалоговое окно активно:
§ acdbEntMod ()
§ acdbEntMake ()
§ acdbEntDel ()
§ acedEntSel ()
§ acedNEntSel ()
§ acedNEntSelP ()
§ acdbEntUpd ()
Функции обратного вызова
Определять, что действие принято когда диалоговое окно неперекрывающее расположение отобрано, связь функция ObjectARX с тем неперекрывающим расположением, вызывая ads_action_tile (). В пределах повторного вызова, Вы часто нуждаетесь в доступе к атрибутам в файле DCL. Ads_get_tile () и ads_get_attr () функции обеспечивают, этот доступ (ads_get_attr () сохраняет значение в DCL, в то время как ads_get_tile () получает текущее значение во время выполнения), но значения Вы наиболее вероятно, чтобы использовать, связали с отобранным неперекрывающим расположением, обеспечиваются автоматически.
В большинстве случаев, каждое активное неперекрывающее расположение в пределах диалогового окна генерирует повторный вызов. Функция повторного вызова должна делать законность, проверяющую ее связанное неперекрывающее расположение и модифицировать информацию в диалоговом окне, которое принадлежит значению неперекрывающего расположения.
Модифицирование диалогового окна может включать издание сообщения об ошибках, отключение других неперекрывающих расположений, и отображения соответствующего текста в окне редактирования или списке.
Только кнопка OK (или ее эквивалент) должна сделать запрос значений неперекрывающего расположения, чтобы сохранить назначения пользователь, наконец отобранный. Модифицируйте переменные, связанные со значениями неперекрывающего расположения в пределах повторного вызова для кнопки OK, не в пределах повторного вызова для индивидуального неперекрывающего расположения. Если постоянные переменные модифицированы в пределах индивидуальных повторных вызовов неперекрывающего расположения, не имеется никакого способа сбросить значения, если пользователь выбирает Отмену. Если повторный вызов кнопки OK обнаруживает ошибку, это должно отобразить сообщение об ошибках и фокус возвращения к неперекрывающему расположению по ошибке; это не должно выйти из диалогового окна.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |


