Zireael |
Отправлено: 17 Ноября, 2019 - 14:14:48
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А что делать если кнопки исчезают?
Обновить окно.
Или сначала кнопки создать, потом таб.
Цитата: function getmessage(0, WM_CREATE)
{
Object_Tab1 = CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 380, 150, gethwnd(0), 0, 0, 0);
Object_Button1 = CreateWindow(0, "BUTTON", "+", WS_VISIBLE | WS_CHILD, 10, 12, 20, 20, gethwnd(0), 0, 0, 0);
Object_Button2 = CreateWindow(0, "BUTTON", "õ", WS_VISIBLE | WS_CHILD, 370, 12, 20, 20, gethwnd(0), 0, 0, 0);
}
CODE:function getmessage(0, WM_CREATE)
{
Object_Button1 = CreateWindow(0, "BUTTON", "+", WS_VISIBLE | WS_CHILD, 10, 12, 20, 20, gethwnd(0), 0, 0, 0);
Object_Button2 = CreateWindow(0, "BUTTON", "õ", WS_VISIBLE | WS_CHILD, 370, 12, 20, 20, gethwnd(0), 0, 0, 0);
Object_Tab1 = CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 380, 150, gethwnd(0), 0, 0, 0);
} |
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 14:28:56
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Спасибо, а можно константу СЭТ_ИТЭМКУРСЕЛ?
Пока так сейчаскод (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define TCIF_TEXT 1
#define TCIF_IMAGE 2
#define TCM_INSERTITEMA 4871
#define TCM_SETIMAGELIST 4867
#define IMAGE_ICON 1
#define ILC_MASK 1
#define LVSIL_SMALL 1
#define ILC_COLOR32 32
#define IMAGE_ICON 1
#define LR_LOADFROMFILE 16
#define IDI_INFORMATION 32516
#define IDI_WARNING 32515
#define IDI_SHIELD 32518
#define RUSSIAN_CHARSET 204
#define TCM_INSERTITEM 4871
#define TCM_GETITEMCOUNT 4868
#define TCM_DELETEITEM 4872
#define TCM_GETCURSEL 4875
#define TCM_SETITEMA 4870
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "LoadImage", "LoadImageA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "ImageList_Create", "ImageList_Create", "Comctl32.dll");
external(INT, "ImageList_ReplaceIcon", "ImageList_ReplaceIcon", "Comctl32.dll");
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "MoveWindow", "MoveWindow", "User32.dll");
string text_tab[3] = {"Новая вкладка", "Новая вкладка"};
char text_tab_c[99];
int TCITEMA[7] = {TCIF_TEXT | TCIF_IMAGE, 0, 0, address(#text_tab_c[0]), size(#text_tab_c[0]), 0, 0}
int Object_Tab1;
int Object_Button1;
int Object_Button2;
int Selected_Tab;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 450, 300, 1, 1);
int Coordinates_plus[4];
Coordinates_plus[0] = 10; Coordinates_plus[1] = 12; Coordinates_plus[2] = 20; Coordinates_plus[3] = 20;
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
Object_Button1 = CreateWindow(0, "BUTTON", "+", WS_VISIBLE | WS_CHILD, 10, 12, 20, 20, gethwnd(0), 0, 0, 0);
Object_Button2 = CreateWindow(0, "BUTTON", "x", WS_VISIBLE | WS_CHILD, 370, 12, 20, 20, gethwnd(0), 0, 0, 0);
Object_Tab1 = CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 380, 150, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam == Object_Button1)
{
strcpy(#text_tab_c[0], text_tab[1]);
TCITEMA[5]=1;
sendmessage(TCM_INSERTITEMA, 1, address(#TCITEMA[0]), formatiw(Object_Tab1));
Coordinates_plus[0] = Coordinates_plus[0]+120;
MoveWindow(Object_Button1, Coordinates_plus[0], Coordinates_plus[1], Coordinates_plus[2], Coordinates_plus[3]);
if (sendmessage(TCM_GETITEMCOUNT, 0, 0, formatiw(Object_Tab1)) == 2)
{
MoveWindow(Object_Button1, 0, 0, 0, 0);
}
}
if (message.lparam == Object_Button2)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
sendmessage(TCM_DELETEITEM, Selected_Tab, 0, formatiw(Object_Tab1));
Coordinates_plus[0] = Coordinates_plus[0]-120;
MoveWindow(Object_Button1, Coordinates_plus[0], Coordinates_plus[1], Coordinates_plus[2], Coordinates_plus[3]);
}
}
function getmessage (0, WM_MOVE)
{
pause(100);
}
(Добавление)
Нашел там же. Вроде копировал уже, пропала... из кода...
(Добавление)
Zireael , Скажите, пожалуйста, А как переименовать вкладку у Таба? |
|
|
Zireael |
Отправлено: 17 Ноября, 2019 - 15:20:01
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: как переименовать вкладку у Таба?
CODE:#define TCM_SETITEMA 4870 |
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 15:27:42
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: как переименовать вкладку у Таба?
CODE:#define TCM_SETITEMA 4870 Не, а как использовать? Там же придется новый буфер и текст создавать?
(Добавление)
---
Как можно получить выбранную вкладку, не используя костыли типа этих?CODE:getmouse(Mouse_x, Mouse_y);
if(WindowFromPoint(Mouse_x, Mouse_y) == Object_Tab1)
{
if(getkeystate(1) || getkeystate(2) || getkeystate(4))
{
Selected_Tab1 = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
}
} Может как-то через WM |
|
|
Zireael |
Отправлено: 17 Ноября, 2019 - 15:30:51
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Там же придется новый буфер и текст создавать?
Не нужно. Просто скопировать в буфер новый текст вкладки.
Цитата: size(#text_tab_c[0])
Исправить на sizearray(text_tab_c).
Цитата: Как можно получить выбранную вкладку
CODE:#define TCM_GETCURSEL 4875 |
|
|
Zireael |
Отправлено: 17 Ноября, 2019 - 16:05:13
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Отловить событие, когда нажали на вкладку, а значит получаем номер её.
CODE:#define TCM_GETCURSEL 4875
#define NM_CLICK -2
#define TCN_SELCHANGE -551
function getmessage(0, WM_NOTIFY)
{
if(addressi(message.lparam)==Object_Tab1)
{
if(addressi(message.lparam+8)==NM_CLICK || addressi(message.lparam+8)==TCN_SELCHANGE)
{
// current_item=sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1)); // узнать номер текущей вкладки
return;
}
}
} |
|
|
|