Zireael |
Отправлено: 26 Сентября, 2019 - 03:16:59
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как в 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));
} |
|
|
007wan |
Отправлено: 26 Сентября, 2019 - 07:22:19
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Я пока не пробовал код,но сразу виду, что [code#]define IDI_WARNING 32515[/code]
Иконки и все разнобразнее можно делать строчки наконец-то,например, ошибка в работе кода или бота можно обозначить иконкой "ошибка", что бы пользователь среди унылого текста не искал проблему,а идентифицировал по иконке мгновенно, не читая.
(Добавление)
Спасибо большое! не удержался, всё таки проверил утром))Zireael , Спасибо!!! Жаль, что я на качество не буду жаловаться, потому что именно таким оно задумывалось(создание листвиев) |
|
|
ivantu |
Отправлено: 26 Сентября, 2019 - 08:08:53
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Zireael пишет: ListView + ImageList (Отобразить)
Спасибо огроменное, без Вас вряд ли разобрались бы , сейчас буду разбираться как свое изображение добавить.
(Добавление)
Пытаюсь картинку подцепить из файла, добавил :
external(INT, "LoadImage", "LoadImageA", "User32.dll"
и изменил назначение картинки
// загрузка иконок, загружаются по порядку
ImageList_ReplaceIcon(ImageList, -1, LoadImage(0, "C:\kibor_set\1111\img\close.bmp",0, 25, 25, 10)); // это будет 0
Спойлер (Отобразить)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");
external(INT, "LoadImage", "LoadImageA", "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, 400, 400, 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, LoadImage(0, "C:\kibor_set\1111\img\close_shop_yes.bmp",0, 25, 25, 10)); // это будет 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", 0);
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));
} |
|
|
007wan |
Отправлено: 26 Сентября, 2019 - 10:53:18
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
ivantu пишет: Пытаюсь картинку подцепить из файла Да ну это геморой, я лично не буду ListBox заменять на ListView
(Добавление)
Не подскажите, пожалуйста как создать справку Win Help? Я не хочу снова писать код на языке ручками, может есть какой-то визуальный редактор для этого всего, что бы создавать помощников Win help?
(Добавление)
Zireael , Спасибо за контролы!) и за старания! Если еще будет последний контрол ThreeView, то можно в Готовые скрипты выложить код, в котором будет создание диалога со всеми возможными контролами, что бы новичкам не искать по форуму, потому что и так не найдет) |
|
|
Zireael |
Отправлено: 27 Сентября, 2019 - 11:08:18
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: отключать кнопки "закрыть" ?
CODE:#define GCL_STYLE -26
#define CS_NOCLOSE 512
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetClassLong", "SetClassLongA", "User32.dll" );
external(INT, "GetClassLong", "GetClassLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 0);
loop()sleep(10);
function getmessage (0, WM_CREATE)
{
SetClassLong(gethwnd(0), GCL_STYLE, GetClassLong(gethwnd(0), GCL_STYLE) | CS_NOCLOSE);
} |
|
|
007wan |
Отправлено: 27 Сентября, 2019 - 16:18:10
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Подскажите, пожалуйста, я еще пока не совсем разобрался с окнами, а точнее поверхностности перед всеми.
Код (Отобразить)CODE:function Window_Topmost(string Action)
{
Load_Settings();
MainWindow = window("диалог1");
SecondaryWindow = window("диалог2");
if (Action == "Start_Program")
{
if (Load_Checkbox[4] == 1)
{
SetWindowPos(gethwnd(0), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
}
//=====================
if (Action == "Open_Settings")
{
if (Load_Checkbox[4] == 1)
{
SetWindowPos(gethwnd(0), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
SetWindowPos(gethwnd(1), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
else
{
SetWindowPos(gethwnd(0), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
SetWindowPos(gethwnd(1), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE);
}
}
//=====================
if (Action == "Close_Settings")
{
if (Load_Checkbox[4] == 1)
{
SetWindowPos(gethwnd(0), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
else
{
SetWindowPos(gethwnd(0), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
}
}
} При выполнении условия Action == "Close_Settings", он делает окно поверх или нет(в зависимости от загруженного значения из файла), а потом активирует окно, но проблема в том, что без флага SWP_NOACTIVATE, когда этот диалог1 находится на фоне другого окна(например, мазилы), то при закрытии настроек(выполнении условия), он почему-то неактивирует окно, даже делает его не поверх всех, т.е при закрытии настроек диалог был на фоне мазилы, а потом резко пропадает, SWP_NOACTIVATE работает так, что он не активирует окно, и скрывает его в конец за мазилу, а если убрать флаг SWP_NOACTIVATE, то он будет активировать окно, даже когда оно уже активно, что не приятно видеть. Может это как-то связано с Z-послекдовательностью?
(Добавление)
Тоесть когда есть SWP_NOACTIVATE, он скрывает моё окно, когда оно на фоне другой программы или браузера, а когда флага нету, то активирует окно, даже когда оно скрыто, а мне нужно, что бы было так:
активирует окно, если оно скрыто, если не скрыто - не активировать(скрытно - имеется ввиду на заднем плане или за каким-то окном).
без флага SWP_NOACTIVATE, что бы он не скрывал окно, а только его неактивировал. |
|
|
|