Навигация:
<< >> Оглавление Указатель

Описание пользователя

Глава 3. Использование стандартных модулей автокомпиляции

§3.7. Краткий перечень вводимых в модель описаний и реакций на события

§3.7.9. Внешний вид блока

Рассматриваются реакции на события, связанные с изменением размеров и положения блока, а также с программным рисованием его изображения в подсистеме.

§3.7.9.1. Размер блока изменен

Это событие возникает в блоке, который программно рисует свое изображение, а также у блоков, изображаемых прямоугольником с текстом, после того, как пользователь тем или иным способом изменил размер блока. В реакции на него можно определить и запомнить размеры каких-либо внутренних элементов изображения блока, вычисляемые относительно его текущего размера, или скорректировать изменения размера, сделанные пользователем, если они не подходят для блока. Например, можно не разрешать пользователю сделать квадратный блок прямоугольным, принудительно устанавливая одинаковую ширину и высоту. От способа изменения размера возникновение события не зависит: оно возникает и после перетаскивания маркеров выделения блока, и после ввода точных значений размера с клавиатуры при нажатии кнопки «размер для функции DLL» в окне параметров блока.

Текст реакции на это событие вводится на вкладке «события» левой панели редактора модели: раздел «внешний вид блока», подраздел «размер блока изменен». В классе блока для нее создается функция с именем rdsbcppBlockResized следующего вида:

  // Block size has changed
  void rdsbcppBlockClass::rdsbcppBlockResized(
                             ResizeData,int &Result)
  {
     … пользовательский текст реакции … 
  }

У функции два параметра. Параметр ResizeData – это указатель на структуру описания события RDS_RESIZEDATA:

  typedef struct {
     HorzResize;         // Изменение горизонтального размера
     VertResize;         // Изменение вертикального размера
    int newWidth,newHeight;  // Новые значения ширины и высоты
    int GridDx,GridDy;       // Шаги сетки редактора
     SnapToGrid;         // Привязка к сетке
  } ;
  typedef  *;}

Поля структуры имеют следующий смысл:

HorzResizeVertResize (BOOL)
Логические значения, указывающие на то, каким именно образом пользователь изменил размеры блока:
HorzResize VertResize Действия пользователя
FALSE FALSE Новые размеры блока заданы числами в окне параметров.
FALSE TRUE Пользователь перетащил верхнюю или нижнюю метку масштабирования вверх или вниз (изменена только высота).
TRUE FALSE Пользователь перетащил левую или правую метку масштабирования влево или вправо (изменена только ширина).
TRUE TRUE Пользователь перетащил одну из угловых меток масштабирования (изменены и ширина, и высота).
newWidthnewHeight (int)
Новые значения ширины и высоты блока соответственно для масштаба 100%. Модель может вмешаться в изменение размеров, заменив значения в этих полях. Например, можно записать вместо newHeight старое значение высоты блока, тогда изменение высоты, сделанное пользователем, будет проигнорировано. Внутри этой реакции прежние значения ширины и высоты блока можно получить при помощи сервисной функции rdsGetBlockDimensionsEx.
GridDxGridDy (int)
Горизонтальный и вертикальный шаги сетки окна родительской подсистемы блока соответственно.
SnapToGrid (BOOL)
TRUE, если в окне родительской подсистемы блока включена привязка к сетке, и FALSE в противном случае.

Второй параметр функции реакции – это ссылка на целую переменную Result. Через этот параметр модель может сообщить RDS, следует ли принимать сделанное пользователем изменение размера. Для этого параметру Result нужно присвоить одну из двух стандартных констант:

При написании моделей блоков без использования модуля автокомпиляции событию изменения размера блока соответствует константа RDS RDS_BFM_RESIZE.


<< >> Оглавление Указатель