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

Страниц (22): [1] 2 3 4 5 6 7 8 9 ... » В конец
 

1. 007wan - 04 Марта, 2019 - 09:30:42 - перейти к сообщению
Почему все стали переходить к external? это лучше, чем другие функции? Вот недавно видел...В теме писали как написать в файл текст и там использовалось external,А почему не fopen,fwrite итд? чем лучше External?
(Добавление)
Вот почему, например, используют таймер от external, а не CREATETIMER из кибора? чем лучше? Я конечно, все понимаю...новые возможности, методы итд, но в чем разниа?
2. Kibor - 04 Марта, 2019 - 09:55:01 - перейти к сообщению
external позволяет использовать winapi и реализовать то чего нет в кибор функциях.
Если в Кибор есть этот функционал, то нет смысла использовать api.
Если кто то использует api вместо кибор функций, то значит ему так просто больше нравится или там есть возможности которых нет в функциях кибор.
3. 007wan - 04 Марта, 2019 - 10:05:40 - перейти к сообщению
Kibor ,Ясно - понятно
4. Zireael - 07 Марта, 2019 - 10:57:38 - перейти к сообщению
 Цитата:
А как сравнить текст одной кнопки от другой при нажатии.
string a;
GetWindowText(Button1, a, 255);

CODE:
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");

// окна Button1 и Button2 должны быть созданы
char buffer1[255], buffer2[255];
GetWindowText(Button1, address(#buffer1[0]), sizearray(buffer1));
GetWindowText(Button2, address(#buffer2[0]), sizearray(buffer2));

if(format(#buffer1[0]) == format(#buffer2[0]))
{
messagebox("+++");
}
5. 007wan - 07 Марта, 2019 - 11:17:19 - перейти к сообщению
Ёёёёё, я забыл, блин надо было отдельную создать....
6. Zireael - 07 Марта, 2019 - 11:24:29 - перейти к сообщению
 Цитата:
надо было отдельную создать....

Не обязательно каждый раз отдельную, просто вопросы задавать в соответствующих темах.
7. 007wan - 08 Марта, 2019 - 03:38:02 - перейти к сообщению
А возможно ли через external ограничить количество символов в Edit? Только не надо использовать старый метод с IF, я знаю, что получится что-то такое:
CODE:
Если количество символов в строке превышает более, чем нужно, то удалять последние символы до нужного
- Мне этого не надо, мне надо, что бы все железно работало, как вот сдесь:
CODE:
#define EM_SETPASSWORDCHAR 204

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );

createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);

while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");

int edit1=CreateWindow(0, "EDIT", "", 8192+8388608+1342177280, 10, 20, 100, 20, formatwi(w), 0, 0, 0); // можно вводить только цифры
int edit2=CreateWindow(0, "EDIT", "", 32+8388608+1342177280, 10, 60, 100, 20, formatwi(w), 0, 0, 0); // заменяет вводимый текст на *
int edit3=CreateWindow(0, "EDIT", "", 4+128+4096+1048576+2097152+8388608+1342177280, 10, 100, 120, 120, formatwi(w), 0, 0, 0); // многострочный текст

int button1=CreateWindow(0, "BUTTON", "Показать текст", 1342177280, 150, 60, 110, 20, formatwi(w), 0, 0, 0); // кнопка
int button2=CreateWindow(0, "BUTTON", "Вывести текст в messagebox", 8192+1342177280, 135, 100, 150, 40, formatwi(w), 0, 0, 0); // кнопка

int static1=CreateWindow(0, "STATIC", "Только цифры", 1342177280, 120, 20, 110, 20, formatwi(w), 0, 0, 0); // статик

char buffer[9999]; // буфер для текста из окна edit

loop()
{
sleep(1);
}


function getmessage(0, WM_COMMAND)
{
if(message.lparam==button1) // если нажата кнопка 'Показать текст'
{
if(GetWindowText(button1, address(#buffer[0]), sizearray(buffer))) // получить текст кнопки
{
if(format(#buffer[0])=="Показать текст") // если она называется 'Показать текст'
{
SetWindowText(button1, "Скрыть текст"); // меняем название кнопки
sendmessage(EM_SETPASSWORDCHAR, 0, 0, formatiw(edit2)); // отключаем замену вводимых символов на *
SetFocus(edit2); // ставим курсор в поле edit2
}
else // иначе
{
SetWindowText(button1, "Показать текст"); // меняем текст кнопки
sendmessage(EM_SETPASSWORDCHAR, 42, 0, formatiw(edit2)); // включаем замену вводимых символов на * (код 42) или любой другой символ
SetFocus(edit2);
}
}
}

if(message.lparam==button2) // если нажата кнопка 'Вывести текст в messagebox'
{
GetWindowText(edit3, address(#buffer[0]), sizearray(buffer)); // получить текст из окна edit3
messagebox(format(#buffer[0])); // показать текст в сообщении
}
}
Важен не код, а принцип действия, он не стирает не тот символ при ложном условии, а сразу запрещает ввод, даже как будто кнопка отключена. Так же и тут хочу, что бы он не давал больше вводить. А то, что он будет стирать лишнее при пользователе мне этого не нужно.
8. Zireael - 08 Марта, 2019 - 03:59:12 - перейти к сообщению
 Цитата:
ограничить количество символов в Edit

Чтобы установить или получить какие-то параметры для edit ему отправляется sendmessage. Список сообщений
CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define EM_LIMITTEXT 197

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );

int edit1;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);

loop()sleep(1);

function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER, 10, 20, 100, 20, gethwnd(0), 0, 0, 0);
sendmessage(EM_LIMITTEXT, 6, 0, formatiw(edit1)); // ограничение количества вводимых символов, 2й параметр, 6 символов
}
9. 007wan - 08 Марта, 2019 - 04:15:05 - перейти к сообщению
Zireael , Спасибо, но почему я ставлю лимит 70 и когда ввожу текст, то у меня не вводится больше где-то 10, не идет дальше
10. Zireael - 08 Марта, 2019 - 04:23:19 - перейти к сообщению
 Цитата:
почему я ставлю лимит 70 и когда ввожу текст, то у меня не вводится больше где-то 10, не идет дальше

Потому что надо добавить стиль ES_AUTOHSCROLL, тогда текст будет сдвигаться если не помещается.
CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define EM_LIMITTEXT 197
#define ES_AUTOHSCROLL 128

external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );

int edit1;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);

loop()sleep(1);

function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 10, 20, 100, 20, gethwnd(0), 0, 0, 0);
sendmessage(EM_LIMITTEXT, 20, 0, formatiw(edit1)); // ограничение количества вводимых символов, 2й параметр, 20 символов
}

Powered by ExBB FM 1.0 Final