Текущий раздел:

Описания RDS

Приложения

Приложение А. Функции, константы и структуры RDS

А.4. Структуры RDS

А.4.2. RDS_BLOCKDESCRIPTION – описание блока

# Приложения

## Приложение А. Функции, константы и структуры 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, события блоков.