Книги_AutoCad_2 / Настройка AutoCAD_Sham_Tickoo-Customizing_2006г
.pdf
Программирование диалоговых окон с помощью языка Dialog Control Language |
521 |
Атрибуты key, label и is_default
Атрибут key
Формат в DCL: key
Примеры:
key = "accept" key = "XLimit"
Атрибут key используется для присваивания имен элементам диалоговых окон. Присвоенные имена, в свою очередь, используются в прикладных программах для управления соответствующими элементами. Имена элементов должны указываться в двойных кавычках. В определении диалогового окна может содержаться любое количество значений, присвоенных атрибуту key, но каждое из этих значений должно быть уникальным. В ранее приведенном примере (key = "accept") атрибут key получает строковое значение "accept". Если в определении диалогового окна имеется еще один атрибут key, вы должны присвоить ему какое-нибудь другое значение.
Атрибут label
Формат в DCL: label
Примеры
label = "OK"
label = "Hello DCL Users"
Иногда возникает необходимость ввести в диалоговое окно какое-нибудь обозначение. Для этого используется атрибут label, с помощью которого можно создавать надписи в блочных столбцах и строках, в группах переключателей или флажков, на отдельных кнопках, в текстовых и диалоговых окнах. Примеры наиболее частого использования атрибута label описаны в следующих разделах.
Использование атрибута label в диалоговых окнах. Надписи, создаваемые с помощью атрибута label, отображаются в верхней части диалогового окна или в строке заголовка. Этот атрибут должен иметь значение, представляющее собой текстовую строку, заключенную в двойные кавычки. Использование атрибута label в диалоговых окнах является необязательным; по умолчанию диалоговое окно отображается без заголовка.
Примеры
welcome : dialog {
label = "Sample Dialog Box";
В этом примере выражение “Sample Dialog Box” отображается в строке заголовка диалогового окна (рис. 15.4).
Использование атрибута label в блочном столбце. Надпись, созданная в блочном столбце с помощью атрибута label, располагается в блоке, который находится в верхнем левом углу столбца; в этом случае блок состоит из одной строки, расположенной в верхней части столбца. В качестве метки используется строковое выражение, взятое в кавычки. По умолчанию строковое выражение представляет собой набор парных кавычек, состоящий из открывающей и закрывающей кавычек (“ ”). При использовании значения по умолчанию в диалоговом окне отображается блок, не содержащий каких-либо надписей.
Программирование диалоговых окон с помощью языка Dialog Control Language 523
Этот атрибут позволяет регулировать ширину элементов диалогового окна. Например, для того чтобы избежать “растягивания” элемента на всю ширину диалогового окна, атрибуту fixed_width присваивается значение true. В этом случае ширина элемента будет автоматически согласовываться с длиной содержащейся в нем текстовой строки.
Атрибут alignment
Формат в DCL: alignment
Примеры
alignment = centered alignment = right
Значение, присвоенное атрибуту alignment, определяет горизонтальное или вертикальное положение элемента в строке или столбце. Например, для элемента, расположенного в строке, этому атрибуту может быть присвоено одно из следующих значений: left, right или centered. По умолчанию атрибут alignment имеет значение left; это обеспечивает выравнивание элемента по левому краю. Для элемента, расположенного в столбце, атрибуту alignment может быть присвоено значение top, bottom или centered. По умолчанию этот атрибут имеет значение centered.
Пример 1
Используя язык управления диалогом (DCL), напишите программу для диалогового окна, показанного на рис. 15.4. Диалоговое окно содержит две текстовые метки и кнопку ОК, которая находится в нижней части окна.
Ниже приведен листинг файла DCL для диалогового окна, описанного в примере 1. Этому файлу присвоено имя dclwel1.dcl. Номера строк не являются частью про-
граммного кода, а используются только для ссылок.
Рис. 15.4. Диалоговое окно для примера 1 |
|
welcome1 : dialog { |
1 |
label = "Sample Dialog Box"; |
2 |
: text { |
3 |
label = "Welcome to the world DCL"; |
4 |
} |
5 |
: text { |
6 |
label = "Dialog Control Language"; |
7 |
} |
8 |
: button { |
9 |
key = "accept" |
10 |
label = "OK" |
11 |
is_default = true |
12 |
} |
13 |
} |
14 |
524 |
Глава 15 |
Пояснения
Строка 1
welcome1 : dialog {
В этой строке выражение welcome1 является именем диалогового окна, которое описывается в данной программе. В конце строки находится открывающая фигурная скобка, с которой начинается определение диалогового окна.
Строка 2
label = "Sample Dialog Box";
В этой строке выражение label является атрибутом метки, а "Sample Dialog Box" представляет собой строковое значение, которое присваивается этому атрибуту. Присвоенное значение будет отображено в строке заголовка диалогового окна. Описание метки должно быть заключено в кавычки. Если эта строка будет пропущена, строка заголовка диалогового окна не будет содержать никакой информации.
Строки 3–5
: text {
label = "Welcome to the world DCL";
}
Эти строки определяют текстовый элемент, содержащий описание метки. В первой строке содержится выражение text, являющееся обозначением текстового элемента. В следующей строке находится выражение label = "Welcome to the world DCL";, определяющее метку элемента, расположенную в диалоговом окне с выравниванием по левому краю. Закрывающая фигурная скобка завершает определение этого элемента.
Строки 9–13
: button { key = "accept" label = "OK"
is_default = true
}
Эти строки определяют атрибут элемента “button” (“кнопка”). Выражение button, содержащееся в первой строке, является обозначением всех элементов этого типа. Во второй строке содержится выражение key = "accept", которое определяет имя ASCII, используемое прикладными программами при обращении к указанному элементу. Следующая строка (is_default = true) обозначает, что этот элемент является кнопкой по умолчанию. Данная кнопка будет автоматически выбираться при нажатии клавиши <Enter>.
Закрывающая фигурная скобка, содержащаяся в строке 14, завершает определение диалогового окна.
Загрузка файлов DCL
Файлы DCL, как и файлы AutoLISP, можно загружать из графического редактора AutoCAD. Но при этом не забывайте, что каталог, содержащий файлы DCL, должен быть указан в пути доступа к вспомогательным файлам AutoCAD. Если путь доступа к каталогу не указан, то для обеспечения загрузки диалогового окна необходимо ввести
Программирование диалоговых окон с помощью языка Dialog Control Language 525
полное путевое имя данного файла. Каждый файл DCL может содержать определение одного или нескольких диалоговых окон. Количество диалоговых окон, которые могут быть определены в файле DCL, не ограничено. Команда, используемая для загрузки диалогового окна, имеет следующий формат:
(load_dialog имя_файла)
где
•load_dialog — команда загрузки диалогового окна;
•имя_файла — имя файла DCL без или с файловым расширением (.dcl).
Пример
(load_dialog "dclwel1.dcl") или (load_dialog "dclwel1")
В этом примере dclewl1 — имя файла DCL, а .dcl — файловое расширение, характерное для файлов DCL.
Примечание
Загрузка программ DCL и отображение диалоговых окон, выполняемые с помощью функций load_dialog и new_dialog, приводит к “замораживанию” экрана AutoCAD. Чтобы избежать подобной ситуации, рекомендуется загружать программы DCL и выводить создаваемые диалоговые окна, используя соответствующие функции AutoLISP. (См. раздел “Использование функций AutoLISP для загрузки файлов DCL” в этой главе.)
Имена файлов можно указывать как с файловым расширением, так и без него (например, welcome1 или welcome1.dcl). Функция загрузки возвращает целочисленное значение, используемое в функциях new_dialog и unload_dialog в качестве абстрактного идентификатора. В следующем разделе это число будет называться dcl_id. Следует заметить, что использовать для обозначения идентификатора это название не обязательно; описатель может иметь любое другое имя, например, dclid или просто id.
Отображение нового диалогового окна
Функция load_dialog выполняет загрузку файлов DCL, но не обеспечивает отображение диалогового окна на экране. Для этой цели используется команда new_dialog, имеющая следующий формат:
(new_dialog диалоговое_окно идентификатор)
где
•new_dialog — команда, отображающая диалоговое окно на экране;
•диалоговое_окно — имя диалогового окна;
•идентификатор — целое число, возвращаемое функцией load_dialog.
Пример
(new_dialog "welcome1" 1)
Как следует из этого примера, значение абстрактного идентификатора dcl_id, возвращенное функцией load_dialog, равно 1. Файл DCL, созданный в примере 1, можно загрузить с помощью команд load_dialog и new_dialog. В приведенной цепочке команд описатель dcl_id, возвращенный функцией load_dialog, имеет значение 3. На рис. 15.5 показано диалоговое окно, появившееся на экране после выполнения следующих команд:
Программирование диалоговых окон с помощью языка Dialog Control Language |
527 |
welcome2 : dialog {
label = "Sample Dialog Box"; : text {
label = "Welcome to the world of DCL";
}
: text {
label = "Hello - DCL";
}
: button {
key = "accept"; label = "OK";
is_default = true;
fixed_width = true; // (Регулировка ширины)
alignment = centered; // (Выравнивание текста по центру)
}
}
Использование функции AutoLISP для загрузки файлов DCL
Чтобы избежать замораживания экрана, которое возникает при загрузке файлов DCL и отображении диалоговых окон, выполняемом с помощью команд DCL, можно воспользоваться следующей программой AutoLISP:
(defun c:load_dcl(/ dcl_id )
(setq dcl_id (load_dialog "dclwel2.dcl")) - (загрузка файла DCL)
(new_dialog "welcome2" dcl_id) - (инициализация диалогового окна) (start_dialog) - (отображение диалогового окна)
(princ)
)
В этой программе:
•load_dcl — имя функции AutoLISP;
•dclwel2 — имя файла DCL, который вы хотите загрузить;
•welcome2 — имя диалогового окна, определенного в файле DCL.
Использование стандартных кнопочных субблоков
Вфайле base.dcl содержится ряд стандартных кнопочных субблоков, используемых
вфайлах DCL для обеспечения совместимости различных диалоговых окон. Одной из таких предопределенных кнопок является субблок ok_cancel, используемый для ввода кнопок OK и Cancel в диалоговое окно (рис. 15.7). Перед вами листинг файла DCL (пример 1), в котором используется стандартный кнопочный субблок ok_cancel:
welcome3 : dialog {
label = "Sample Dialog Box"; : text {
label = "Welcome to the world of DCL";
}
: text {
label = "Dialog Control Language"; alignment = right;
}
ok_cancel;
}
528 |
Глава 15 |
Рис. 15.7. Диалоговое окно с кнопками OK и Cancel
Перед вами список стандартных кнопочных субблоков, предварительно определенных в файле base.dcl. Эти кнопки называются также кнопками диалогового окна, поскольку они используются для выхода из диалоговых окон.
Кнопка OK
• Формат в DCL: ok_only
Кнопки OK и Cancel
• Формат в DCL: ok_cancel
Кнопки OK, Cancel и Help
• Формат в DCL: ok_cancel_help
Функции AutoLISP
Функция load_dialog
Функция AutoLISP load_dialog используется для загрузки файла DCL, определенного в данной функции. В предсталенном примере программа AutoCAD загружает файл, который называется "dclwel1". Файловое расширение (.dcl) можно не указывать. При успешной загрузке файла DCL программа AutoCAD возвращает целочисленное значение, которое используется для идентификации диалогового окна.
Формат в DCL: (load_dialog имя_файла)
Примеры
(load_dialog "dclwel1") (load_dialog "dclwel1.dcl")
Функция unload_dialog
Функция AutoLISP unload_dialog используется для выгрузки файла DCL, определенного в этой функции. Идентификация файла выполняется по значению переменной dcl_id, определяющей файл DCL.
Формат в DCL: (unload_dialog dcl_id)
Пример
(unload_dialog dcl_id)
Функция new_dialog
Функция AutoLISP new_dialog используется для инициализации диалогового окна и его последующего отображения на экране. Обратите внимание, что в данном примере выражение "welcome1" является именем диалогового окна, а не файла DCL. Переменная dcl_id содержит целое число, возвращаемое при загрузке файла DCL.
Формат в DCL: (new_dialog "диалоговое_окно" dcl_id)
Программирование диалоговых окон с помощью языка Dialog Control Language 529
Пример
(new_dialog "welcome1" dcl_id)
Функция start_dialog
В программе AutoCAD функция AutoLISP start_dialog используется для приема информации, введенной пользователем. Например, когда вы щелкаете мышью на кнопке ОК, функция start_dialog извлекает значение выбранного элемента и использует его для выполнения указанных операций и завершения работы диалогового окна.
Формат в DCL: (start_dialog)
Функция done_dialog
Функция AutoLISP done_dialog используется для удаления диалогового окна с экрана. Эта функция должна быть определена в выражении действия, как показано в приведенном примере.
Формат в DCL: (done_dialog)
Пример
(action_tile "accept" "(done_dialog)")
Функция action_tile
Функция AutoLISP action_tile используется для создания ассоциативной связи между выражением действия и элементом управления диалогового окна. В приведенном примере функция action_tile ассоциирует значение "accept" с выражением действия (done_dialog), которое завершает работу диалогового окна. В данном случае "accept" — имя элемента, назначенного кнопке OK.
Формат в DCL: (action_tile имя_элемента выражение_действия)
Пример
(action_tile "accept" "(done_dialog)")
Использование AutoLISP для управления диалоговыми окнами
Когда вы загрузите файл DCL, описанный в примере 1, а затем щелкните на кнопке ОК, то окажется, что эта кнопка не выполняет требуемых функций (т.е. не обеспечивает выход из диалогового окна). Это связано с тем, что диалоговое окно само по себе не в состоянии выполнять команды AutoCAD или функции, назначаемые различным элементам. Для управления диалоговым окном требуется соответствующая прикладная программа, написанная на языке AutoLISP или созданная в системе проектирования ADS (AutoCAD Development System). Функции, определенные в AutoLISP или ADS, могут быть использованы для загрузки файла DCL, вывода диалогового окна на экран, отображения приглашений на ввод данных, присвоения введенных значений различным элементам диалогового окна, выполнения операций, соответствующих вводимым данным, и команд AutoCAD. Использование программы AutoLISP для управления диалоговым окном описано в примере 2.
530 |
Глава 15 |
Пример 2
Напишите программу на языке AutoLISP, с помощью которой вы сможете управлять диалоговым окном и выполнять все необходимые функции (см. пример 1).
Ниже представлен листинг файла DCL, описанного в примере 1. Этот файл определяет диалоговое окно welcome1, которое содержит только одну кнопку действия: "ОК". С помощью этой кнопки вы сможете выйти из диалогового окна. Как уже говорилось, диалоговое окно не сможет выполнить функцию, назначенную кнопке ОК, до тех пор, пока вы не напишите программу, обеспечивающую выполнение функций, определенных в диалоговом окне.
welcome1 : dialog {
label = "Sample Dialog Box"; : text {
label = "Welcome to the world DCL";
}
: text {
label = "Dialog Control Language";
}
: button {
key = "accept" label = "OK" is_default = true
}
}
Ниже приведен листинг программы AutoLISP, которая обеспечивает загрузку файла DCL (dclwel1) и отображение диалогового окна welcome1, а также определяет функции кнопки OK. Номера строк не являются частью программного кода, а используются
только для ссылок.
(defun C:welcome (/ dcl_id) |
1 |
(setq dcl_id (load_dialog "dclwel1.dcl")) |
2 |
(new_dialog "welcome1" dcl_id) |
3 |
(action_tile |
4 |
"accept" |
5 |
"(done_dialog)") |
6 |
(start_dialog) |
7 |
(unload_dialog dcl_id) |
8 |
(princ) |
9 |
) |
10 |
Пояснения
Строка 1
(defun C:welcome (/ dcl_id)
В этой строке defun — функция AutoLISP, используемая для определения функции welcome. Благодаря выражению С:, стоящему перед именем определяемой функции, функция welcome может выполняться таким же образом, как и обычные команды AutoCAD (т.е. из командной строки). Эта функция содержит локальную переменную
dcl_id.
