ivantu |
Отправлено: 28 Сентября, 2019 - 13:41:15
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Что то ошибку выбивает, какой то хитрый формат Ico ?
Спойлер (Отобразить)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
#define LR_LOADFROMFILE 16
#define IMAGE_ICON 1
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, LoadImage(0, "D:\111.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE));
//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 |
Отправлено: 28 Сентября, 2019 - 14:35:00
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Помогите пожалуйста решить задачку!
Существует диалог 1 и диалог 2.
При открытии диалога 2 через меню делает диалог1 неактивным(EnableWindow(formatwi(MainWindow), 0)), а потом его закрытии у меня почему-то если диалог1 находится в верхнем z-порядке, то уничтожается диалог2 и диалог 1 почему-то скрывается на секунду, а потом появляется использую кодCODE:SetWindowPos(gethwnd(0), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
Цитата: SWP_NOZORDER//не помогли
SWP_NOOWNERZORDER
HWND_TOP
Я по экспериментировал даже со всеми константами, ничего.
суть в том, что если будет присутствовать флаг SWP_NOACTIVATE, то при уничтожении диалога2, диалог 1 будет скрываться в нижний z-порядок, хотя он был на фоне браузера, а без флага SWP_NOACTIVATE, он так же скрывает на секунду, но потом его активирует, изначально оба диалога были в самой верхней z-последовательности(порядке), но диалог 2 был на фоне диалога1, а потом диалога 1 пропадает на секунду.
(Добавление)
Zireael , Как в ThreeView сделать так, что бы при запуске кода всё меню было уже раскрытым? И всё плюсики были минусами
(Добавление)
и как обрабатывать сообщения когда выбрана вкладка? |
|
|
Zireael |
Отправлено: 28 Сентября, 2019 - 17:30:21
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как в ThreeView сделать так, что бы при запуске кода всё меню было уже раскрытым?
Цитата: #define TVM_EXPAND 4354
#define TVE_EXPAND 2
sendmessage(TVM_EXPAND, TVE_EXPAND... // дописать остальное
Цитата: как обрабатывать сообщения когда выбрана вкладка?
WM_NOTIFY |
|
|
007wan |
Отправлено: 28 Сентября, 2019 - 17:44:54
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: // дописать остальное Это специально, что бы типа на готовое не лез?)
CODE:sendmessage(TVM_EXPAND, TVE_EXPAND, MyComp, formatiw(TreeView));
sendmessage(TVM_EXPAND, TVE_EXPAND, diskC, formatiw(TreeView));
Спасибо. |
|
|
Nikanr |
Отправлено: 28 Сентября, 2019 - 20:13:06
|
Специалист
Покинул форум
Сообщений всего: 231
Дата рег-ции: Март 2019
Репутация: 5
|
Как можно удалить строку из лист бокса?
Код (Отобразить)
CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_SETCURSEL 390
#define WS_VSCROLL 2097152
#define LB_DELETESTRING 61826
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list;
createdialog(0);
showdialog(0, "диал",100, 100, 300, 300, 1, 1);
for (int h=0; h<25; h++){
add_list(format(h));
}
sendmessage(LB_DELETESTRING, 0, 1, formatiw(list));
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL, 10, 10, 100, 200, gethwnd(0), 0, 0, 0);
}
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;
}
Видимо как-то не правильно использую LB_DELETESTRING
(Добавление)
Константы тут брал:(для просмотра ссылки Вам необходимо авторизоваться) |
|
|
Zireael |
Отправлено: 28 Сентября, 2019 - 20:17:54
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как можно удалить строку из лист бокса?
CODE:#define LB_DELETESTRING 386
sendmessage(LB_DELETESTRING, 2, 0, formatiw(list)); // удалит третью строку |
|
|
Zireael |
Отправлено: 28 Сентября, 2019 - 21:31:17
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Статик бы ещё
RichEdit в виде статика (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define CFM_COLOR 1073741824
#define SCF_ALL 4
#define EM_SETBKGNDCOLOR 1091
#define EM_SETCHARFORMAT 1092
#define COLOR_3DFACE 15
external(INT, "EnableWindow", "EnableWindow", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadLibrary", "LoadLibraryA", "Kernel32.dll");
external(INT, "GetSysColor", "GetSysColor", "User32.dll");
LoadLibrary("Msftedit.dll");
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int CHARFORMAT[15];
int edit1, edit2, edit3;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 200, 200, 1, 1);
loop()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
SetWindowText(edit1, "Час: "+format(Hour));
SetWindowText(edit2, "Минуты: "+format(Minute));
SetWindowText(edit3, "Секунды: "+format(Second));
sleep(100);
}
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "RICHEDIT50W", "", WS_VISIBLE | WS_CHILD, 10, 10, 80, 25, gethwnd(0), 0, 0, 0);
edit2=CreateWindow(0, "RICHEDIT50W", "", WS_VISIBLE | WS_CHILD, 10, 35, 80, 25, gethwnd(0), 0, 0, 0);
edit3=CreateWindow(0, "RICHEDIT50W", "", WS_VISIBLE | WS_CHILD, 10, 60, 80, 25, gethwnd(0), 0, 0, 0);
EnableWindow(edit1, 0);
EnableWindow(edit2, 0);
EnableWindow(edit3, 0);
initialarray(#CHARFORMAT[0], 0);
CHARFORMAT[0]=60;
CHARFORMAT[1]=CFM_COLOR;
sendmessage(EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE), formatiw(edit1)); // цвет фона
CHARFORMAT[5]=255; // цвет шрифта (красный)
sendmessage(EM_SETCHARFORMAT, SCF_ALL, address(#CHARFORMAT[0]), formatiw(edit1)); // парметры шрифта, в данном примере только цвет задан
CHARFORMAT[5]=16000000; // цвет шрифта (синий)
sendmessage(EM_SETCHARFORMAT, SCF_ALL, address(#CHARFORMAT[0]), formatiw(edit2));
CHARFORMAT[5]=12401791; // цвет шрифта (фиолетовый)
sendmessage(EM_SETCHARFORMAT, SCF_ALL, address(#CHARFORMAT[0]), formatiw(edit3));
}
RichEdit в виде статика2 (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define CFM_COLOR 1073741824
#define SCF_ALL 4
#define EM_SETBKGNDCOLOR 1091
#define EM_SETCHARFORMAT 1092
#define COLOR_3DFACE 15
#define SCF_SELECTION 1
#define EM_EXSETSEL 1079
#define EM_HIDESELECTION 1087
external(INT, "EnableWindow", "EnableWindow", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadLibrary", "LoadLibraryA", "Kernel32.dll");
external(INT, "GetSysColor", "GetSysColor", "User32.dll");
LoadLibrary("Msftedit.dll");
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int CHARFORMAT[15];
int edit1, edit2;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 300, 200, 1, 1);
loop()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
// установить текст в edit
// передаём хендл и текст
SetEditText(edit1, "Час: "+format(Hour)+" Минуты: "+format(Minute)+" Секунды: "+format(Second));
sleep(100);
}
function SetEditText(int handle, string s)
{
SetWindowText(handle, s);
if(handle==edit1)
{
color_text("\d+", 255, handle, s); // все числа в красный цвет
color_text("[a-zA-Zа-яА-ЯёЁ]+", 16000000, handle, s); // все буквы в синий
return;
}
if(handle==edit2)
{
color_text("^\d+.\d+.\d+", 6006046, handle, s); // дату вначале строки в зелёный цвет
color_text("(?<= ).+", 12533122, handle, s); // весь текст после пробела в фиолетовый
return;
}
}
function getmessage(0, WM_CREATE)
{
edit1=CreateWindow(0, "RICHEDIT50W", "", WS_VISIBLE | WS_CHILD, 10, 10, 250, 25, gethwnd(0), 0, 0, 0);
edit2=CreateWindow(0, "RICHEDIT50W", "", WS_VISIBLE | WS_CHILD, 10, 40, 200, 25, gethwnd(0), 0, 0, 0);
EnableWindow(edit1, 0);
EnableWindow(edit2, 0);
initialarray(#CHARFORMAT[0], 0);
CHARFORMAT[0]=60;
CHARFORMAT[1]=CFM_COLOR;
sendmessage(EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE), formatiw(edit1)); // цвет фона для RicHEdit в цвет фона диалога
sendmessage(EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE), formatiw(edit2));
sendmessage(EM_HIDESELECTION, 1, 0, formatiw(edit1));
// установить текст в edit
// передаём хендл и текст
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
SetEditText(edit2, format(Day)+"."+format(Month)+"."+format(Year)+" Какой-то текст 12345");
}
function color_text(string text, int color, int handle_edit, string s)
{
char text_edit[999];
string text_find[999];
int CHARRANGE[2], Pos_start[999], Pos_end[999];
strcpy(#text_edit[0], s);
int count=regexsearch(sizearray(text_find), #text_find[0], format(#text_edit[0]), text);
if(count)
{
regexstart(#Pos_start[0]); regexend(#Pos_end[0]); CHARFORMAT[5]=color;
for(int i=0; i<count; i++)
{
CHARRANGE[0]=Pos_start[i]; CHARRANGE[1]=Pos_end[i];
sendmessage(EM_EXSETSEL, 0, address(#CHARRANGE[0]), formatiw(handle_edit)); // исправить на handle
sendmessage(EM_SETCHARFORMAT, SCF_SELECTION, address(#CHARFORMAT[0]), formatiw(handle_edit));
}
}
}
(Добавление)
Цитата: А как отследить клик мыши по пункту списка и вернуть его номер с помощью LB_GETCURSEL?
ListBox, узнать номер выбранной строки (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define LB_ADDSTRING 384
#define LB_SETCURSEL 390
#define WS_VSCROLL 2097152
#define LB_DELETESTRING 386
#define LB_GETCURSEL 392
#define LBS_NOTIFY 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int list;
int current_item=0;
createdialog(0);
showdialog(0, "диал",100, 100, 300, 300, 1, 1);
for (int h=0; h<25; h++){
add_list(format(h));
}
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
list=CreateWindow(0, "LISTBOX", "", LBS_NOTIFY | WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL, 10, 10, 100, 200, gethwnd(0), 0, 0, 0);
}
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_item=sendmessage(LB_GETCURSEL, 0, 0, formatiw(list));
textout(0, 250, 200, "Выбран пункт: "+format(current_item), 1);
}
} |
|
|
|