b4k88 |
Отправлено: 06 Марта, 2018 - 16:18:27
|
Участник
Покинул форум
Сообщений всего: 51
Дата рег-ции: Авг. 2017
Откуда: Челябинск
Репутация: 0
|
Пытаюсь сделать интерфейс к боту, но что-то в голове каша (наверное похмелье).
С чего бы начать...В общем, хочу сделать так, чтобы при запуске выводилось диалоговое окно, в котором будут кнопки Аккаунт 1, 2, 3, 4, 5 и т.д. Далее чтобы нажав на одну из этих кнопок поверх появлялся диалог со строками, в которые надо уже нужно вводить данные, чтобы в этом окне также были 2 кнопки: "сохранить" (чтобы введенные данные записывались и сохранялись в коде в соответствующие для них строки), ну и естественно кнопка "назад", которая вернет в выбору аккаунтов...
Потыкал, потыкал, по-отдельности сделал такие менюшки, но как организовать их скоординированную работу хз.
Ну и еще вот не понял как сделать так, чтобы результаты сохранялись, чтобы не вводить их при каждом запуске.
И еще туплю, как это с кодом все дело связать...
Вопросов много, голова не соображает, прошу помощи...хотя бы логику понять)
Заранее благодарю(Отредактировано автором: 06 Марта, 2018 - 16:19:49) |
|
|
Zireael |
Отправлено: 07 Марта, 2018 - 09:07:53
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Делать кнопку для каждого аккаунта как-то странно. А если их 20, делать 20 кнопок? Проще ввести номер аккаунта вместе с логином и паролем.
code (Отобразить)CODE:string path_setting="C:\account.ini"; // путь для сохранения логинов и паролей
int count_account=3; // сколько аккаунтов
int current_dialog=0; // текущий диалог, не менять
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
string Account[10][2]; //массив для логинов и паролей
// Account[0][0] - логин для первого аккаунта Account[0][1] - пароль для первого аккаунта
// Account[1][0] - логин для второго аккаунта Account[1][1] - пароль для второго аккаунта
// Диалог1
int pos_size_button0[2][4];
string text_button0[2];
int flag_button0[2];
pos_size_button0[0][0]=10; pos_size_button0[0][1]=10; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
pos_size_button0[1][0]=10; pos_size_button0[1][1]=40; pos_size_button0[1][2]=100; pos_size_button0[1][3]=20;
text_button0[0]="Account"; text_button0[1]="Загрузить акк";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
//////////
// Диалог2
int pos_size_button1[2][4];
string text_button1[2];
int flag_button1[2];
pos_size_button1[0][0]=120; pos_size_button1[0][1]=105; pos_size_button1[0][2]=100; pos_size_button1[0][3]=20;
pos_size_button1[1][0]=10; pos_size_button1[1][1]=105; pos_size_button1[1][2]=100; pos_size_button1[1][3]=20;
text_button1[0]="Назад"; text_button1[1]="Сохранить";
//////////
int pos_size_edit1[3][4];
string text_edit1[3];
pos_size_edit1[0][0]=80; pos_size_edit1[0][1]=10; pos_size_edit1[0][2]=100; pos_size_edit1[0][3]=20;
pos_size_edit1[1][0]=80; pos_size_edit1[1][1]=40; pos_size_edit1[1][2]=100; pos_size_edit1[1][3]=20;
pos_size_edit1[2][0]=80; pos_size_edit1[2][1]=70; pos_size_edit1[2][2]=100; pos_size_edit1[2][3]=20;
text_edit1[0]=""; text_edit1[1]=""; text_edit1[2]="";
//////////
int pos_size_static1[3][4];
string text_static1[3];
pos_size_static1[0][0]=10; pos_size_static1[0][1]=13; pos_size_static1[0][2]=60; pos_size_static1[0][3]=20;
pos_size_static1[1][0]=10; pos_size_static1[1][1]=43; pos_size_static1[1][2]=60; pos_size_static1[1][3]=20;
pos_size_static1[2][0]=10; pos_size_static1[2][1]=73; pos_size_static1[2][2]=60; pos_size_static1[2][3]=20;
text_static1[0]="Номер акк"; text_static1[1]="Login"; text_static1[2]="Password";
//////////
createdialog(1, BUTTON, #pos_size_button1[0][0], #text_button1[0], #flag_button1[0] |
EDIT, #pos_size_edit1[0][0], #text_edit1[0] |
STATIC, #pos_size_static1[0][0], #text_static1[0]);
//////////
showdialog(0, "Диалог1", 827, 428, 211, 176, 1, 1);
//////////
enabletimer(0);
loop()
{
// тут скрипт
sleep(10);
}
// функция загрузки логинов и паролей в массив Account
function load_account(string #a, int count)
{
if(fopen (path_setting, "r") > 0) // если файл с настройками открылся
{
fclose();
char load_acc[100]; // массив для получения логина/пароля из ini файла
resettextout(1);
textbkcolor(255, 16777088);
for(int i=0;i<count;i++)
{
if(GetPrivateProfileString("Account"+format(i+1), "Login", 0, address (#load_acc[0]), 100, path_setting) > 0) // загрузить логин
a[i][0]=format (#load_acc[0]);
if(GetPrivateProfileString("Account"+format(i+1), "Password", 0, address (#load_acc[0]), 100, path_setting) > 0)// загрузить пароль
a[i][1]=format (#load_acc[0]);
textout(i, 300, 300+i*20, a[i][0]+" "+a[i][1], 1); // можно убрать
}
sleep(2000); // можно убрать
resettextout(1); // можно убрать
}
else
{
resettextout(1); textbkcolor(255, 16777088);
textout(0, 300, 300, "Файл "+path_setting+" не найден", 1); // можно убрать
sleep(1500); resettextout(1);
}
}
// функция сохранения введённых логина и пароля
function save_account()
{
WritePrivateProfileString ("Account"+text_edit1[0], "Login", text_edit1[1], path_setting); // сохранить логин
WritePrivateProfileString ("Account"+text_edit1[0], "Password", text_edit1[2], path_setting); // сохранить пароль
}
CREATE_TIMER(0, 200)
{
if(current_dialog==0) // текущий диалог1, т. е. проверются нажатие кнопок основного диалога
{
if(flag_button0[0]==1) // если нажата 'Account'
{
flag_button0[0]=0;
current_dialog=1; // текущий диалог
showdialog(1, "Диалог2", 742, 402, 234, 175, 2, 1);
}
if(flag_button0[1]==1) // если нажата 'Загрузить акк'
{
flag_button0[1]=0;
load_account(#Account[0][0], count_account); // функция загрузки
}
}
else // диалог2, проверяются кнопки диалога2
{
flag_button0[0]=0; flag_button0[1]=0; // флаги кнопок диалога1 обнуляются
if(flag_button1[0]==1) // если нажата назад
{
flag_button1[0]=0;
current_dialog=0;
hidedialog(1); // скрыть диалог
}
if(flag_button1[1]==1) // если нажата сохранить
{
flag_button1[1]=0;
save_account(); // функция сохранения
resettextout(1);
textbkcolor(13703910, 16777088);
textout(100, 300, 400, "Аккаунт сохранён", 1);
sleep(1000); resettextout(1);
text_edit1[0]=""; text_edit1[1]=""; text_edit1[2]=""; // очищаем все поля
}
}
}
Нажатии кнопки 'Account' открывает диалог, в котором вводим номер аккаунта, логин и пароль. Нажатие 'Сохранить' сохраняет данные в ini файл. Нажатие 'Назад' скрывает диалог. Нажатие 'Загрузить акк' загружает логины и пароли в массив, который можно использовать в дальнейшем. |
|
|
b4k88 |
Отправлено: 07 Марта, 2018 - 18:40:55
|
Участник
Покинул форум
Сообщений всего: 51
Дата рег-ции: Авг. 2017
Откуда: Челябинск
Репутация: 0
|
Zireael пишет: Делать кнопку для каждого аккаунта как-то странно. А если их 20, делать 20 кнопок? Проще ввести номер аккаунта вместе с логином и паролем.
code (Отобразить)CODE:string path_setting="C:\account.ini"; // путь для сохранения логинов и паролей
int count_account=3; // сколько аккаунтов
int current_dialog=0; // текущий диалог, не менять
external (INT, "GetPrivateProfileString", "GetPrivateProfileStringA", "kernel32.dll");
external (INT, "WritePrivateProfileString", "WritePrivateProfileStringA", "kernel32.dll");
string Account[10][2]; //массив для логинов и паролей
// Account[0][0] - логин для первого аккаунта Account[0][1] - пароль для первого аккаунта
// Account[1][0] - логин для второго аккаунта Account[1][1] - пароль для второго аккаунта
// Диалог1
int pos_size_button0[2][4];
string text_button0[2];
int flag_button0[2];
pos_size_button0[0][0]=10; pos_size_button0[0][1]=10; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
pos_size_button0[1][0]=10; pos_size_button0[1][1]=40; pos_size_button0[1][2]=100; pos_size_button0[1][3]=20;
text_button0[0]="Account"; text_button0[1]="Загрузить акк";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
//////////
// Диалог2
int pos_size_button1[2][4];
string text_button1[2];
int flag_button1[2];
pos_size_button1[0][0]=120; pos_size_button1[0][1]=105; pos_size_button1[0][2]=100; pos_size_button1[0][3]=20;
pos_size_button1[1][0]=10; pos_size_button1[1][1]=105; pos_size_button1[1][2]=100; pos_size_button1[1][3]=20;
text_button1[0]="Назад"; text_button1[1]="Сохранить";
//////////
int pos_size_edit1[3][4];
string text_edit1[3];
pos_size_edit1[0][0]=80; pos_size_edit1[0][1]=10; pos_size_edit1[0][2]=100; pos_size_edit1[0][3]=20;
pos_size_edit1[1][0]=80; pos_size_edit1[1][1]=40; pos_size_edit1[1][2]=100; pos_size_edit1[1][3]=20;
pos_size_edit1[2][0]=80; pos_size_edit1[2][1]=70; pos_size_edit1[2][2]=100; pos_size_edit1[2][3]=20;
text_edit1[0]=""; text_edit1[1]=""; text_edit1[2]="";
//////////
int pos_size_static1[3][4];
string text_static1[3];
pos_size_static1[0][0]=10; pos_size_static1[0][1]=13; pos_size_static1[0][2]=60; pos_size_static1[0][3]=20;
pos_size_static1[1][0]=10; pos_size_static1[1][1]=43; pos_size_static1[1][2]=60; pos_size_static1[1][3]=20;
pos_size_static1[2][0]=10; pos_size_static1[2][1]=73; pos_size_static1[2][2]=60; pos_size_static1[2][3]=20;
text_static1[0]="Номер акк"; text_static1[1]="Login"; text_static1[2]="Password";
//////////
createdialog(1, BUTTON, #pos_size_button1[0][0], #text_button1[0], #flag_button1[0] |
EDIT, #pos_size_edit1[0][0], #text_edit1[0] |
STATIC, #pos_size_static1[0][0], #text_static1[0]);
//////////
showdialog(0, "Диалог1", 827, 428, 211, 176, 1, 1);
//////////
enabletimer(0);
loop()
{
// тут скрипт
sleep(10);
}
// функция загрузки логинов и паролей в массив Account
function load_account(string #a, int count)
{
if(fopen (path_setting, "r") > 0) // если файл с настройками открылся
{
fclose();
char load_acc[100]; // массив для получения логина/пароля из ini файла
resettextout(1);
textbkcolor(255, 16777088);
for(int i=0;i<count;i++)
{
if(GetPrivateProfileString("Account"+format(i+1), "Login", 0, address (#load_acc[0]), 100, path_setting) > 0) // загрузить логин
a[i][0]=format (#load_acc[0]);
if(GetPrivateProfileString("Account"+format(i+1), "Password", 0, address (#load_acc[0]), 100, path_setting) > 0)// загрузить пароль
a[i][1]=format (#load_acc[0]);
textout(i, 300, 300+i*20, a[i][0]+" "+a[i][1], 1); // можно убрать
}
sleep(2000); // можно убрать
resettextout(1); // можно убрать
}
else
{
resettextout(1); textbkcolor(255, 16777088);
textout(0, 300, 300, "Файл "+path_setting+" не найден", 1); // можно убрать
sleep(1500); resettextout(1);
}
}
// функция сохранения введённых логина и пароля
function save_account()
{
WritePrivateProfileString ("Account"+text_edit1[0], "Login", text_edit1[1], path_setting); // сохранить логин
WritePrivateProfileString ("Account"+text_edit1[0], "Password", text_edit1[2], path_setting); // сохранить пароль
}
CREATE_TIMER(0, 200)
{
if(current_dialog==0) // текущий диалог1, т. е. проверются нажатие кнопок основного диалога
{
if(flag_button0[0]==1) // если нажата 'Account'
{
flag_button0[0]=0;
current_dialog=1; // текущий диалог
showdialog(1, "Диалог2", 742, 402, 234, 175, 2, 1);
}
if(flag_button0[1]==1) // если нажата 'Загрузить акк'
{
flag_button0[1]=0;
load_account(#Account[0][0], count_account); // функция загрузки
}
}
else // диалог2, проверяются кнопки диалога2
{
flag_button0[0]=0; flag_button0[1]=0; // флаги кнопок диалога1 обнуляются
if(flag_button1[0]==1) // если нажата назад
{
flag_button1[0]=0;
current_dialog=0;
hidedialog(1); // скрыть диалог
}
if(flag_button1[1]==1) // если нажата сохранить
{
flag_button1[1]=0;
save_account(); // функция сохранения
resettextout(1);
textbkcolor(13703910, 16777088);
textout(100, 300, 400, "Аккаунт сохранён", 1);
sleep(1000); resettextout(1);
text_edit1[0]=""; text_edit1[1]=""; text_edit1[2]=""; // очищаем все поля
}
}
}
Нажатии кнопки 'Account' открывает диалог, в котором вводим номер аккаунта, логин и пароль. Нажатие 'Сохранить' сохраняет данные в ini файл. Нажатие 'Назад' скрывает диалог. Нажатие 'Загрузить акк' загружает логины и пароли в массив, который можно использовать в дальнейшем.
Сложно, но пытаюсь разобраться. В ходе теста возник вопрос, почему сохраняются именно 3 акка? по крайней мере отображаются именно первые 3. Не нашел строку, где изменить это кол-во.
Спасибо, идея действительно интересная |
|
|
Zireael |
Отправлено: 07 Марта, 2018 - 18:52:30
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Не нашел строку, где изменить это кол-во.
Вторая строчка.
CODE:int count_account=3; // сколько аккаунтов |
|
|
b4k88 |
Отправлено: 07 Марта, 2018 - 19:47:19
|
Участник
Покинул форум
Сообщений всего: 51
Дата рег-ции: Авг. 2017
Откуда: Челябинск
Репутация: 0
|
Zireael пишет: Цитата: Не нашел строку, где изменить это кол-во.
Вторая строчка.
CODE:int count_account=3; // сколько аккаунтов
ой я слепой)) спасибо, если что буду еще спрашивать |
|
|
|