Zireael |
Отправлено: 28 Апреля, 2019 - 14:39:48
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: То, что в for и всё
Изучайте:
Определить статус галок, выбрана/не выбрана (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define BS_AUTOCHECKBOX 3
#define BM_GETSTATE 242
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int check[8]; // массив для хендлов галок
int size_check=sizearray(check); // размер массива
new int Status_Checkbox[size_check]; // массив для хранения статуса галки, 1 - выбрана, 0 - не выбрана
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
state_check(); // функция получающая статус галок
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
for(int i=0; i<size_check; i++) // создали галки
check[i]=CreateWindow(0, "BUTTON", "Галка"+format(i), BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 10, i*20+10, 70, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
for(int i=0; i<size_check; i++) // проверка нажата какая-то галка или нет
{
if(message.lparam==check[i]){state_check(); return;}
}
}
function state_check()
{
int state;
for(int i=0; i<size_check; i++)
{
state=sendmessage(BM_GETSTATE, 0, 0 , formatiw(check[i])); // узнать статус галки
if(state==1 || state==9)Status_Checkbox[i]=1; // если 1 или 9, то пишем в массив 1, значит выбрана
else Status_Checkbox[i]=0; // иначе 0 - не выбрана
}
textout_check(); // вывод в textout состояния галок
}
function textout_check()
{
textbkcolor(255, 65280);
for(int i=0; i<size_check; i++)textout(i, 220, 135+i*20, format(Status_Checkbox[i]), 1);
} |
|
|
007wan |
Отправлено: 01 Мая, 2019 - 14:37:55
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: То, что в for и всё
Изучайте:
Определить статус галок, выбрана/не выбрана (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define BS_AUTOCHECKBOX 3
#define BM_GETSTATE 242
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int check[8]; // массив для хендлов галок
int size_check=sizearray(check); // размер массива
new int Status_Checkbox[size_check]; // массив для хранения статуса галки, 1 - выбрана, 0 - не выбрана
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
state_check(); // функция получающая статус галок
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
for(int i=0; i<size_check; i++) // создали галки
check[i]=CreateWindow(0, "BUTTON", "Галка"+format(i), BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 10, i*20+10, 70, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
for(int i=0; i<size_check; i++) // проверка нажата какая-то галка или нет
{
if(message.lparam==check[i]){state_check(); return;}
}
}
function state_check()
{
int state;
for(int i=0; i<size_check; i++)
{
state=sendmessage(BM_GETSTATE, 0, 0 , formatiw(check[i])); // узнать статус галки
if(state==1 || state==9)Status_Checkbox[i]=1; // если 1 или 9, то пишем в массив 1, значит выбрана
else Status_Checkbox[i]=0; // иначе 0 - не выбрана
}
textout_check(); // вывод в textout состояния галок
}
function textout_check()
{
textbkcolor(255, 65280);
for(int i=0; i<size_check; i++)textout(i, 220, 135+i*20, format(Status_Checkbox[i]), 1);
}
А как создать и присоединить массив текста галочек, потому что это может быть разный текст у каждой галочки |
|
|
Zireael |
Отправлено: 01 Мая, 2019 - 18:20:11
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А как создать и присоединить массив текста галочек, потому что это может быть разный текст у каждой галочки
CODE:string check_name[3]={"Галка1", "Check2", "3"};
for(int i=0; i<sizearray(check_name); i++)messagebox(check_name[i]); |
|
|
007wan |
Отправлено: 10 Мая, 2019 - 10:54:15
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Есть Но она меня не устраивает, т.к невозможно сменить заголовок, поэтому использую CODE:external(INT, "my_message", "MessageBoxA", "user32.dll");
my_message(0, "" , "", 0);
Но для CODE:if (messageboxyn("текст")==1)//Выбор действия: "да" и "нет"
{
}
Нету, что бы изменить заголовок сообщения с выбором, может есть что-то такое в external?
(Добавление)
Лучше бы только ошибки в коде выводились с сообщением, что это Kibor,а для других и так понятно, что я пользуюсь этой программой |
|
|
Zireael |
Отправлено: 10 Мая, 2019 - 11:07:45
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:#define MB_OKCANCEL 1
#define MB_YESNOCANCEL 3
external(INT, "my_message", "MessageBoxA", "user32.dll");
my_message(0, "Сообщение", "Kibor", 0);
int result=my_message(0, "Сообщение", "Kibor", MB_OKCANCEL);
messagebox(result); // результат выбора
result=my_message(0, "Сообщение", "Kibor", MB_YESNOCANCEL);
messagebox(result); // результат выбора |
|
|
|