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;
}
}