<<<Назад <<<

Активный текст - часть IV (COMBO)

Создадим в директории с миссией файл Description.ext. И откроем его в блокноте.

Примечание:
Рекомендую прочесть все предыдущие статьи, т.к. коментарии из них я не переносил сюда, что бы не загромождать место.

// Определяем используемые шрифты
#define FontM "TahomaB36"
#define FontHTML "CourierNewB64"

// Стили форматирования текста
#define ST_LEFT 0
#define ST_RIGHT 1
#define ST_CENTER 2
#define ST_FRAME 64

// Элементы управления
#define CT_STATIC 0
#define CT_BUTTON 1
#define CT_EDIT 2
#define CT_COMBO 4
#define CT_ACTIVETEXT 11

// Создаем шаблоны для ВСЕХ элементов управления
// Статический текст
class RscText
{
  type = CT_STATIC;
  idc = -1;
  style = ST_LEFT;
  colorBackground[] = {0, 0, 0, 0};
  colorText[] = {1, 1, 1, 1};
  font = FontM;
  sizeEx = 0.04;
};

// Ссылка
class RscActiveText
{
  type = CT_ACTIVETEXT;
  idc = -1;
  style = ST_LEFT;
  color[] = {1, 1, 1, 1};
  colorActive[] = {1, 0, 0, 1};
  font = FontM;
  sizeEx = 0.04;
  soundEnter[] = {"ui\ui_over", 0.2, 1};
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};

// Кнопка
class RscButton
{
  type = CT_BUTTON;
  idc = -1;
  style = ST_CENTER;
  colorText[] = {0, 0, 0, 1};
  font = FontHTML;
  sizeEx = 0.025;
  soundPush[] = {, 0.2, 1};
  soundClick[] = {"ui\ui_ok", 0.2, 1};
  soundEscape[] = {"ui\ui_cc", 0.2, 1};
  default = false;
};

// Поле для ввода текста.
class RscEdit
{
  type = CT_EDIT;
  idc = -1;
  style = ST_LEFT;
  font = FontHTML;
  sizeEx = 0.02;
  colorText[] = {0, 0, 0, 1};
  colorSelection[] = {0.5, 0.5, 0.5, 1};
  autocomplete = false;
  text = ;
};

// А это компонент ComboBox.
class RscCombo
{
  type = CT_COMBO;
  idc = -1;
  style = ST_LEFT;
  colorSelect[] = {0.4, 0.4, 0.4, 1};
  colorText[] = {0.2, 0.2, 0.2, 1};
  colorSelectBackground[] = {0.2, 0.2, 0.2, 1};
  colorBackground[] = {0.4, 0.4, 0.4, 1};
  font = FontHTML;
  sizeEx = 0.025;
  rowHeight = 0.04;
  wholeHeight = 0.3;
};

// Управляющий класс, имя любое
class DlgDialog
{
  idd = -1;
  movingEnable = true;

  // Определяем классы, отвечающие за прорисовку окна диалога
  controlsBackground[] =
  {
    MY_BACKGROUND,
    MY_FRAME
  };

  class MY_BACKGROUND: RscText
  {
    colorBackground[] = {0.4, 0.4, 0.4, 0.75};
    text = ;
    x = 0.2;
    y = 0.1;
    w = 0.6;
    h = 0.7;
  };

  class MY_FRAME: RscText
  {
    idc = 103;
    style = ST_FRAME;
    colorText[] = {0, 0, 0, 1};
    text = "Это НАШЕ диалоговое окно";
    font = FontHTML;
    sizeEx = 0.025;
    x = 0.22;
    y = 0.12;
    w = 0.56;
    h = 0.66;
  };

  objects[] = { };

  // Список "рабочих" классов
  controls[] =
  {
    HELLO_WORLD,
    CLICK_ME,
    MY_BUTTON,
    MY_COMBO
  };

  // "Статический текст" - привет всем
  class HELLO_WORLD: RscText
  {
    idc = 100;
    style = ST_CENTER;
    x = 0.4;
    y = 0.45;
    w = 0.2;
    h = 0.1;
    text = "Всем привет!";
  };

  class CLICK_ME:RscActiveText
  {
    idc = 101;
    style = ST_CENTER;
    x = 0.4;
    y = 0.65;
    w = 0.2;
    h = 0.05;
    text = "Кликни!";
    action = "ctrlSetText [100, lbData[104, lbCurSel 104]]";
    // 100 - это идентификатор "Статического текста"
    // lbData[104, lbCurSel 104] - Функция получает выделенную строку компанента COMBO.
    // ctrlSetText - а эта функция устанавливает текст "Статического текста" в тот, который
    // мы выбрали.
    default = true;
  };

  class MY_BUTTON:RscButton
  {
    idc = 102;
    x = 0.4;
    y = 0.25;
    w = 0.2;
    h = 0.04;
    text = "Закрыть окно.";
    action = "closeDialog 0";
  };

  // Как видете у Combo очень мало параметров.
  class MY_COMBO:RscCombo
  {
    // Задаем идентификатор = 104, теперь с помощью его можно обратится к Combo
    idc = 104;
    x = 0.4;
    y = 0.3;
    w = 0.2;
    h = 0.04;
  };
};

Вот и конец файла Description.ext

Что бы использовать наш компонент сделаем следующее:
Создадим файл dialog.sqs и напишем в нем вот что:

; Пытаемся вызвать класс DlgDialog
_ok = createDialog "DlgDialog"
: Если нет такого, то выходим.
?(!_ok): hint "Ошибка!"; exit

: Ну а если есть, то заполняем компонент Combo данными
; 104 - это идентификатор Combo, а "WEST" - надпись.
_index = lbAdd [104, "WEST"]
; Сопоставляем с этой строкой какие то данные, например другую строку. "Solder"
lbSetData [104, _index, "Solder WEST"]

_index = lbAdd [104, "EAST"]
lbSetData [104, _index, "Solder EAST"]

_index = lbAdd [104, "Resistance"]
lbSetData [104, _index, "Solder RES"]

; По умолчанию выделяем первую строку
lbSetCurSel [104, 0]

теперь скрипт можно вызвать командой: this exec "dialog.sqs"
<<<Назад <<<