Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

skill / Лбы skill / лекция4_м

.doc
Скачиваний:
50
Добавлен:
05.06.2015
Размер:
105.47 Кб
Скачать

Функции пользовательского интерфейса.

Окна, формы, меню

Есть три типа меню, которые можно создать, используя Skill:

  • popup menus – всплывающие меню

  • fixed menus – фиксированные меню

  • pulldown menus – выпадающие меню

Функции для создания popup menus

hiCreateSimpleMenuдля создания меню с текстовыми полями. В подобных меню имеется единственный уровень, содержащий лишь текстовые элементы и не одного элемента, позволяющего обратится к подменю. Если меню однажды создано, вы можете отобразить его с помощью hiDisplayMenu или связать с окном, используя hiSetWindowMenu.

hiCreateSimpleMenu(

s_menuHandie ; это символ используемый для обращения к этому меню.

t_menuTitle ;текст, который будет в заголовке меню.

l_menuItems ; список, элементов меню (кнопок).

l_menuItemsCallbacks ; функции, которые будут выполнятся кнопками.

)

=>r_hiMenu

Пример:

hiCreateSimpleMenu(

'Menu1

"MyMenu"

'( "One" "Two" )

'( "println( \"One\" )" "println( \"Two\" )" )

)

hiDisplayMenu(Menu1)

Будет создано меню следующего вида:

hiCreateMenu – создает меню с текстовыми кнопками, иконками или элементами слайдер меню.

hiCreateMenu(

s_menuHandie ; это символ используемый для обращения к этому меню.

t_menuTitle ; текст, который будет в заголовке меню.

l_menuItems ; список,элементов меню (кнопок). Элементы меню должны быть уже созданы с помощью функций hiCreateMenuItem и hiCreateSliderMenuItem или hiCreateSeparatorMenuItem.

)

=>r_hiMenu

Для отображения меню (появления его на экране) используется функция hiDisplayMenu.

или ассоциировать его с каким-либо окном с помощью hiSetWindowMenu

В результате получится меню с реальными полями, а не текстовыми кнопками.

hiCreateMenuItem создает кнопки меню. Кнопки необходимо создать до создания меню.

hiCreateMenuItem(

?name s_itemHandle ; символ для обращения к этому элементу меню.

?itemText t_menuItemText; название элемента

[?itemIcon l_menuIcon]; список кнопок меню

[?disable g_disabled]; возможность сделать пункт меню неактивным. (t/nil).

)

=> r_hiMenuItem

Пример:

trMenuItemOne = hiCreateMenuItem(

?name 'trMenuItemOne

?itemText "One"

?callback "println( \"One\" )"

)

trMenuItemTwo = hiCreateMenuItem(

?name 'trMenuItemTwo

?itemText "Two"

?callback "println( \"Two\" )"

)

hiCreateSliderMenuItem – создает слайдер меню. Также перед созданием слайдер меню необходимо создать кнопки меню функцией hiCreateMenuItem.

hiCreateSliderMenuItem(

?name s_itemHandle ; символ для обращения к этому элементу меню.

?itemText t_menuItemText ; название элемента.

?subMenu r_pulldownMenu ; меню, создаваемое функцией hiCreatePulldownMenu; выводится, когда выбран этот элемент меню.

[?itemIcon l_menuIcon] ; список кнопок меню.

[?disable g_disabled]

) => r_hiSliderItem

hiCreate2DМenu – для создания своих полей, кнопок и т.д., располагая их по координатам.

Этот тип меню позволяет указывать точное место расположения каждого элемента меню, благодаря списку атрибутов с указанием создания каждого элемента.

hiCreate2DМenu (

s_menuHandie ; это символ используемый для обращения к этому меню.

t_menuTitle ; текст, который будет в заголовке меню.

l_menuItems ; список, элементов меню (кнопок). Каждый элемент списка включает в себя три составляющих:

кнопки меню должны быть созданы с помощью функций hiCreateButton или hiCreateLabel

точку, в которой должен быть расположен верхний левый угол этой кнопки

список, содержащий ширину и высоту кнопки

)

=>r_hiMenu

Для отображения меню (появления его на экране) используется функция hiDisplayMenu.

Функции для создания fixed menus:

Статическое меню типично занимает весь верх, низ или одну сторону экрана. Вертикальное фиксированное меню может также появляться внутри графического окна. Вы можете указать номер строки и столбца при создании.

hiCreateVerticalFixedMenu – для создания вертикальных фиксированных меню. Например меню списка топологических слоев.

hiCreateVerticalFixedMenu(

s_menuHandie ; это символ используемый для обращения к этому меню.

l_menuItems ; список,элементов меню (кнопок) которые должны быть созданы с помощью функции hiCreateMenuItem

x_rows ; количество строк в фиксированном меню.

x_cols ; количество столбцов в фиксированном меню.

)

=>r_hiMenu

Для отображения меню используется функция hiDisplayFixedMenu.

hiDisplayFixedMenu(

r_hiMenu ;меню, созданное с помощью функций hiCreateVerticalFixedMenu и ;СreateHorizontalFixedMenu

g_menuLocation ;месторасположение меню “top”, “bottom”, “right”, “left”

[x_width] ; ширина меню

[x_height] ; высота меню

)

=> t | nil

hiCreateHorizontalFixedMenu – для создания горизонтальных фиксированных меню.

При добавлении некоторых кнопок они располагаются строго сверху вниз или справа налево.

hiCreateHorizontalFixedMenu –полностью подобна функции hiCreateVerticalFixedMenu

и связана с теме же функциями для отображения строк.

Пример:

hiCreateHorizontalFixedMenu(

'trExampleHorizontalFixedMenu

list( trMenuItemOne trMenuItemTwo )

1

2

)

hiCreateVerticalFixedMenu(

'trExampleVerticalFixedMenu

list( trMenuItemOne trMenuItemTwo )

2

1

)

hiDisplayFixedMenu(trExampleHorizontalFixedMenu "top")

hiDisplayFixedMenu(trExampleVerticalFixedMenu "bottom")

Функции для создания pulldown menus:

hiCreateРulldownMenu- создает меню и строго указывает место где оно будет находится.

hiCreateРulldownMenu(

s_menuHandie ; это символ используемый для обращения к этому меню.

g_menuTitle ; текст, который будет в заголовке меню.

l_menuItems ; список, элементов меню (кнопок) которые должны быть созданы с помощью функции hiCreateMenuItem и hiCreateSliderMenuItem или hiCreateSeparatorMenuItem.

)

=>r_hiMenu

Для отображения выпадающего меню в окне необходимо использовать функцию hiInsertBannerMenu, также вы можете встроить выпадающее меню как подменю с помощью функции hiDisplayFixedMenu.

hiInsertBannerMenu(

w_windowId ; окно в котором мы хотим отобразить меню

g_menu ; меню которое мы хотим вставить

x_menuPosition ; местоположение меню

)

=> t | nil

Местоположение в заголовке, где будет размещено меню. Позиции меню пронумерованы от 0, начиная с крайнего левого меню. Данная функция не переписывает меню заголовка. Если в этой позиции меню уже существует, функция вставляет новое меню в указанную позицию и перемещает любой оставшийся файл вправо. Если x_menuPostion имеет больший номер чем меню, определенное пользователем, функция прибавляет новое меню в конце (справа) всех остальных меню, за исключением кнопки Help.

hiDeleteBannerMenu(

w_windowId ; окно, в которм хотим удалить меню

x_menuPosition ; местоположение меню

)

  • t | nil

Удаление меню из заголовка окна.

Пример:

menu=hiCreatePulldownMenu(

'trPulldownMenu

"Example Menu"

list( trMenuItemOne trMenuItemTwo )

)

hiInsertBannerMenu(window(1) menu 0)

полученное меню будет добавлено в CIW окно.

Следующий пример показывает создание слайдер меню:

;;; creating menu items for the slider menu

trA_MenuItem = hiCreateMenuItem(

?name 'trA_MenuItem

?itemText "A"

?callback "println('A)" ;;; prints A in the CIW

)

trB_MenuItem = hiCreateMenuItem(

?name 'trB_MenuItem

?itemText "B"

?callback "println('B)" ;;; prints B in the CIW

)

trC_MenuItem = hiCreateMenuItem(

?name 'trC_MenuItem

?itemText "C"

?callback "println('C)" ;;; prints C in the CIW

)

;;; building the slider menu

hiCreatePulldownMenu(

'trSubMenu

""

list( ; the list of menu items in the slider menu

trA_MenuItem

trB_MenuItem

trC_MenuItem

)

)

;;; creating the first menu item for the pulldown menu

trSliderMenuItem = hiCreateSliderMenuItem(

?name 'trSliderMenuItem

?itemText "Print"

?subMenu trSubMenu

)

;;; creating the second menu item for the pulldown menu

trMenuItemResize = hiCreateMenuItem(

?name 'trMenuItemResize

?itemText "Resize"

?callback "hiResizeWindow( window(1) list(0:0 500:500))"

)

;;; creating the Example Menu pulldown menu

hiCreatePulldownMenu(

'trPulldownMenu

"Example Menu"

list( trSliderMenuItem trMenuItemResize )

)

;;; inserting the pulldown menu in the CIW

hiInsertBannerMenu( window(1) trPulldownMenu 0 )

Формы и горячие клавиши.

Стандартные формы

Стандартные формы используются для получения информации от пользователя во время работы. Каждая стандартная форма создается с баннером, содержащим имя формы, и имеет пять кнопок выбора. Эти кнопки выполняют следующие функции.

OK - применить операции, описанные в этой форме и убрать форму с экрана.

Cancel - отменить операции, описанные в этой форме и убрать форму с экрана.

Defaults - установить все значения формы по умолчанию.

Apply - применить операции, описанные в этой форме и оставить форму на экране.

Help - выводит документ, содержащий дополнительную информацию.

Алгоритм создания форм.

Алгоритм создания форм – обратный. Сначала задаются поля, а затем сами формы:

  1. Создаются поля, необходимые для формы, функциями для создания полей.

  2. Создается сама форма, функцией hiCreateAppForm.

  3. Используется функция hiDisplayForms, для отображения формы на экране или форма помещается в какое-либо окно c помощью функции hiOpenWindow.

Функции для создания полей форм:

hiCreateStringField - создает строковые поля.

hiCreateIntField - создает поле ввода целых чисел.

hiCreateFloatField - создает поле ввода чисел c плавающей точкой.

hiCreateCyclicField - создает циклическое поле.

hiCreateToggleField - создает переключательное поле.

hiCreateScrollRegion - создает линия прокрутки.

Все формы, и одномерные, и двумерные, создаются функцией hiCreateAppForm(…).

hiCreateAppForm(

?name s_name ; название формы

?fields l_fieldEntries ; список дескрипторов созданных полей

[?attachmentList l_fieldattachments] ; список подключенных полей

[?formTitle s_formTitle] ; имя, появляющееся в баннере данной формы

[?callback g_callback] ; выполняемая процедура

[?initialSize g_initialSize] ; размер формы при первом появлении на экране

)

У двумерных форм существуют следующие параметры:

list(

r_fildDescription ; дескриптор формы.

x_pos : y_pos ; координаты в пикселях, от левого верхнего угла.

x_width : y_height ; ширина и длина в пикселях.

[x_promptBoxWidth] ; ширина диалогового окна в пикселях )

x_pos : y_pos, x_width : y_height - эти параметры относятся только к двухмерным формам, если любого из них нет, то форма одномерная.

Почти все функции создания полей имеют одинаковый синтаксис.

Например, функция hiCreateIntField

hiCreateIntField(

?name s_fieldname ;название поля, ссылка на данное поле formHandle->hiFieldSym->value

[?prompt t_fieldPrompt] ; текст перед полем, ссылка на это значение

;formHandle->hiFieldSym->value

[?value x_currentValue] ; первоначальное и текущее значение поля, доступ к значению ;formHandle->hiFieldSym->value

[?defValue x_ defaultValue] ; значение поля по умолчанию

[?font t_font] ; шрифт

[?modifyCallback t_modifyCallback] ; имя вызываемой процедуры (исп. Для строковых ;полей)

[?editable g_editable] ; возможность редактирования (значения nil и t)

[?enabled g_enabled] ; делает поле активным (nil и t, по умолчанию t).

Отдельно стоит синтаксис функции hiCreateCyclicField:

hiCreateCyclicField(

?name s_fieldname ;название поля

?choices l_enumerations ; список строк и/или символов, которые должны быть ;зациклены.

[?prompt t_fieldPrompt] ; текст перед полем

[?value x_currentValue] ; первоначальное и текущее значение поля

[?defValue x_ defaultValue] ; значение поля по умолчанию

[?font t_font] ; шрифт

[?modifyCallback t_modifyCallback] ; имя вызываемой процедуры

[?enabled g_enabled] ; делает окно активным.

В форме можно создавать дополнительные кнопки, с помощью следующей функции:

hiCreateButton(

?name s_fieldname ;название поля

?buttonText t_buttonText ; текст кнопки

?callback t_callback ; выполняемая процедура, при нажатии данной кнопки

[?font t_font] ; шрифт

[?enabled g_enabled] ; делает кнопку активной

)

Пример:

someInt = hiCreateIntField(

?name 'numScoops

?prompt "Number of scoops (0..5)"

?value 2

?defValue 1

?range '(0 5) )

myCyclic = hiCreateCyclicField(

?name 'flavor

?prompt "Flavor"

?value "chocolate"

?choices list("chocolate"

"strawberry" "vanilla"

"peppermint" "coffee"

"green_tea") )

hiCreateAppForm( ?name 'iceCreamForm1

?formTitle "Ice Cream"

?callback "buildIceCreamCone()"

?fields list( someInt myCyclic )

?help "cream" )

status = hiDisplayForm( iceCreamForm1 )

Получится форма, в которой будет два поля Number of scoops и Flavor. При нажатии OK будет выполняться процедура buildIceCreamCone() с выбранными значениями.

Для отображения форм используется функция hiDisplayForm

hiDisplayForm(

r_form ; форма, с которой ведется работа

)

=> t / nil

Окна.

Окно – это прямоугольная область на экране, которая позволяет видеть графические выходные данные. Окна на экране могут накладываться друг на друга, быть вложенными.

Все окна имеют:

Границу, ширина которой 0 или более пикселей

Произвольный фон

Лист свойств

можно выбрать цвет границы и заголовка окна.

Каждое приложение может создавать свое собственное окно. Когда окно отображается на экране, для него генерируется уникальный номер окна, который отображается в правом углу заголовка. Строка меню окна находящаяся слева в заголовке может содержать определенные пользователем меню. Каждое окно содержит кнопку Help, которая находится слева от номера окна.

Для работы с окнами существует большое количество функций.

Горячие” клавиши (bind keys)

Для удобства работы SKILL позволяет создавать комбинации горячих клавиш. Отобразить имеющиеся комбинации горячих клавиш позволяет функция

hiShowBindKeys(

[g_appTypeOrWindow] ; идентификатор приложений

)

=> t / nil

Примеры идентификаторов:

Command Interpreter (CIW окно),

Schematic (окно schematic )

Layout (окно layout )

Show File

Идентификатор можно не указывать, тогда на экране появиться форма, в которой можно выбрать приложение. После выбора отобразится список горячих клавиш.

Для задания горячих клавиш:

hiSetBindKey(

[t_application_type] ; Эта строка может быть идентификатором (см. выше).

[t_key ] ; строка, определяющая последовательность клавиш.

[t_skill_cmd] ;выполняемая SKILL функция.

)

=> t / nil

Если одновременно задавать несколько горячих клавиш, то необходимо использовать функцию hiSetBindKeys().

Могут быть применимы модификаторы:

Ctrl

Shift

Alt

Пример:

Shift<key>3” Shift 3

Alt<key>B” Alt B

Alt<key>F2” Alt F2

Пример:

hiSetBindKey(

Schematic”

Shift<key>Z”

hiZoomIn(hiGetCurrentWindow())”

)

При нажатии ShiftZ будет увеличиваться окно Schematic.

При создании горячих клавиш необходимо соблюдать некоторые ограничения. Например, нельзя использовать комбинацию Control-C. Все ограничения можно найти в документации.

10

Соседние файлы в папке Лбы skill