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

Описания RDS

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

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

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

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

§3.7.9.3. Блок перемещен

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

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

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

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

##### §3.7.9.3. Блок перемещен

Это событие возникает после любого изменения положения блока на рабочем поле подсистемы, то есть после его перетаскивания пользователем, после задания его координат в окне параметров блока, после вызова одной из сервисных функций для перемещения блока (например, функции rdsMoveBlock) и т.п. Реакция на него может использоваться для синхронного перемещения группы блоков при перемещении одного из них или для сообщения куда-либо новых координат блока. Отменить перемещение блока, реагируя на это событие, нельзя.

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

      // Block has been moved
      void rdsbcppBlockClass::rdsbcppBlockMoved(RDS_PMOVEDATA MoveData)
      {
         … пользовательский текст реакции …
      }

Параметр функции MoveData – это указатель на структуру описания события RDS_MOVEDATA:

      typedef struct {
        int MoveReason;  // Причина перемещения
        int OldX,OldY;   // Старые координаты точки привязки
        int NewX,NewY;   // Новые координаты точки привязки
      } RDS_MOVEDATA;
      typedef RDS_MOVEDATA *RDS_PMOVEDATA;

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

MoveReason(int)
  Одна из стандартных констант, указывающих на причину перемещения, то есть изменения координат, блока:

  RDS_MR_SET | Координаты блока установлены непосредственно, то есть введены пользователем с клавиатуры в окне параметров или установлены одной из сервисных функций.
  RDS_MR_DRAG | Пользователь «перетащил» блок мышью.
  RDS_MR_KEYBOARD | Пользователь переместил выделенный блок нажатиями курсорных клавиш.
  RDS_MR_UNDOREDO | Положение блока изменилось из-за отмены пользователем сделанного перемещения или из-за повтора ранее отмененного перемещения.

OldX, OldY(int)
  Горизонтальная и вертикальная координаты точки привязки блока до перемещения, значения даны для масштаба подсистемы 100% (для блоков с векторной картинкой точка привязки – это положение начала координат этой картинки, для всех остальных – левый верхний угол прямоугольной области, занимаемой блоком).
NewX, NewY(int)
  Координаты точки привязки блока после перемещения в масштабе 100%.

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