Budni |
Отправлено: 05 Ноября, 2019 - 12:58:02
|
Специалист
Покинул форум
Сообщений всего: 419
Дата рег-ции: Март 2018
Репутация: 2
|
Zireael , Как то не так выражаюсь.
Хочу, чтобы при нажатии на текст из списка он как бы скопировался(взялся из переменной и напечатался) и добавился в нужное мне поле.
Вот что то из вашего кода собрал, но почему то 3 раза подряд печатает текст после нажатия, как то исправить можно?
код (Отобразить)#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_GETCURSEL 392
#define LB_GETTEXT 393
#define LBS_NOTIFY 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list, current=-1;
char text[999]={0}
int col, xek, yek;
getdisplay(col, xek, yek);
xek=xek/2-200; yek=yek/2;
createdialog(0);
showdialog(0, "Диалог",xek, yek, 300, 300, 1, 1);
string path="C:\123.txt";
string s;
if(fopen(path, "r"))
{
for(int h=0; freadline(s); h++)add_list(s);
fclose();
}
textbkcolor(16000000, 65279);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 150, 250, gethwnd(0), 0, 0, 0);
// добавить строки в список
add_list(s);
}
function add_list(string s)
{
new char c[size(s)+1];
strcpy(#c[0], s);
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list) // если был клик по списку
{
current=sendmessage(LB_GETCURSEL, 0, 0, formatiw(list)); // узнать номер выбранной строки
sendmessage(LB_GETTEXT, current, address(#text[0]), formatiw(list)); // получить текст
sleep(200);
mouse(LEFT,175, 217);
sleep(200);
key(format(#text[0]));
sleep(1200);
}
} |
|
|
Zireael |
Отправлено: 05 Ноября, 2019 - 13:29:33
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: но почему то 3 раза подряд печатает текст после нажатия, как то исправить можно?
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_GETCURSEL 392
#define LB_GETTEXT 393
#define LBS_NOTIFY 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list, current=-1;
char text[999]={0}
int col, xek, yek;
getdisplay(col, xek, yek);
xek=xek/2-200; yek=yek/2;
string path="C:\123.txt";
string s;
createdialog(0);
showdialog(0, "Диалог",xek, yek, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 150, 250, gethwnd(0), 0, 0, 0);
// добавить строки в список
if(fopen(path, "r"))
{
for(int h=0; freadline(s); h++)add_list(s);
fclose();
}
}
function add_list(string s)
{
new char c[size(s)+1];
strcpy(#c[0], s);
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list && hiword(message.wparam) == 1) // если был клик по списку
{
current=sendmessage(LB_GETCURSEL, 0, 0, formatiw(list)); // узнать номер выбранной строки
sendmessage(LB_GETTEXT, current, address(#text[0]), formatiw(list)); // получить текст
sleep(200);
mouse(LEFT,175, 217);
sleep(200);
key(format(#text[0]));
sleep(1200);
return;
}
} |
|
|
Zireael |
Отправлено: 06 Ноября, 2019 - 02:30:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: а как вопрос с крякозяброй возможно решить?
Вариантов 2.
1. Изменить кодировку файла на ANSI.
2. Проверять что файл в юникоде и конвертировать строки:
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_GETCURSEL 392
#define LB_GETTEXT 393
#define LBS_NOTIFY 1
#define MB_ERR_INVALID_CHARS 8
#define CP_UTF8 65001
#define CP_ACP 0
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "WideCharToMultiByte", "WideCharToMultiByte", "Kernel32.dll");
int list, current=-1;
char text[999]={0}
int col, xek, yek;
getdisplay(col, xek, yek);
xek=xek/2-200; yek=yek/2;
string path="C:\123.txt"; // путь к файлу
char c[999999];
createdialog(0);
showdialog(0, "Диалог",xek, yek, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 150, 250, gethwnd(0), 0, 0, 0);
// добавить строки в список из файла
if(fopen(path, "rb")) // открыть файл для чтения
{
int count_symbol=freadb(#c[0], sizearray(c))-1; // прочитать файл в массив
fclose();
if(MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, address(#c[0]), count_symbol, 0, 0)) // проверка что текст utf8
{
if(formatci(c[0])==239 && formatci(c[1])==187 && formatci(c[2])==191)add_list(#c[3], count_symbol-3, 0); // если utf8 с bom
else add_list(#c[0], count_symbol, 0); // если utf8 без bom
}
else add_list(#c[0], count_symbol, 1); // иначе ansi
}
}
function add_list(char #cc, int len, int ansi)
{
string S;
string s[999];
if(ansi==0) // если текст не ansi
{
new char c3[len*2];
int x=MultiByteToWideChar(CP_UTF8, 0, address(#cc[0]), len, address(#c3[0]), sizearray(c3)); // из utf-8 в utf-16
if(x)
{
new char c2[x+1];
x=WideCharToMultiByte(0, 0, address(#c3[0]), x, address(#c2[0]), sizearray(c2), 0, 0); // из utf-16 в 1251
if(x){S=format(#c2[0], x); delete c2;}
}
delete c3;
}
else S=format(#cc[0], len);
int count_string=regexsearch(sizearray(s), #s[0], S, "[^\r\n]+");
for(int i=0; i<count_string; i++)
{
new char c[size(s[i])+1];
strcpy(#c[0], s[i]);
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list)); // добавить строку в список
delete c;
}
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list && hiword(message.wparam) == 1) // если был клик по списку
{
current=sendmessage(LB_GETCURSEL, 0, 0, formatiw(list)); // узнать номер выбранной строки
sendmessage(LB_GETTEXT, current, address(#text[0]), formatiw(list)); // получить текст
sleep(200);
mouse(LEFT,175, 217);
sleep(200);
key(format(#text[0]));
sleep(1200);
return;
}
} |
|
|
Zireael |
Отправлено: 10 Ноября, 2019 - 20:27:53
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как добавить вкладку в контрол Tab
TCM_INSERTITEM
Цитата: добавить кнопку, которая удаляет их
TCM_DELETEITEM |
|
|
007wan |
Отправлено: 11 Ноября, 2019 - 09:03:23
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Вопрос 1:
Например, есть 3 кнопки из CreateWindow, как сделать, что бы было подобие радио кнопки, т.е одну нажимаем и она втапливается, а другие нету итд.
Вопрос 2: Как вывести картинку на кнопку из CreateWindow так, что бы: был отступ(Слева, справа, сверху и низ )примерно на 5-10 пикселя, что бы был замечен эффект нажатия кнопки(вдавливания)? |
|
|
Zireael |
Отправлено: 15 Ноября, 2019 - 01:22:35
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Создается ListBox , записываются туда строчки:
Текст1
Текст2
Текст3
При нажатии на любую строчку - узнает текст строчки.
ListBox (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_GETTEXT 393
#define LB_GETCURSEL 392
#define LBS_NOTIFY 1
#define LB_ERR -1
#define LBN_SELCHANGE 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list, current_item=-1;
char c[255];
createdialog(0);
showdialog(0, "Dialog",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", WS_BORDER | WS_CHILD | WS_VISIBLE | LBS_NOTIFY, 10, 10, 100, 100, gethwnd(0), 0, 0, 0);
strcpy(#c[0], "Текст1");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list)); // добавить строку в список
strcpy(#c[0], "Текст2");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list)); // добавить строку в список
strcpy(#c[0], "Текст3");
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list)); // добавить строку в список
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list && hiword(message.wparam) == LBN_SELCHANGE)
{
current_item=sendmessage(LB_GETCURSEL, 0, 0, formatiw(list));
if(current_item != LB_ERR)
{
sendmessage(LB_GETTEXT, current_item, address(#c[0]), formatiw(list));
textbkcolor(65279, 255);
textout(0, 250, 150, "Выбрана строка: "+format(current_item), 1);
textout(1, 250, 170, format(#c[0]), 1);
}
}
} (Отредактировано автором: 15 Ноября, 2019 - 01:23:07) |
|
|
|