CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define WS_HSCROLL 1048576
#define WS_VSCROLL 2097152
#define LB_ADDSTRING 384
#define LB_GETCURSEL 392
#define LB_GETTEXT 393
#define LB_SETHORIZONTALEXTENT 404
#define LBS_DISABLENOSCROLL 4096
#define LBS_NOTIFY 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "compression_image", "compression_image", pathfolder()+"compression.fffff");
string path="C:\"; // путь к картинкам
int width=600; // максимальная ширина изображения, при которой оно не будет уменьшено
int height=550; // максимальная ширина изображения, при которой оно не будет уменьшено
string file[999]; // массив для имён картинок, которые ищутся через dir
int list, hdc, max_length=0; // для списка
int image[1921][1921], S[1921][1921]; // массивы для картинок
char text_item[999]; // текст выделенного пункта списка
int i;
createdialog(0);
showdialog(0, "Диалог",0, 0, 800, 600, 1, 1);
int count=list_file(path, #file[0], "bmp|png|jpg"); // посик файлов с расширением bmp, png, jpg
messagebox("Найдено файлов: "+format(count));
for (i=0; i<count; i++)add_list(file[i]); // добавление в список строк
loop()sleep(10);
function load_image(int #image2, string name_file)
{
string s;
string path2;
regexreplace(1, #path2, path, "([^\\]+)$", "$1"+"\"); // если путь к файлу не заканчивается \ то он допишется
if(regexsearch(1, #s, name_file, "bmp"))loadimage(#image2[0][0], path2+name_file); // если файл bmp
else
{
if(regexsearch(1, #s, name_file, "png"))loadimage(PNG, #image2[0][0], path2+name_file); // если файл png
else
{
if(regexsearch(1, #s, name_file, "jpg"))loadimage(JPG, #image2[0][0], path2+name_file); // если файл jpg
else
{
messagebox("Файл не bmp, png, jpg");
return;
}
}
}
if(imagewidth(#image2[0][0])<width) // если ширина картинки меньше указанной, то выводим изображение как есть
{
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, imagewidth(#image2[0][0]), imageheight(#image2[0][0]), 180, 10, 100, #image[0][0]);
update(formatiw(gethwnd(0)));
}
else // иначе, сжимаем его
{
int percentX=width * 100 / imagewidth(#image2[0][0]); // высчитываем процент
int percentY=height * 100 / imageheight(#image2[0][0]); // высчитываем процент
if(percentX<percentY)compression_image(0, address(#image2[0][0]), sizearray(image), sizearray(image[]), address(#S[0][0]), percentX);
else compression_image(0, address(#image2[0][0]), sizearray(image), sizearray(image[]), address(#S[0][0]), percentY);
visualwindow(formatiw(gethwnd(0)), 0, 0, 0, imagewidth(#S[0][0]), imageheight(#S[0][0]), 180, 10, 100, #S[0][0]);
update(formatiw(gethwnd(0)));
}
}
function list_file(string path_to_images, string #image_name, string ext)
{
string ss, s[99999], R=".+\.(?:"+ext+")";;
int x=0, count_file=dir(path_to_images, #s[0], "file");
for (int i=0; i<count_file; i++)
{
if(regexsearch(1, #ss, s[i], R)){image_name[x]=ss; x++;}
}
return x;
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==list) // если выбрана строка в списке
{
// узнаём номер выбранной строки и её текст
if(sendmessage(LB_GETTEXT, sendmessage(LB_GETCURSEL, 0, 0, formatiw(list)), address(#text_item[0]), formatiw(list)))
{
load_image(#image[0][0], format(#text_item[0])); // загрузка изображения
}
}
}
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | LBS_DISABLENOSCROLL | WS_VSCROLL | WS_HSCROLL | WS_BORDER | WS_CHILD | WS_VISIBLE, 10, 10, 150, 250, gethwnd(0), 0, 0, 0);
hdc=GetDC(list);
}
function add_list(string s)
{
int SIZE[2];
new char c[size(s)+1];
strcpy(#c[0], s);
GetTextExtentPoint32(hdc, address(#c[0]), sizearray(c), address(#SIZE[0])); // узнать длину текста в пикселях
if(max_length<SIZE[0])
{
max_length=SIZE[0]; // запомнить максимальную длину строки
sendmessage(LB_SETHORIZONTALEXTENT, SIZE[0], 0, formatiw(list)); // установить ширину прокрутки
}
sendmessage(LB_ADDSTRING, 0, address(#c[0]), formatiw(list));
delete c;
}