Zireael |
Отправлено: 30 Апреля, 2021 - 11:39:53
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Сохранение настроек в ini (Отобразить)CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_AUTOCHECKBOX 0x0003
#define CBS_DROPDOWNLIST 0x0003
#define CB_ADDSTRING 0x0143
#define CB_GETCURSEL 0x0147
#define CB_SETCURSEL 0x014E
#define CBN_CLOSEUP 8
#define BM_SETCHECK 0x00F1
#define BST_CHECKED 0x0001
#define BST_UNCHECKED 0x0000
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
string path = "C:\config111.ini"; // куда сохранять файл настроек
// галки
int check[6];
int pos_check[6][4];
pos_check[0][0]=10; pos_check[0][1]=10; pos_check[0][2]=80; pos_check[0][3]=20;
pos_check[1][0]=10; pos_check[1][1]=32; pos_check[1][2]=80; pos_check[1][3]=20;
pos_check[2][0]=10; pos_check[2][1]=54; pos_check[2][2]=80; pos_check[2][3]=20;
pos_check[3][0]=10; pos_check[3][1]=90; pos_check[3][2]=80; pos_check[3][3]=20;
pos_check[4][0]=10; pos_check[4][1]=112; pos_check[4][2]=80; pos_check[4][3]=20;
pos_check[5][0]=10; pos_check[5][1]=136; pos_check[5][2]=80; pos_check[5][3]=20;
int flag_check[6]; initialarray(#flag_check[0], 0);
string check_text[6]={"Еда1", "Еда2", "Еда3", "Дерево1", "Дерево2", "Дерево3"}
// комбо
int combo, flag_combo=-1;
string combo_text[3]={"akk1", "akk2", "akk3"} // список строк для комбо
createdialog(0); // создать диалог
showdialog(0, "Диалог",100, 150, 300, 300, 4, 1); // показать диалог
loop()
{
// тут нужные скрипт
textbkcolor(255, 65280);
textout(0, 0, 0, "Выбран пункт в комбо: "+format(flag_combo), 1);
textout(1, 0, 20, "Еда1: "+format(flag_check[0]), 1);
textout(2, 0, 40, "Еда2: "+format(flag_check[1]), 1);
textout(3, 0, 60, "Еда3: "+format(flag_check[2]), 1);
textout(4, 0, 80, "Дерево1: "+format(flag_check[3]), 1);
textout(5, 0, 100, "Дерево2: "+format(flag_check[4]), 1);
textout(6, 0, 120, "Дерево3: "+format(flag_check[5]), 1);
sleep(10);
}
end:; // переход к метке если диалог закрыт
function getmessage(0, WM_CREATE)
{
char c[999];
combo=CreateWindow(0, "COMBOBOX", "", CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_BORDER, 150, 10, 110, 120, gethwnd(0), 0, 0, 0); // создать комбо
for(i=0; i<sizearray(combo_text); i++)
{
strcpy(#c[0], combo_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo)); // добавить строку в комбо
}
// создать галки
for(int i=0; i<sizearray(pos_check); i++)
check[i]=CreateWindow(0, "BUTTON", check_text[i], BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, pos_check[i][0],
pos_check[i][1], pos_check[i][2], pos_check[i][3], gethwnd(0), 0, 0, 0);
if(fopen(path, "r")) // если файл настроек существует
{
fclose();
load_config(); // вызов функции, которая загрузит настройки из ini файла
sendmessage(CB_SETCURSEL, flag_combo, 0, formatiw(combo)); // выбрать пункт в комбо
check_state(); // расставить галки
}
else
{
flag_combo=0;
sendmessage(CB_SETCURSEL, flag_combo, 0, formatiw(combo)); // выбрать 1й пункт если нет файла настроек
}
}
function getmessage(0, WM_COMMAND)
{
// если выбран пункт в комбо
if(message.lparam == combo && hiword(message.wparam) == CBN_CLOSEUP)
{
save_config(); // сохранить настройки
flag_combo = sendmessage(CB_GETCURSEL, 0, 0, formatiw(combo)); // получить номер выбранного пункта
load_config(); // загрузить настройки
check_state(); // расставить галки
return;
}
// если выбрана любая галка
for(int i=0; i<sizearray(check); i++)
{
if(message.lparam == check[i])
{
if(flag_check[i])flag_check[i]=0;
else flag_check[i]=1;
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
save_config(); // вызов функции, котороая сохранит настройки в ini файл
goto global end; // выход из скрипта, можно заменить на close(); чтобы закрыть кибор
}
function check_state()
{
// расставить галки
for(int i=0; i<sizearray(check); i++)
{
if(flag_check[i])sendmessage(BM_SETCHECK, BST_CHECKED, 0, formatiw(check[i]));
else sendmessage(BM_SETCHECK, BST_UNCHECKED, 0, formatiw(check[i]));
}
}
function load_config() // функция для загрузки настроек
{
char c[256];
if(flag_combo == -1) // если пункт комбо не выбран
{
GetPrivateProfileString ("Default", "Combo", 0, address (#c[0]), sizearray(c), path); // получить номер пункта из ini
flag_combo = formatsn(format(#c[0])); // записать значение в переменную
}
for(int i=0; i<sizearray(check); i++) // для всех галок
{
GetPrivateProfileString ("Combo"+format(flag_combo), "Check"+format(i), 0, address (#c[0]), sizearray(c), path); // получить значение галки
if(formatsn(format(#c[0]))==1)flag_check[i]=1;
else flag_check[i]=0;
}
}
function save_config() // функция для сохранения настроек
{
char c[256];
WritePrivateProfileString ("Default", "Combo", format(flag_combo), path); // записать номер текущей выбранной строки комбо
// записать статус галок
for(int i=0; i<sizearray(check); i++)WritePrivateProfileString ("Combo"+format(flag_combo), "Check"+format(i), format(flag_check[i]), path);
}
Настройки сохраняются при закрытии диалога и при выборе строки комбо. |
|
|
|