- 2,696
- 1,468
Введение
DXUT диалоги — пользовательские диалоги, которые могут иметь по несколько компонентов, а также имеют свои свойства(цвет, видимость...). Не путайте со стандартными диалогами SAMP'а!
Все доступные опкоды по ним Вы можете найти в разделе WIKI: Список опкодов SAMPFUNCS'а.
Созданием опкодов для управления такими типами диалогов занимался @MogAika.
Создание диалога
Диалог создается опкодом opcodes:0b80.
После создания необходимо установить позицию и размер диалога, т.к. он не будет виден.
После создания, вернется указатель на структуру этого диалога, чтобы в будущем можно было ему менять различные параметры, а также добавлять компоненты, которые будут описаны ниже.
Код для создания диалога и установки ему позиции:
На этом пункте всё, мы создали диалог.
Изменение параметров диалога
К параметрам диалога относятся: цвет, видимость, тип(свернутый/развернутый), позиция, размер.
Т.к. в прошлом подпункте мы создали диалог и уже установили ему позицию и размер, то не буду описывать эти параметры, думаю по ним всё понятно.
Видимость
Фоновый цвет
Свернуть/развернуть
Видимость заголовка
Компоненты
Компоненты - основная часть DXUT диалогов. С помощью них можно делать интерфейсы для упрощения работы пользователям.
Операции с компонентами
Доступные компоненты
Обработка событий компонентов
Обработка событий служит для обозначения целей компонентам.
К примеру, нажав на кнопку, она скроется и выведет что нибудь в чат.
Для этого используется опкод opcodes:0b81.
Доступные события перечислены выше для каждого компонента.
Итак, я уже набросаю код в котором создаются все компоненты(думаю не составит труда его разобрать):
Целый код, осталось добавить несколько строк и "действия" компонентов будут осуществляться.
Делаю пример для каждого компонента в одном коде, кроме стат. текста, конечно.
Данный код выводит всю информацию о событиях, которые произошли с компонентами.
В конечном результате у нас получилось:
DXUT диалоги — пользовательские диалоги, которые могут иметь по несколько компонентов, а также имеют свои свойства(цвет, видимость...). Не путайте со стандартными диалогами SAMP'а!
Все доступные опкоды по ним Вы можете найти в разделе WIKI: Список опкодов SAMPFUNCS'а.
Созданием опкодов для управления такими типами диалогов занимался @MogAika.
Создание диалога
Диалог создается опкодом opcodes:0b80.
После создания необходимо установить позицию и размер диалога, т.к. он не будет виден.
После создания, вернется указатель на структуру этого диалога, чтобы в будущем можно было ему менять различные параметры, а также добавлять компоненты, которые будут описаны ниже.
Код для создания диалога и установки ему позиции:
CLEO:
{$CLEO}
0000:
repeat
wait 300
until 0AFA: is_samp_available // Ожидаем инициализацию структур сампа.
0B80: dialog 0@ = create "User's dialog" // Создаем диалог с названием User's dialog
0B84: dialog 0@ set_pos_XY 500 500 size 300 225 // Устанавливаем позицию и размер, чтобы диалог стал виден
while true
wait 0
end
Изменение параметров диалога
К параметрам диалога относятся: цвет, видимость, тип(свернутый/развернутый), позиция, размер.
Т.к. в прошлом подпункте мы создали диалог и уже установили ему позицию и размер, то не буду описывать эти параметры, думаю по ним всё понятно.
Видимость
Данный параметр указывает, виден ли диалог.
Данный параметр можно указать опкодом opcodes:0b86, а проверить видимость опкодом opcodes:0b87.
Данный параметр можно указать опкодом opcodes:0b86, а проверить видимость опкодом opcodes:0b87.
Фоновый цвет
Цвет устанавливается опкодом opcodes:0b93 в виде ARGB(Alpha Red Green Blue), в HEX.
Пример(используя прошлый код создания диалога):
Пример(используя прошлый код создания диалога):
CLEO:
0B93: dialog 0@ set_background_color 0xffff0000 // Установка непрозрачного красного цвета
Свернуть/развернуть
Диалог может быть свернут или развернут, обычно это свойство может применить нажав на заголовок диалога.
Для управления данным параметром используется опкод opcodes:0ba1, а проверка скрытия диалога - opcodes:0ba2.
Для управления данным параметром используется опкод opcodes:0ba1, а проверка скрытия диалога - opcodes:0ba2.
Видимость заголовка
Также диалогу можно установить видимость заголовка.
Данная возможность предоставляется опкодом opcodes:0b9f, а проверка его видимости - opcodes:0ba0.
Данная возможность предоставляется опкодом opcodes:0b9f, а проверка его видимости - opcodes:0ba0.
Компоненты
Компоненты - основная часть DXUT диалогов. С помощью них можно делать интерфейсы для упрощения работы пользователям.
Операции с компонентами
Получение текста компонента - opcodes:0b89
Изменение видимости компонента - opcodes:0b90
Изменение текста компонента - opcodes:0b94
Проверка видимости компонента - opcodes:0b95
Установка размера компонента - opcodes:0ba6
Получение размера компонента - opcodes:0ba7
Установка позиции компонента - opcodes:0ba8
Получение позиции компонента - opcodes:0ba9
Изменение видимости компонента - opcodes:0b90
Изменение текста компонента - opcodes:0b94
Проверка видимости компонента - opcodes:0b95
Установка размера компонента - opcodes:0ba6
Получение размера компонента - opcodes:0ba7
Установка позиции компонента - opcodes:0ba8
Получение позиции компонента - opcodes:0ba9
Доступные компоненты
Checkbox (переключатель) / opcodes:0b83
При нажатии на него, происходит действие: установлен, не установлен. При статусе "установлен" внутри квадрата образуется крестик/флажок:)
Доступные события: EVENT_CHECKBOX_CHANGEDID: 1025
Editbox (поле для ввода) / opcodes:0b88Доступные события: EVENT_CHECKBOX_CHANGEDID: 1025
Доступные события:
- EVENT_EDITBOX_STRINGID: 1537 - применен новый текст;
- EVENT_EDITBOX_CHANGEID: 1538 - изменение текста (в данный момент).
Static (статический текст) / opcodes:0b91- EVENT_EDITBOX_STRINGID: 1537 - применен новый текст;
- EVENT_EDITBOX_CHANGEID: 1538 - изменение текста (в данный момент).
Обычная строка, не имеет событий.
Slider (горизонтальный ползунок) / opcodes:0b96
Значение зависит от позиции ползунка.
Доступные события: EVENT_SLIDER_VALUE_CHANGEDID: 1281
Listbox (список элементов) / opcodes:0b99Доступные события: EVENT_SLIDER_VALUE_CHANGEDID: 1281
Список с заданными элементами.
Доступные события:
- EVENT_LISTBOX_ITEM_DBLCLKID: 1793 - двойной клик по элементу из списка;
- EVENT_LISTBOX_SELECTIONID: 1794 - выбор (клик левой кнопкой мыши) элемента из списка.
Доступные события:
- EVENT_LISTBOX_ITEM_DBLCLKID: 1793 - двойной клик по элементу из списка;
- EVENT_LISTBOX_SELECTIONID: 1794 - выбор (клик левой кнопкой мыши) элемента из списка.
Обработка событий компонентов
Обработка событий служит для обозначения целей компонентам.
К примеру, нажав на кнопку, она скроется и выведет что нибудь в чат.
Для этого используется опкод opcodes:0b81.
Доступные события перечислены выше для каждого компонента.
Итак, я уже набросаю код в котором создаются все компоненты(думаю не составит труда его разобрать):
CLEO:
{$CLEO}
{$INCLUDE SF}
0000:
repeat
wait 300
until 0AFA: is_samp_available
wait 0
0B80: dialog 0@ = create "User's dialog"
0B84: dialog 0@ set_pos_XY 500 500 size 300 225
0B82: dialog 0@ add_button id 1 text "Добавить" pos_XY 0 0 size 100 30
0B83: dialog 0@ add_checkbox id 2 text "Выбрать" pos_XY 0 35 size 150 20
0B88: dialog 0@ add_editbox id 3 text "Ввести" pos_XY 2 60 size 100 40
0B91: dialog 0@ add_static id 4 text "Информация" pos_XY 2 105 size 150 20
0B96: dialog 0@ add_slider id 5 pos_XY 2 130 size 100 35 max 100
0B99: dialog 0@ add_listbox id 6 pos_XY 120 5 size 175 175
while true
wait 0
if 0B81: dialog 0@ pop_event_to 1@ control_id_to 2@ // Обработчик событий
then
end
end
Делаю пример для каждого компонента в одном коде, кроме стат. текста, конечно.
CLEO:
{$CLEO}
{$INCLUDE SF}
// Константы ид событий
const
EVENT_BUTTON_CLICKED = 257
EVENT_COMBOBOX_SELECTION_CHANGED = 513
EVENT_RADIOBUTTON_CHANGED = 769
EVENT_CHECKBOX_CHANGED = 1025
EVENT_SLIDER_VALUE_CHANGED = 1281
EVENT_EDITBOX_STRING = 1537
EVENT_EDITBOX_CHANGE = 1538
EVENT_LISTBOX_ITEM_DBLCLK = 1793
EVENT_LISTBOX_SELECTION = 1794
end
0000:
repeat
wait 300
until 0AFA: is_samp_available
wait 0
0B80: dialog 0@ = create "User's dialog"
0B84: dialog 0@ set_pos_XY 500 500 size 300 225
0B82: dialog 0@ add_button id 1 text "Добавить" pos_XY 0 0 size 100 30
0B83: dialog 0@ add_checkbox id 2 text "Выбрать" pos_XY 0 35 size 150 20
0B88: dialog 0@ add_editbox id 3 text "Ввести" pos_XY 2 60 size 100 40
0B91: dialog 0@ add_static id 4 text "Информация" pos_XY 2 105 size 150 20
0B96: dialog 0@ add_slider id 5 pos_XY 2 130 size 100 35 max 100
0B99: dialog 0@ add_listbox id 6 pos_XY 120 5 size 175 175
while true
wait 0
if 0B81: dialog 0@ pop_event_to 1@ control_id_to 2@
then
// 0@ - указатель на структуру диалога ; 1@ - ид события ; 2@ - ид компонента
if 1@ == EVENT_BUTTON_CLICKED
then
if 2@ == 1
then
0AF8: samp add_message_to_chat "Была нажата кнопка. Компонент №%d" color -1 params 2@
0AC8: 3@ = allocate_memory_size 128
0C11: memset destination 3@ value 0x0 size 128
0B9B: dialog 0@ listbox 6 selected_element_to 0 elements_count_to 4@
4@++
0AD3: 3@ = format "Элемент №%d" 4@
0B9A: dialog 0@ listbox 6 insert_element 3@ with_data 4@ after -1
0AC9: free_allocated_memory 3@
end
end
if 1@ == EVENT_CHECKBOX_CHANGED
then
if 2@ == 2
then
0AF8: samp add_message_to_chat "Значение чекбокса было изменено. Компонент №%d" color -1 params 2@
if 0B92: dialog 0@ checkbox 2@ is_checked
then 0AF8: samp add_message_to_chat "Флажок в чекбоксе - виден" color -1
else 0AF8: samp add_message_to_chat "Флажок в чекбоксе - не виден" color -1
end
end
end
if 2@ == 3
then
if 1@ == EVENT_EDITBOX_STRING
then
0AF8: samp add_message_to_chat "Было вызвано событие нажатие кнопки Enter при активном едитбоксе. Компонент №%d" color -1 params 2@
end
if 1@ == EVENT_EDITBOX_CHANGE
then
0AF8: samp add_message_to_chat "В поле едитбокса что-то изменилось. Компонент №%d" color -1 params 2@
end
0AC8: 3@ = allocate_memory_size 128
0C11: memset destination 3@ value 0x0 size 128
0B89: dialog 0@ get_control 2@ text_to 3@
0AF8: samp add_message_to_chat "Содержимое поля едитбокса: %s" color -1 params 3@
0AC9: free_allocated_memory 3@
end
if 1@ == EVENT_SLIDER_VALUE_CHANGED
then
if 2@ == 5
then
0AF8: samp add_message_to_chat "Ползунок слайдера был передвинут. Компонент №%d" color -1 params 2@
0B97: dialog 0@ slider 2@ get_value_to 3@
0AF8: samp add_message_to_chat "Текущее положение слайдера(значение): %d" color -1 params 3@
end
end
if 2@ == 6
then
if 1@ == EVENT_LISTBOX_ITEM_DBLCLK
then
0AF8: samp add_message_to_chat "Вызвано событие двойного клика на элемент в листбоксе. Компонент №%d" color -1 params 2@
0B9B: dialog 0@ listbox 2@ selected_element_to 3@ elements_count_to 4@
0AF8: samp add_message_to_chat "Элемент: %d" color -1 params 3@
0B9C: dialog 0@ listbox 2@ delete_element 3@
end
if 1@ == EVENT_LISTBOX_SELECTION
then
0AF8: samp add_message_to_chat "Элемент в листбоксе был выделен. Компонент №%d" color -1 params 2@
0B9B: dialog 0@ listbox 2@ selected_element_to 3@ elements_count_to 0
0AF8: samp add_message_to_chat "Выделенный элемент: %d" color -1 params 3@
end
end
end
end
В конечном результате у нас получилось:
Вложения
Последнее редактирование: