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

Описания RDS

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

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

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

§3.7.11. Прочие реакции

§3.7.11.5. Всплывающая подсказка

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

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

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

#### §3.7.11. Прочие реакции

##### §3.7.11.5. Всплывающая подсказка

Это событие возникает у блока, в параметрах которого разрешен вывод всплывающей подсказки, если курсор мыши задержался в пределах его изображения (время задержки определяется Windows). В реакции на него модель формирует и передает RDS текст подсказки, которую нужно показать пользователю. Примеры моделей, выводящих всплывающие подсказки к блокам, приведены в §3.6.9.

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

      // Popup hint text and parameters setup
      void rdsbcppBlockClass::rdsbcppPopupHint(RDS_PPOPUPHINTDATA HintData,int &Show)
      {
         … пользовательский текст реакции …
      }

Параметр функции MessageData – это указатель на структуру типа RDS_POPUPHINTDATA, содержащую текущие параметры изображения блока, через которую модель возвращает параметры показа подсказки, если это необходимо:

      typedef struct {
        int x,y;              // Координаты курсора мыши
        int BlockX,BlockY;    // Координаты точки привязки блока
        int Left,Top;         // Верхний левый угол изображения блока
        int Width,Height;     // Размеры изображения блока
        int HZLeft,HZTop,     // Возвращаемый размер зоны
            HZWidth,HZHeight; // действия подсказки
        int ReshowTimeout;    // Возвращаемый интервал повторного вывода
        int HideTimeout;      // Возвращаемый интервал гашения
        int IntZoom;          // Масштаб окна в %
        double DoubleZoom;    // Масштабный к-т окна (в долях единицы)
      } RDS_POPUPHINTDATA;
      typedef RDS_POPUPHINTDATA *RDS_PPOPUPHINTDATA;

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

x, y(int)
  Координаты курсора мыши на рабочем поле окна подсистемы на момент вывода подсказки (уже с учетом масштаба подсистемы).
BlockX, BlockY(int)
  Координаты точки привязки блока на рабочем поле с учетом масштаба и возможной связи положения этого блока с переменными. Для блоков с векторной картинкой точка привязки – это положение начала координат этой картинки, для всех остальных – левый верхний угол прямоугольной области.
Left, Top, Width, Height(int)
  Координаты левого верхнего угла (Left, Top) прямоугольной области, занимаемой блоком, ее ширина (Width) и высота (Height) в текущем масштабе с учетом возможной связи положения блока с его переменными. Соответствуют одноименным полям структуры RDS_PDRAWDATA.
HZLeft, HZTop, HZWidth, HZHeight(int)
  Возвращаемая моделью зона действия подсказки: горизонтальная (HZLeft) и вертикальная (HZTop) координаты верхнего левого угла зоны, ее ширина (HZWidth) и высота (HZHeight). При выходе курсора мыши за пределы этой прямоугольной зоны будет запрошен повторный вывод подсказки. По умолчанию в этих полях записаны координаты и размер всей прямоугольной области блока, то есть они совпадают с полями Left, Top, Width и Height соответственно, поэтому подсказка для любой точки его изображения будет одной и той же. Модель может записать в эти поля другие значения, чтобы при выходе курсора из указанной зоны можно было вывести другую подсказку.
ReshowTimeout(int)
  Возвращаемое моделью время в миллисекундах после гашения подсказки, по истечении которого подсказку необходимо вывести снова. По умолчанию в этом поле записан ноль – подсказка не будет выведена повторно до тех пор, пока курсор мыши не покинет зону ее действия.
HideTimeout(int)
  Возвращаемое моделью время в миллисекундах после вывода подсказки, по истечении которого ее необходимо убрать с экрана. По умолчанию в этом поле записано стандартное для Windows значение.
IntZoom(int)
  Текущий масштаб окна родительской подсистемы блока в процентах (используется крайне редко).
DoubleZoom(double)
  Текущий масштаб окна родительской подсистемы блока в долях единицы: 1 – 100%, 0.5 – 50%, 2 – 200% и т.п. Соответствует одноименному полю структуры RDS_PDRAWDATA.

Для возврата в RDS сформированного текста всплывающей подсказки используется специальная функция rdsSetHintText.

Второй параметр функции реакции – это ссылка на целую переменную Show, через которую модель блока может запретить вывод подсказки: если записать в эту переменную константу RDS_BFR_NOTPROCESSED вместо исходно содержащейся в ней RDS_BFR_DONE, подсказка выведена не будет. Если в реакции на событие не будет вызвана функция rdsSetHintText, то есть текст подсказки не будет передан в RDS, подсказка тоже не появится на экране.

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