OPERATION FLASHPOINT Русская шабашка |
|
Shadow Dragon: АКТИВНЫЙ ТЕКСТ Сегодня мы научимся работать еще с одним элементом управления. Это "Выпадающий список" или, по научному, Combo и ListBox Приступим. Создадим в директории с миссией файл 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" |