Описание пользователя
Глава 1. Необходимые сведения об устройстве RDS
§1.7. Интерактивные блоки
Кратко описываются основные способы взаимодействия блоков схемы с пользователем.
Некоторые блоки RDS специально предназначены для того, чтобы дать пользователю возможность вмешиваться в расчет. К ним относятся разного рода кнопки, рукоятки, поля ввода и т.п. С их помощью можно создавать интерактивные схемы: пользователь может нажимать кнопки и двигать рукоятки не только перед запуском расчета в режиме моделирования, но и в процессе самого расчета. Если расчет настроен так, чтобы системное время текло примерно с той же скоростью, что и реальное (см. настройки блока-планировщика), можно даже создавать простейшие симуляторы управления моделируемыми процессами.
Реакция блока на действия пользователя определяется моделью этого блока и, таким образом, может быть задана только программистом-разработчиком. Пользователь не может самостоятельно заставить какой-либо блок реагировать на свои действия, если программист не заложил в модель этого блока такую возможность. Однако, пользователь может, при желании, заблокировать некоторые реакции модели блока в окне его параметров. Потребность в этом практически никогда не возникает, однако, о такой возможности следует знать.
Поскольку в режиме редактирования большинство реакций блоков отключено, взаимодействие блоков с пользователем обычно происходит в режимах моделирования и расчета. Чаще всего используется реакция блока на мышь: блок может выполнять какие-либо действия при нажатии и отпускании кнопок и при перемещении курсора (например, так устроены блоки-рукоятки). Действия пользователя обычно немедленно отражаются на внешнем виде блока – кнопки нажимаются, рукоятки двигаются – поэтому изображения большинства интерактивных блоков рисуются программно их моделями. Стандартная библиотека RDS содержит множество таких блоков. Некоторые блоки, не предназначенные для ввода данных в схему, тоже могут реагировать на движения курсора мыши и нажатие ее кнопок: например, стандартные блоки построения графиков позволяют выделить мышью произвольную часть графика и увеличить ее.
Рис. 16. Щелчок в области
блока 1 достанется блоку 2,
если он на переднем плане
Следует помнить, что на мышь могут реагировать только блоки, находящиеся на активных слоях подсистемы. Если слой не активен, блок будет изображаться, но его реакции на нажатия кнопок мыши и перемещение курсора будут отключены. Также следует учитывать, что курсор мыши считается находящимся на изображении блока тогда, когда он попадает в пределы прямоугольной области, занимаемой блоком, причем если изображения блоков перекрываются, щелчок на области перекрытия достается блоку, самому близкому к переднему плану (рис. 16). Все стандартные интерактивные блоки имеют прямоугольную форму, поэтому с ними не возникает проблем. Если же пользователь самостоятельно создает интерактивный блок со сложным изображением (например, с автоматически компилируемой моделью), ему нужно быть готовым к тому, что его блок может перехватывать действия мышью на других блоках, попавших в его описывающий прямоугольник. Избежать этого можно располагая блок, реагирующий на мышь, на переднем плане.
Гораздо реже, чем реакция на мышь, в интерактивных блоках используется реакция на клавиатуру. Чаще всего на клавиши реагируют блоки, включающие и выключающие какие-либо режимы схемы – например, стандартному блоку-кнопке можно назначить клавишу, по которой эта кнопка будет нажиматься. На клавиатуру могут реагировать только блоки подсистемы, окно которой открыто и находится в RDS на переднем плане, причем эти блоки могут находиться на неактивных и даже невидимых слоях. Как и реакции на мышь, в режиме редактирования все реакции блоков на клавиатуру отключаются.
Реакция на клавиатуру определяется моделью блока, и пользователь не может изменить ее, если программист не предусмотрел этого в настройках (например, в настройках блока-кнопки можно задать клавишу, по которой кнопка будет нажиматься). Пользователь может, при желании, запретить реакцию любого блока на клавиатуру в окне параметров, но это – единственный способ, которым он может вмешаться в обработку клавиатуры блоком.
Следует различать реакцию на клавиатуру самого блока и различных элементов интерфейса Windows, порожденных этим блоком. Если, например, открыть окно параметров стандартного поля ввода, позволяющего вводить числа с клавиатуры, и разрешить изменение этих параметров, то можно будет увидеть, что реакция на клавиатуру для этого блока отключена. Дело в том, что самому полю ввода не нужно реагировать на клавиатуру – при щелчке мышью оно создает поверх себя обычное поле ввода Windows, в которое и вводится число. Поэтому единственная реакция на действия пользователя, необходимая полю ввода – это реакция на мышь (соответствующий флажок в окне параметров включен). Блок редактирования матриц, тоже позволяющий вводить числа с клавиатуры, также не нуждается в реакции на клавиатуру – по двойному щелчку он открывает отдельное окно, с которым и работает пользователь.
Некоторые блоки добавляют дополнительные пункты в контекстное меню подсистемы и главное меню RDS. В отличие от реакций на мышь и клавиатуру, эти пункты могут быть доступны пользователю и в режиме редактирования. Такие добавленные пункты меню чаще всего используются блоками для вызова дополнительных функций редактирования, переключения режимов и т.п.
Если блок привязывает к добавленному в главное меню пункту какое-либо сочетание клавиш, он будет реагировать на это сочетание даже тогда, когда окно его подсистемы закрыто. Так разработчики блоков обычно реализуют быстрый вызов каких-либо важных функций, касающихся всей загруженной схемы. Стандартные блоки RDS редко пользуются этой возможностью.
Технические подробности реакции блоков на действия пользователя подробно рассматриваются в §3.6.11 и §3.6.12 описания пользователя, а также в §2.12 руководства программиста.