Zireael |
Отправлено: 23 Сентября, 2019 - 14:07:46
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
ToolTip (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define TTF_SUBCLASS 16
#define TTS_BALLOON 64
#define TTM_ADDTOOLA 1028
#define CP_ACP 0
#define TTI_INFO 1
#define TTM_SETTITLEA 1056
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
int b0, b1, edit0, edit1;
int tooltip1, tooltip2;
char text_tooltip[99];
int TOOLINFO[11];
createdialog(0);
showdialog(0, "Dialog", 300, 300, 250, 200, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
b0=CreateWindow(0, "BUTTON", "Кнопка0", WS_VISIBLE | WS_BORDER | WS_CHILD, 20, 20, 80, 25, gethwnd(0), 0, 0, 0);
b1=CreateWindow(0, "BUTTON", "Кнопка1", WS_VISIBLE | WS_BORDER | WS_CHILD, 20, 65, 80, 25, gethwnd(0), 0, 0, 0);
edit0=CreateWindow(0, "EDIT", "Edit0", WS_VISIBLE | WS_BORDER | WS_CHILD, 130, 20, 70, 20, gethwnd(0), 0, 0, 0);
edit1=CreateWindow(0, "EDIT", "Edit1", WS_VISIBLE | WS_BORDER | WS_CHILD, 130, 65, 70, 20, gethwnd(0), 0, 0, 0);
tooltip1=CreateWindow(0, "tooltips_class32", "", TTS_BALLOON, 0, 0, 0, 0, gethwnd(0), 0, 0, 0);
tooltip2=CreateWindow(0, "tooltips_class32", "", 0, 0, 0, 0, 0, gethwnd(0), 0, 0, 0);
initialarray(#TOOLINFO[0], 0);
TOOLINFO[0]=44;
TOOLINFO[1]=TTF_SUBCLASS;
TOOLINFO[9]=address(#text_tooltip[0]);
// tooltip для кнопки0
TOOLINFO[2]=b0; // хендл контрола, у которого будет tooltip
TOOLINFO[6]=80; // размер котрола по X
TOOLINFO[7]=25; // размер контрола по Y
strcpy(#text_tooltip[0], "Кнопка0");
sendmessage(TTM_ADDTOOLA, 0, address(#TOOLINFO[0]), formatiw(tooltip1));
// tooltip для кнопки1
TOOLINFO[2]=b1;
TOOLINFO[6]=80;
TOOLINFO[7]=25;
strcpy(#text_tooltip[0], "Кнопка1");
sendmessage(TTM_ADDTOOLA, 0, address(#TOOLINFO[0]), formatiw(tooltip1));
// tooltip для эдит0
TOOLINFO[2]=edit0;
TOOLINFO[6]=70;
TOOLINFO[7]=20;
strcpy(#text_tooltip[0], "Эдит0");
sendmessage(TTM_ADDTOOLA, 0, address(#TOOLINFO[0]), formatiw(tooltip2));
// tooltip для эдит1
TOOLINFO[2]=edit1;
TOOLINFO[6]=70;
TOOLINFO[7]=20;
strcpy(#text_tooltip[0], "Эдит1");
sendmessage(TTM_ADDTOOLA, 0, address(#TOOLINFO[0]), formatiw(tooltip2));
strcpy(#text_tooltip[0], "Заголовок");
sendmessage(TTM_SETTITLEA, TTI_INFO, address(#text_tooltip[0]), formatiw(tooltip1));
}
Исправил под ansi, что с юникодом не играться. |
|
|
007wan |
Отправлено: 23 Сентября, 2019 - 14:23:15
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Исправил под ansi, что с юникодом не играться. Без юникода нельзя заголовки встыкать с иконкамиCODE:strcpy(#Text_Tooltip[0], "Внимание!");
sendmessage(TTM_SETTITLE, TTI_WARNING, address(#Text_Tooltip[0]), formatiw(Object_Tooltip1));
strcpy(#Text_Tooltip[0], "Эта опция сильно нагружает слабые комптютеры.");
sendmessage(TTM_ADDTOOLA, 0, address(#TOOLINFO[0]), formatiw(Object_Tooltip1));
(Добавление)
Ой, в примере же есть, тьфу) не увидел
(Добавление)
А можно ли, что бы этот тултип при наведении сразу появлялся, а не с задержкой+Появлялся на курсоре мышке.Нужны эти константы, плиз (Отобразить) Цитата:
TTI_INFO_LARGE
Large error Icon
TTI_WARNING_LARGE
Large error Icon
TTI_ERROR_LARGE
Large error Icon
TTF_ABSOLUTE
Positions the tooltip window at the same coordinates provided by TTM_TRACKPOSITION. This flag must be used with the TTF_TRACK flag.
TTF_CENTERTIP
Centers the tooltip window below the tool specified by the uId member.
TTF_IDISHWND
Indicates that the uId member is the window handle to the tool. If this flag is not set, uId is the tool's identifier.
TTF_PARSELINKS
Version 6.0 and later. Indicates that links in the tooltip text should be parsed.
Note that Comctl32.dll version 6 is not redistributable but it is included in Windows or later. To use Comctl32.dll version 6, specify it in a manifest. For more information on manifests, see Enabling Visual Styles.
TTF_RTLREADING
Indicates that the tooltip text will be displayed in the opposite direction to the text in the parent window.
TTF_SUBCLASS
Indicates that the tooltip control should subclass the tool's window to intercept messages, such as WM_MOUSEMOVE. If this flag is not set, you must use the TTM_RELAYEVENT message to forward messages to the tooltip control. For a list of messages that a tooltip control processes, see TTM_RELAYEVENT.
TTF_TRACK
Positions the tooltip window next to the tool to which it corresponds and moves the window according to coordinates supplied by the TTM_TRACKPOSITION messages. You must activate this type of tool using the TTM_TRACKACTIVATE message.
TTF_TRANSPARENT
Causes the tooltip control to forward mouse event messages to the parent window. This is limited to mouse events that occur within the bounds of the tooltip window.
(Отредактировано автором: 23 Сентября, 2019 - 14:23:34) |
|
|
Zireael |
Отправлено: 23 Сентября, 2019 - 14:47:31
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Нужны эти константы
CODE:#define TTI_INFO_LARGE 4
#define TTI_WARNING_LARGE 5
#define TTI_ERROR_LARGE 6
#define TTF_ABSOLUTE 128
#define TTF_CENTERTIP 2
#define TTF_IDISHWND 1
#define TTF_PARSELINKS 4096
#define TTF_RTLREADING 4
#define TTF_SUBCLASS 16
#define TTF_TRACK 32
#define TTF_TRANSPARENT 256 |
|
|
007wan |
Отправлено: 23 Сентября, 2019 - 15:10:48
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: #define TTI_INFO_LARGE 4
#define TTI_WARNING_LARGE 5
#define TTI_ERROR_LARGE 6
#define TTF_ABSOLUTE 128
#define TTF_CENTERTIP 2
#define TTF_IDISHWND 1
#define TTF_PARSELINKS 4096
#define TTF_RTLREADING 4
#define TTF_SUBCLASS 16
#define TTF_TRACK 32
#define TTF_TRANSPARENT 256 Ничего из этого не работает. Ну пофиг.
-----
CODE:#define TTM_SETTIPBKCOLOR 4281495512
SendMessage(Object_Tooltip1, TTM_SETTIPBKCOLOR, 255, 0);//Изменить фон на красный подсказки
TTM_SETTIPTEXTCOLOR пока не нашел константу, но такой же алгоритм как и у фона. |
|
|
Zireael |
Отправлено: 23 Сентября, 2019 - 15:15:39
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: TTM_SETTIPTEXTCOLOR пока не нашел константу
CODE:#define TTM_SETTIPTEXTCOLOR 1044
sendmessage(TTM_SETTIPTEXTCOLOR, 255, 0, formatiw(tooltip1)); // красный текст
CODE:#define TTM_SETTIPBKCOLOR 1043
sendmessage(TTM_SETTIPBKCOLOR, 65280, 0, formatiw(tooltip1)); // зеленый фон (Отредактировано автором: 23 Сентября, 2019 - 15:17:32) |
|
|
Zireael |
Отправлено: 23 Сентября, 2019 - 15:22:40
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А можно ли, что бы этот тултип при наведении сразу появлялся, а не с задержкой
CODE:#define TTM_SETDELAYTIME 1027
#define TTDT_INITIAL 3
sendmessage(TTM_SETDELAYTIME, TTDT_INITIAL, 0, formatiw(tooltip1));
// lparam отвечает за количество мсек, через которые появится подсказка. |
|
|
007wan |
Отправлено: 23 Сентября, 2019 - 15:30:06
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Вау, КРУТО!)
(Добавление)
Значит остается ждать только ThreeView и всё)
---
Вопросик по ListView: Можно дать текст и фон не всем строчкам, а только одной и в любом порядке?
---Думаю после этого, придется закрыть тему, закрыть в том всмысле, что по вопросам создания, а обсуждать еще много чего)))
(Добавление)
Файл констант. Всего: 352 шт(Повторения удалены).
Constants.txt
Сразу скажу, я делал все эти константы не с разных тем и полны коснтанты, а разные константы с тем, но обрывками, например, с одной теме "STATIC Style", я брал не все константы, а обрывками и частично. Некоторые константы я вообще не могу найти
или не мог. Тут наиболее нужные. Скажите, стоит мне это дальше выкладывать или это никому не нужно?
(Добавление)
007wan пишет: Вопросик по ListView: Можно дать текст и фон не всем строчкам, а только одной и в любом порядке? Либо если можно как-то пометить разные строки и буквы по разному, либо сгодиться, что можно на разные строчки разные изображения выводить, причем не абы как бы, а просто, например, в первую колонку для каждой строчки изображения, но изображение не должно быть во второй колонке, ни в какой строчке, а всё только в первой колонке и по любую строчку.
Код (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define LVM_INSERTCOLUMN 4193
#define LVM_INSERTITEM 4173
#define LVM_SETITEM 4172
#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 CP_ACP 0
#define LVM_SETEXTENDEDLISTVIEWSTYLE 4150
#define LVM_SETCOLUMNWIDTH 4126
#define LVSCW_AUTOSIZE_USEHEADER -2
#define LVS_EX_GRIDLINES 1
#define LVS_EX_CHECKBOXES 4
#define LVS_EX_FULLROWSELECT 32
#define LVS_EX_DOUBLEBUFFER 65536
#define LVM_SETTEXTCOLOR 4132
#define LVM_SETTEXTBKCOLOR 4134
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "CreateWindowEx", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, listview;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 600, 500, 1, 1);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
listview=CreateWindow(0, "SysListView32", 0, WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_REPORT, 10, 10, 200, 200, gethwnd(0), 0, histance, 0, 0);
sendmessage(LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER, formatiw(listview)); // расширенные стили
add_column(listview, 1, "Событие", 100);//поменять с 300 на 100 или меньше 200 и двигать грань
add_column(listview, 0, "Дата/Время", 100);
add_item(listview, "22.09.2019/11:27");
add_subitem(listview, 1, 0, "Бот остановлен. Причина: Окно игры не найдено.");
add_item(listview, "22.09.2019/11:28");
add_subitem(listview, 1, 0, "Текст");
sendmessage(LVM_SETCOLUMNWIDTH, 1, LVSCW_AUTOSIZE_USEHEADER, formatiw(listview));
//sendmessage(LVM_SETTEXTCOLOR , 0, 255, formatiw(listview)); // цвет текста
//sendmessage(LVM_SETTEXTBKCOLOR , 0, 65280, formatiw(listview)); // цвет фона
}
function add_column(int handle_list, int num_column, string text_column, int width_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVCOLUMN[11];
initialarray(#LVCOLUMN[0], 0);
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;
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_INSERTCOLUMN, 0, address(#LVCOLUMN[0]), formatiw(handle_list));
}
function add_item(int handle_list, string text_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT;
LVITEM[5]=address(#text_list[0]);
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_INSERTITEM, 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;
LVITEM[1]=num_string;
LVITEM[2]=num_column;
LVITEM[5]=address(#text_list[0]);
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_SETITEM, 0, address(#LVITEM[0]), formatiw(handle_list));
}
function ansi_unicode(string S, char #cc, int size_cc)
{
int count=MultiByteToWideChar(1251, CP_ACP, S, size(S), address(#cc[0]), size_cc);
cc[count*2]=0; cc[count*2+1]=0;
}
(Добавление)
Тогда можно будет вывести красные прямоугольник или зеленый и тогда сразу будет понятно что к чему.
(Добавление)
По логике нужно TVM_INSERTITEM message, но блин не успеваю сделать.
Код (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define WS_CHILD 1073741824
#define GWL_HINSTANCE -6
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, Three;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 400, 500, 1, 1);
loop()
{
sleep(10);
}
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
Three=CreateWindow(0, "SysTreeView32", "", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 310, 100, gethwnd(0), 0, histance, 0, 0);
}
Tree View
Нашел еще вкусные константы Win32Constants.cs |
|
|
Zireael |
Отправлено: 24 Сентября, 2019 - 11:09:19
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как вывести такую кнопку на диалог,рядом с закрыть?
CODE:#define WS_EX_CONTEXTHELP 1024
#define WS_MINIMIZEBOX 131072
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, GetWindowLong(gethwnd(0), GWL_STYLE) + WS_MINIMIZEBOX);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) - WS_EX_CONTEXTHELP);
} |
|
|
|