Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Редактор диалогов. Вкладки.

Страниц (1): [1]
 

1. konctantin777 - 20 Июня, 2023 - 02:30:55 - перейти к сообщению
Здравствуйте.
Подскажите как правильно через редактор диалогов делать вкладки ? Т. е. можно кнопки как вкладки и, при нажатии, уничтожать диалог и открывать новый. Но каждый же будет как нулевой. Как тогда различать, например, чек 0 в 1м диалоге, во 2м, в третьем.... Проверять настройки тоже как ведь всегда будет flag_check(0)(0) во всех диалогах. Можно использовать разные диалоги 0,1,2, но их только три..
Как правильнее делать меню, чтобы были вкладки и читать, сохранять настройки.?
2. Zireael - 20 Июня, 2023 - 03:27:43 - перейти к сообщению
 Цитата:
Подскажите как правильно через редактор диалогов делать вкладки ?

Никак.
 Цитата:
Можно использовать разные диалоги 0,1,2, но их только три..

Можно создавать больше 3: Версия 5.87 Создание своих диалоговых окон с помощью WinApi

Вкладки можно создать, но в кибор это не удобно, нет структур, к тому же не все сообщения приходят.
3. konctantin777 - 20 Июня, 2023 - 03:31:29 - перейти к сообщению
Т.е. сейчас надо умещаться в 3 диалога и, например по кнопке, просто скрывать- показывать их ?
4. Zireael - 20 Июня, 2023 - 04:49:18 - перейти к сообщению
 Цитата:
Т.е. сейчас надо умещаться в 3 диалога

Необязательно. Можно создать ещё одно окно для настроек.
CODE:
#define WS_CAPTION 0x00C00000
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_SYSMENU 0x00080000
#define WS_EX_TOPMOST 0x00000008
#define WS_EX_TOOLWINDOW 0x00000080
#define WS_OVERLAPPEDWINDOW 0x00CF0000
#define IDC_ARROW 32512
external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");

int fon_color = rgb(255, 0, 255); // цвет фона окна
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = address("WindowProc"); // функция обработки сообщений от окна
PWNDCLASS[5] = LoadIcon(GetModuleHandle(0), 128); // иконка
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW); // курсор
PWNDCLASS[7] = CreateSolidBrush(fon_color); // цвет фона диалога
PWNDCLASS[9] = address(#Class[0]); // имя класса окна

if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать класс"); goto error;}



int Win, button4, edit4; // переменные для окна настроек

int button0[3];
createdialog(0);
createdialog(1);
createdialog(2);
showdialog(0, "Окно 1", 10, 10, 200, 200, 4, 0);

loop()sleep(10);

end:;
UnregisterClass(address(#Class[0]), 0);
error:;

function getmessage(0, WM_CREATE)
{
button0[0] = CreateWindow(0, "BUTTON", "Окно 2", WS_VISIBLE | WS_CHILD, 10, 10, 80, 20, gethwnd(0), 0, 0, 0);
button0[1] = CreateWindow(0, "BUTTON", "Окно 3", WS_VISIBLE | WS_CHILD, 10, 35, 80, 20, gethwnd(0), 0, 0, 0);
button0[2] = CreateWindow(0, "BUTTON", "Настройки", WS_VISIBLE | WS_CHILD, 10, 60, 100, 20, gethwnd(0), 0, 0, 0);
}

function getmessage(0, WM_COMMAND)
{
if (message.lparam==button0[0]) // если нажата кнопка
{
showdialog(1, "Окно 2", 10, 220, 300, 200, 0, 0);
return;
}

if (message.lparam==button0[1]) // если нажата кнопка
{
showdialog(2, "Окно 3", 10, 440, 300, 200, 0, 0);
return;
}

if (message.lparam==button0[2]) // если нажата кнопка
{
CreateWin();
return;
}
}

function getmessage(WM_COMMAND)
{
char TextEdit[999];
if (message.lparam==button4) // если нажата кнопка
{
GetWindowText(edit4, address(#TextEdit[0]), 999);
messagebox(format(#TextEdit[0]));
}
}

function getmessage(0, WM_CLOSE)
{
goto global end;
}

function CreateWin()
{
Win = CreateWindow(WS_EX_TOOLWINDOW, address(#Class[0]), "Настройки", WS_CAPTION | WS_SYSMENU | WS_VISIBLE, 400, 200, 400, 300, 0, 0, 0, 0);
// создание контролов
edit4 = CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD, 10, 10, 100, 20, Win, 0, 0, 0);
button4 = CreateWindow(0, "BUTTON", "Получить текст из Edit", WS_VISIBLE | WS_CHILD, 10, 40, 180, 24, Win, 0, 0, 0);
}
5. konctantin777 - 20 Июня, 2023 - 05:10:05 - перейти к сообщению
Спасибо, буду разбираться )
Zireael , а этот код можно добавить к "Вашему" редактору диалогов ? Там вроде тоже function getmessage и визуально можно меню делать, а не подбором...
6. Zireael - 20 Июня, 2023 - 05:25:41 - перейти к сообщению
Создать нужные контролы в редакторе, получить код, из WM_CREATE скопировать создание контролов и вставить в функцию CreateWin(). Изменить gethwnd(0) на Win.
7. konctantin777 - 20 Июня, 2023 - 05:26:37 - перейти к сообщению
Спасибо !

Powered by ExBB FM 1.0 Final