Приложения
Приложение А. Функции, константы и структуры RDS
А.4. Структуры RDS
А.4.2. RDS_BLOCKDESCRIPTION – описание блока
Структура RDS_BLOCKDESCRIPTION используется для получения описания общих параметров блока. Для описания размеров и положения блока используется другая структура – RDS_BLOCKDIMENSIONS. Чаще всего для заполнения структуры RDS_BLOCKDESCRIPTION вызывается функция rdsGetBlockDescription, но и многие другие сервисные функции, возвращающие идентификаторы блоков, позволяют одновременно заполнить и структуру описания возвращаемого блока.
typedef struct { DWORD servSize; // Размер этой структуры в байтах RDS_BHANDLE Block; // Идентификатор блока RDSINT32 BlockType; // Тип блока // Имя блока RDSCSTR BlockNameA; // UTF8 RDSWCSTR BlockNameW; // UTF16 //RDSXCSTR BlockName; // поле-псевдоним RDS_BHANDLE Parent; // Идентификатор родительской подсистемы // Имя родительской подсистемы RDSCSTR ParentNameA; // UTF8 RDSWCSTR ParentNameW; // UTF16 //RDSXCSTR ParentName; // поле-псевдоним // Комментарий блока RDSCSTR BlockCommentA; // UTF8 RDSWCSTR BlockCommentW; // UTF16 //RDSXCSTR BlockComment; // поле-псевдоним RDSINT32 LayerId; // Идентификатор слоя // Имя файла DLL или NULL RDSCSTR DllFileA; // UTF8 RDSWCSTR DllFileW; // UTF16 //RDSXCSTR DllFile; // поле-псевдоним //Имя функции DLL или NULL RDSCSTR DllFuncA; // UTF8 RDSWCSTR DllFuncW; // UTF16 //RDSXCSTR DllFunc; // поле-псевдоним HINSTANCE Module; // Загруженный модуль DLL или NULL // Имя переменной подсистемы, которая соответствует // этому блоку-входу или выходу RDSCSTR ParentVarA; // UTF8 RDSWCSTR ParentVarW; // UTF16 //RDSXCSTR ParentVar; // поле-псевдоним BOOL Selected; // Блок выделен в редакторе RDSINT32 NumberOfVars; // Число переменных блока DWORD Flags; // Флаги описания (RDS_BDF_*) DWORD ExtId; // Внешний уникальный идентификатор RDSINT32 NamePos; // Положение имени блока (RDS_BDNP_*) RDSINT32 NameDx, // Смещение левого верхнего угла имени от RDSINT32 NameDy; // точки привязки блока (в масштабе 100%) RDSINT32 AltNameAlignment; // Выравнивание текста, выводимого // вместо имени (если он есть) } RDS_BLOCKDESCRIPTION; typedef RDS_BLOCKDESCRIPTION *RDS_PBLOCKDESCRIPTION;
Поля структуры
- servSize (DWORD)
- Размер этой структуры в байтах. Перед вызовом любой сервисной функции, работающей с этой структурой, полю servSize необходимо присвоить значение sizeof(RDS_BLOCKDESCRIPTION).
- Block (RDS_BHANDLE)
- Уникальный идентификатор блока.
- BlockType (RDSINT32)
- Тип блока – одна из констант
RDS_BT* или RDS_TUNKNOWN:
RDS_TUNKNOWN Неизвестно (при вызове функции, заполняющей эту структуру, возникла ошибка). RDS_BTSYSTEM Подсистема (включая корневую). RDS_BTSIMPLEBLOCK Простой блок. RDS_BTINPUTBLOCK Внешний вход. RDS_BTOUTPUTBLOCK Внешний выход. RDS_BTBUSPORT Ввод шины. RDS_BTDLLBLOCK Простой блок (синоним RDS_BTSIMPLEBLOCK). - BlockNameA (RDSCSTR), BlockNameW (RDSWCSTR), BlockName (RDSXCSTR)
- Указатель на строку с именем блока в его родительской подсистеме. Строка находится во внутренней памяти RDS, ее нельзя изменять. Для переименования блоков используется сервисная функция rdsRenameBlock.
- Parent (RDS_BHANDLE)
- Идентификатор подсистемы, родительской по отношению к данному блоку, то есть подсистемы, непосредственно внутри которой находится данный блок. У корневой подсистемы, которая не имеет родительской, в этом поле находится значение NULL.
- ParentNameA (RDSCSTR), ParentNameW (RDSWCSTR), ParentName (RDSXCSTR)
- Указатель на строку с именем родительской подсистемы. Строка находится во внутренней памяти RDS, ее нельзя изменять. У корневой подсистемы, которая не имеет родительской, это поле указывает на пустую строку.
- BlockCommentA (RDSCSTR), BlockCommentW (RDSWCSTR), BlockComment (RDSXCSTR)
- Указатель на строку с комментарием блока. Строка находится во внутренней памяти RDS, ее нельзя изменять. Комментарий блока можно изменить функцией rdsSetBlockComment.
- LayerId (RDSINT32)
- Идентификатор слоя подсистемы, на котором находится данный блок. Для корневой подсистемы, которая не находится в какой-либо другой подсистеме, значение не определено. Для перемещения блока на другой слой можно использовать функцию rdsSetBlockLayer.
- DllFileA (RDSCSTR), DllFileW (RDSWCSTR), DllFile (RDSXCSTR)
- Указатель на строку с именем файла DLL, в котором находится модель блока, или NULL, если у блока нет модели. Строка находится во внутренней памяти RDS, ее нельзя изменять. Для подключения к блоку другой модели следует использовать функцию rdsSetBlockModel.
- DllFuncA (RDSCSTR), DllFuncW (RDSWCSTR), DllFunc (RDSXCSTR)
- Указатель на строку с именем экспортированной из DLL функции модели блока, или NULL, если у блока нет модели. Строка находится во внутренней памяти RDS, ее нельзя изменять. Для подключения к блоку другой модели следует использовать функцию rdsSetBlockModel.
- Module (HINSTANCE)
- Дескриптор загруженного модуля DLL с моделью блока или NULL, если у блока нет модели.
- ParentVarA (RDSCSTR), ParentVarW (RDSWCSTR), ParentVar (RDSXCSTR)
- Для внешних входов и выходов – указатель на строку с именем статической переменной родительской подсистемы, которая соответствует данному блоку. Для всех остальных типов блоков – NULL. Эта строка находится во внутренней памяти RDS, ее нельзя изменять.
- Selected (BOOL)
- TRUE, если данный блок выделен в подсистеме (только в режиме редактирования). FALSE, если блок не выделен, или если RDS находится в режимах моделирования или расчета (выделение блоков при переходе в эти режимы сбрасывается), или если окно подсистемы с этим блоком закрыто. Для программного выделения блока или для снятия выделения можно использовать функцию rdsSelectBlock.
- NumberOfVars (RDSINT32)
- Число статических переменных блока.
- Flags (DWORD)
- Один или несколько объединенных битовым ИЛИ
флагов описания параметров блока
(большая их часть задается различными флагами в
окне параметров блока):
RDS_BDF_ALLOWRESIZE Пользователю разрешено изменение размеров блока путем перетаскивания мышью одного из восьми маркеров выделения. RDS_BDF_FREEMOUSEMOVE Функция модели блока вызывается при перемещении курсора мыши над изображением блока (событие RDS_BFM_MOUSEMOVE) даже тогда, когда ни одна из кнопок не нажата (только при установленном флаге RDS_BDF_MOUSEEVENTS). RDS_BDF_HASPICTURE У блока есть векторная картинка. Наличие этого флага никак не связано со способом изображения внешнего вида блока – для блока может быть задана векторная картинка, но изображаться он при этом может программно. Способ изображения внешнего вида блока определятся флагами RDS_BDF_SELFDRAW и RDS_BDF_TEXTRECT. RDS_BDF_KBDEVENTS Функции блока разрешена реакция на клавиатуру (события RDS_BFM_KEYDOWN и RDS_BFM_KEYUP). RDS_BDF_LOCKHEIGHT При изменении размеров блока пользователем запрещено изменение его высоты (только при установленном флаге RDS_BDF_ALLOWRESIZE). RDS_BDF_LOCKWIDTH При изменении размеров блока пользователем запрещено изменение его ширины (только при установленном флаге RDS_BDF_ALLOWRESIZE). RDS_BDF_MOUSEEVENTS Функция блока вызывается при нажатии и отпускании кнопок мыши и перемещении курсора с нажатыми кнопками, если курсор находится над изображением блока (события RDS_BFM_MOUSEDOWN, RDS_BFM_MOUSEUP, RDS_BFM_MOUSEDBLCLICK, RDS_BFM_MOUSEMOVE). RDS_BDF_NAMEOFF Изображение имени блока в окне подсистемы отключено. Если изображение имен блоков отключено для всей подсистемы, они не будут изображаться независимо от состояния этого флага. RDS_BDF_POPUPHINT Функция блока вызывается для вывода всплывающей подсказки (событие RDS_BFM_POPUPHINT). RDS_BDF_RUNEVERYCYCLE Функция модели блока (событие RDS_BFM_MODEL) вызывается в каждом такте расчета независимо от состояния сигнала запуска (первого сигнального входа) этого блока. RDS_BDF_SELFDRAW Изображение блока рисуется его функцией модели при реакции на событие RDS_BFM_DRAW. Этот флаг не может быть установлен одновременно с флагом RDS_BDF_TEXTRECT. RDS_BDF_SETUPBYDCLICK Двойной щелчок на изображении блока вызывает функцию его настройки (событие RDS_BFM_SETUP). Если этот флаг сброшен, двойной щелчок будет обрабатываться RDS и приводить к открытию либо окна параметров блока, либо редактора модели (для блоков с автокомпилируемой моделью). RDS_BDF_SETUPFUNC У блока есть функция настройки (его функция может реагировать на событие RDS_BFM_SETUP). RDS_BDF_SHOWMAINPOINT Для блока с векторной картинкой в окне подсистемы изображается точка привязки (начало координат этой картинки). Если изображение точек привязки отключено для всей подсистемы, они не будут изображаться независимо от состояния этого флага. RDS_BDF_TEXTRECT Блок изображается прямоугольником с текстом. Этот флаг не может быть установлен одновременно с флагом RDS_BDF_SELFDRAW. - ExtId (DWORD)
- Уникальный в пределах схемы целый идентификатор данного блока, не изменяющийся при сохранении и последующей загрузке этой схемы.
- NamePos (RDSINT32)
- Положение имени блока, если оно отображается в окне подсистемы (одна из констант
RDS_BDNP_*):
RDS_BDNP_BELOW Имя изображается под блоком по центру. RDS_BDNP_ABOVE Имя изображается над блоком по центру. RDS_BDNP_CUSTOM Нестандартное положение имени – оно было перетащено пользователем вручную. - NameDx, NameDy (RDSINT32)
- Горизонтальное (NameDx) и вертикальное (NameDy) смещения левого верхнего угла отображаемого имени блока относительно точки привязки изображения этого блока в масштабе 100%. Точкой привязки изображения блока считается начало координат его векторной картинки, если он изображается картинкой, или левый верхний угол занимаемой им прямоугольной области во всех остальных случаях. Горизонтальная ось координат направлена вправо, вертикальная – вниз, начало координат – левый верхний угол рабочего поля.
- AltNameAlignment (RDSINT32)
- Выравнивание текста, выводимого вместо имени блока,
если он был задан вызовом функции rdsSetBlockAltNameText:
RDS_ALTBLKNAME_LEFT (−1) Выравнивание по левому краю. RDS_ALTBLKNAME_CENTER (0) Выравнивание по центру. RDS_ALTBLKNAME_RIGHT (1) Выравнивание по правому краю.
Примеры
Примеры использования этой структуры приведен в §2.6.3, §2.12.1 руководства программиста и др.
См. также
rdsGetBlockDescription, rdsRenameBlock, rdsSetBlockComment, rdsSetBlockLayer, rdsSetBlockModel, rdsSelectBlock, rdsSetBlockAltNameText, события блоков.