Цитата:
как в ListView:
добавить картинку в любой столбец?
добавить картинку в любой столбец?
ListView + ImageList (Отобразить)
CODE:
#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define LVM_INSERTCOLUMNA 4123
#define LVM_INSERTITEMA 4103
#define LVM_SETITEMA 4102
#define LVCF_FMT 1
#define LVCF_WIDTH 2
#define LVCF_TEXT 4
#define LVCF_SUBITEM 8
#define LVCFMT_LEFT 0
#define LVS_REPORT 1
#define LVIF_TEXT 1
#define SM_CXSMICON 49
#define SM_CYSMICON 50
#define ILC_MASK 1
#define LVSIL_SMALL 1
#define LVCF_IMAGE 16
#define LVIF_IMAGE 2
#define IDI_INFORMATION 32516
#define IDI_ERROR 32513
#define IDI_WARNING 32515
#define IDI_QUESTION 32514
#define IDI_SHIELD 32518
#define LVM_SETIMAGELIST 4099
#define LVM_SETTEXTCOLOR 4132
#define LVM_SETTEXTBKCOLOR 4134
#define LVM_SETEXTENDEDLISTVIEWSTYLE 4150
#define LVS_EX_GRIDLINES 1
#define LVS_EX_FULLROWSELECT 32
#define LVS_EX_DOUBLEBUFFER 65536
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
external(INT, "ImageList_Create", "ImageList_Create", "Comctl32.dll");
external(INT, "GetSystemMetrics", "GetSystemMetrics", "User32.dll");
external(INT, "ImageList_ReplaceIcon", "ImageList_ReplaceIcon", "Comctl32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
int hinstance, listview, ImageList;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 600, 500, 1, 1);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
hinstance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
listview=CreateWindow(0, "SysListView32", "", LVS_REPORT | WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 300, 200, gethwnd(0), 0, hinstance, 0);
sendmessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER, formatiw(listview)); // расширенные стили
sendmessage(LVM_SETTEXTCOLOR , 0, 255, formatiw(listview)); // цвет текста
sendmessage(LVM_SETTEXTBKCOLOR , 0, 16771237, formatiw(listview)); // цвет фона
// создание списка изображений
ImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK, 5, 1); // 5 - количество изображений
// загрузка иконок, загружаются по порядку
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_INFORMATION)); // это будет 0
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_ERROR)); // 1
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_WARNING)); // 2 и т.д.
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_QUESTION));
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_SHIELD));
// назначить список изображений
sendmessage(LVM_SETIMAGELIST, LVSIL_SMALL, ImageList, formatiw(listview));
// добавить столбцы в список
add_column(listview, 2, "Столбец3", 100, 0); // хендл ListView, индекс столбца, текст столбца, ширина столбца, индекс изображения
add_column(listview, 1, "Столбец2", 100, -1); // индекс изображения -1 значит нет изображения у пункта
add_column(listview, 0, "Столбец1", 100, 2);
// добавить строки в список
add_item(listview, "Строка4", 3); // хендл ListView, текст строки, индекс изображения
add_item(listview, "Строка3", -1); // индекс изображения -1 значит нет изображения у пункта
add_item(listview, "Строка2", 4);
add_item(listview, "Строка1", 1);
// добавить подстроки в список
add_subitem(listview, 1, 0, "Подстрока1"); // хендл ListView, индекс столбца, номер строки, текст подстроки
add_subitem(listview, 2, 0, "Подстрока2");
add_subitem(listview, 1, 1, "Подстрока3");
add_subitem(listview, 2, 1, "Подстрока4");
add_subitem(listview, 1, 2, "Подстрока5");
add_subitem(listview, 2, 2, "Подстрока6");
}
function add_column(int handle_list, int num_column, string text_column, int width_column, int image)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVCOLUMN[11];
initialarray(#LVCOLUMN[0], 0);
if(image>-1)
{
LVCOLUMN[0]=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_IMAGE;
LVCOLUMN[6]=image;
}
else LVCOLUMN[0]=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
LVCOLUMN[1]=LVCFMT_LEFT;
LVCOLUMN[2]=width_column;
LVCOLUMN[3]=address(#text_list[0]);
LVCOLUMN[5]=num_column;
sendmessage(LVM_INSERTCOLUMNA, 0, address(#LVCOLUMN[0]), formatiw(handle_list));
}
function add_item(int handle_list, string text_column, int image)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT | LVIF_IMAGE;
if(image>-1)LVITEM[7]=image;
else LVITEM[7]=-2;
LVITEM[5]=address(#text_list[0]);
sendmessage(LVM_INSERTITEMA, 0, address(#LVITEM[0]), formatiw(handle_list));
}
function add_subitem(int handle_list, int num_column, int num_string, string text_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT | LVIF_IMAGE;
LVITEM[1]=num_string;
LVITEM[2]=num_column;
LVITEM[5]=address(#text_list[0]);
sendmessage(LVM_SETITEMA, 0, address(#LVITEM[0]), formatiw(handle_list));
}
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define LVM_INSERTCOLUMNA 4123
#define LVM_INSERTITEMA 4103
#define LVM_SETITEMA 4102
#define LVCF_FMT 1
#define LVCF_WIDTH 2
#define LVCF_TEXT 4
#define LVCF_SUBITEM 8
#define LVCFMT_LEFT 0
#define LVS_REPORT 1
#define LVIF_TEXT 1
#define SM_CXSMICON 49
#define SM_CYSMICON 50
#define ILC_MASK 1
#define LVSIL_SMALL 1
#define LVCF_IMAGE 16
#define LVIF_IMAGE 2
#define IDI_INFORMATION 32516
#define IDI_ERROR 32513
#define IDI_WARNING 32515
#define IDI_QUESTION 32514
#define IDI_SHIELD 32518
#define LVM_SETIMAGELIST 4099
#define LVM_SETTEXTCOLOR 4132
#define LVM_SETTEXTBKCOLOR 4134
#define LVM_SETEXTENDEDLISTVIEWSTYLE 4150
#define LVS_EX_GRIDLINES 1
#define LVS_EX_FULLROWSELECT 32
#define LVS_EX_DOUBLEBUFFER 65536
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
external(INT, "ImageList_Create", "ImageList_Create", "Comctl32.dll");
external(INT, "GetSystemMetrics", "GetSystemMetrics", "User32.dll");
external(INT, "ImageList_ReplaceIcon", "ImageList_ReplaceIcon", "Comctl32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
int hinstance, listview, ImageList;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 600, 500, 1, 1);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
hinstance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
listview=CreateWindow(0, "SysListView32", "", LVS_REPORT | WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 300, 200, gethwnd(0), 0, hinstance, 0);
sendmessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER, formatiw(listview)); // расширенные стили
sendmessage(LVM_SETTEXTCOLOR , 0, 255, formatiw(listview)); // цвет текста
sendmessage(LVM_SETTEXTBKCOLOR , 0, 16771237, formatiw(listview)); // цвет фона
// создание списка изображений
ImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), ILC_MASK, 5, 1); // 5 - количество изображений
// загрузка иконок, загружаются по порядку
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_INFORMATION)); // это будет 0
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_ERROR)); // 1
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_WARNING)); // 2 и т.д.
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_QUESTION));
ImageList_ReplaceIcon(ImageList, -1, LoadIcon(0, IDI_SHIELD));
// назначить список изображений
sendmessage(LVM_SETIMAGELIST, LVSIL_SMALL, ImageList, formatiw(listview));
// добавить столбцы в список
add_column(listview, 2, "Столбец3", 100, 0); // хендл ListView, индекс столбца, текст столбца, ширина столбца, индекс изображения
add_column(listview, 1, "Столбец2", 100, -1); // индекс изображения -1 значит нет изображения у пункта
add_column(listview, 0, "Столбец1", 100, 2);
// добавить строки в список
add_item(listview, "Строка4", 3); // хендл ListView, текст строки, индекс изображения
add_item(listview, "Строка3", -1); // индекс изображения -1 значит нет изображения у пункта
add_item(listview, "Строка2", 4);
add_item(listview, "Строка1", 1);
// добавить подстроки в список
add_subitem(listview, 1, 0, "Подстрока1"); // хендл ListView, индекс столбца, номер строки, текст подстроки
add_subitem(listview, 2, 0, "Подстрока2");
add_subitem(listview, 1, 1, "Подстрока3");
add_subitem(listview, 2, 1, "Подстрока4");
add_subitem(listview, 1, 2, "Подстрока5");
add_subitem(listview, 2, 2, "Подстрока6");
}
function add_column(int handle_list, int num_column, string text_column, int width_column, int image)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVCOLUMN[11];
initialarray(#LVCOLUMN[0], 0);
if(image>-1)
{
LVCOLUMN[0]=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_IMAGE;
LVCOLUMN[6]=image;
}
else LVCOLUMN[0]=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
LVCOLUMN[1]=LVCFMT_LEFT;
LVCOLUMN[2]=width_column;
LVCOLUMN[3]=address(#text_list[0]);
LVCOLUMN[5]=num_column;
sendmessage(LVM_INSERTCOLUMNA, 0, address(#LVCOLUMN[0]), formatiw(handle_list));
}
function add_item(int handle_list, string text_column, int image)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT | LVIF_IMAGE;
if(image>-1)LVITEM[7]=image;
else LVITEM[7]=-2;
LVITEM[5]=address(#text_list[0]);
sendmessage(LVM_INSERTITEMA, 0, address(#LVITEM[0]), formatiw(handle_list));
}
function add_subitem(int handle_list, int num_column, int num_string, string text_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT | LVIF_IMAGE;
LVITEM[1]=num_string;
LVITEM[2]=num_column;
LVITEM[5]=address(#text_list[0]);
sendmessage(LVM_SETITEMA, 0, address(#LVITEM[0]), formatiw(handle_list));
}