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

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

1. Nathgul - 03 Сентября, 2018 - 02:56:38 - перейти к сообщению
задача проста... есть окно. после нажатия клавиши оно скрывается и скрипт ожидает нажатия клавиш. Если нажатие сделалось окно снова появляется ну и тд... закрыть кибор и собственно окно можно только крестиком в углу... с точки зрения логики скрип вроде правильный но ничерта не работает))

CODE:

external(INT, "IsWindowVisible", "IsWindowVisible", "User32.dll");

int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=74; pos_size_button0[0][1]=122; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
text_button0[0]="Кнопка 0";

//////////

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
//////////

showdialog(0, "Диалог", 675, 300, 250, 300, 0, 1);
//////////
Z:sleep(500);
win w=window("Диалог");
enabletimer(0);


//нажимаем кнопку на форме и прячем диалог, тушим таймер и выходим из цикла переходя в след цикл
loop()
{
if(flag_button0[0]==1)
{
disabletimer(0);
hidedialog(0);
return;
}
sleep(10);
}

//цикл ожидания нажатия клавиш CTRL+A
loop()
{

//регистрируем нажатие и возвращаем скрытую форму, далее переход по метке
if (getkeystate(65)==1 && getkeystate(17)==1)
{
beep(3000, 500);
sleep(200);
beep(3000, 500);
sleep(200);
beep(3000, 500);
sleep(200);
showdialog(0);
goto Z;
}
sleep(10);
}


CREATE_TIMER(0, 1000)
{
if(IsWindowVisible(formatwi(w))==0)close();
}



2. Zireael - 03 Сентября, 2018 - 03:24:48 - перейти к сообщению
 Цитата:
return;

return предназначен для выхода из функции.
break для выхода из циклов.
Т. е. замените return на break.
CODE:
if(flag_button0[0]==1)
{
flag_button0[0]=0; // обнуляем флаг нажатия кнопки
disabletimer(0);
hidedialog(0);
break;
}

 Цитата:
showdialog(0);

Надо вызывать со всеми параметрами.
CODE:
showdialog(0, "Диалог", 675, 300, 250, 300, 0, 1 );
3. Nathgul - 03 Сентября, 2018 - 03:29:03 - перейти к сообщению
 Zireael пишет:
Надо вызывать со всеми параметрами.

а как вернуть то окно которое скрылось. со всеми отмеченными чеками если таковые там есть и настройками? ведь при первичном запуске окошко можно сдвинуть и тд
4. Zireael - 03 Сентября, 2018 - 03:33:07 - перейти к сообщению
 Цитата:
а как вернуть то окно которое скрылось

Перед тем как скрыть окно нужно записать параметры в переменные. Вызывать диалог потом уже с этими переменными.
5. Nathgul - 03 Сентября, 2018 - 03:34:57 - перейти к сообщению
вообщем) срабатывает нажатие вылезает диалог и снова исчезает

CODE:

external(INT, "IsWindowVisible", "IsWindowVisible", "User32.dll");

int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];

pos_size_button0[0][0]=74; pos_size_button0[0][1]=122; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
text_button0[0]="Кнопка 0";

//////////

createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0]);
//////////

showdialog(0, "Диалог", 675, 300, 250, 300, 0, 1);
//////////
Z:sleep(500);
win w=window("Диалог");
enabletimer(0);


//нажимаем кнопку на форме и прячем диалог, тушим таймер и выходим из цикла переходя в след цикл
loop()
{
if(flag_button0[0]==1)
{
disabletimer(0);
hidedialog(0);
break;
}
sleep(10);
}

//цикл ожидания нажатия клавиш CTRL+A
loop()
{

//регистрируем нажатие и возвращаем скрытую форму, далее переход по метке
if (getkeystate(65)==1 && getkeystate(17)==1)
{
beep(3000, 500);
sleep(200);
beep(3000, 500);
sleep(200);
beep(3000, 500);
sleep(200);
showdialog(0, "Диалог", 675, 300, 250, 300, 0, 1);
break;
}
sleep(10);
}
goto Z;


CREATE_TIMER(0, 1000)
{
if(IsWindowVisible(formatwi(w))==0)close();
}




(Добавление)
нажимаю снова ктрл+а снова три гудка появился и исчез... видимо воспринимает клавишу нажатой... дошло флаг кнопки сбросить нужно))
(Добавление)
ну и в завершение я так понимаю чтобы окно выходило на тех координатах где оно было скрыто мне нужно эти координаты запомнить - так?
(Добавление)
 Zireael пишет:
 Цитата:
а как вернуть то окно которое скрылось

Перед тем как скрыть окно нужно записать параметры в переменные. Вызывать диалог потом уже с этими переменными.



 Zireael пишет:
 Цитата:
если я его возьму и сверну в диалоге скомпиленого скрипта то что произойдет?

Свернуть окно и скрыть не одно и тоже.
Сворачивать диалог можно будет, это не влияет на видимость окна.
Соберите скрипт в exe и посмотрите. Вместо messagebox("Окно скрыто"Подмигивание; напишите close();
 Цитата:
есть ли в либах чтот типа IsWindowVisible только для закрытия?

Для закрытия чего? Кибор можно закрыть через close().



цитату взял из темы про закрытие кибора крестиком.

методом тыка проб и ошибок заметил следующее:
есть скрытие диалога посредством крестика в углу и есть скрытие посредством hidedialog

получается if(IsWindowVisible(formatwi(w))==0) никак не реагирует на окно срытое программно, в отличии от нажатия крестик... в чем разница?)
(Добавление)
понедельник день тяжелый... прошу прощения... не реагирует потому что таймер выключается принудительно по нажатию кнопки на форме))

Powered by ExBB FM 1.0 Final