Zireael |
Отправлено: 17 Ноября, 2019 - 12:58:48
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Еще почему-то кнопка пропадает
Цитата: loop()sleep(100);
// код ниже никогда не выполнится
int Coordinates_plus[4][4];
Coordinates_plus[0][0] = 10; Coordinates_plus[0][1] = 12; Coordinates_plus[0][2] = 20; Coordinates_plus[0][3] = 20;
Coordinates_plus[1][0] = 130; Coordinates_plus[1][1] = 12; Coordinates_plus[1][2] = 20; Coordinates_plus[1][3] = 20;
Coordinates_plus[2][0] = 250; Coordinates_plus[2][1] = 12; Coordinates_plus[2][2] = 20; Coordinates_plus[2][3] = 20;
Coordinates_plus[3][0] = 370; Coordinates_plus[3][1] = 12; Coordinates_plus[3][2] = 20; Coordinates_plus[3][3] = 20; |
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 13:04:41
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Еще почему-то кнопка пропадает
Цитата: loop()sleep(100);
// код ниже никогда не выполнится
int Coordinates_plus[4][4];
Coordinates_plus[0][0] = 10; Coordinates_plus[0][1] = 12; Coordinates_plus[0][2] = 20; Coordinates_plus[0][3] = 20;
Coordinates_plus[1][0] = 130; Coordinates_plus[1][1] = 12; Coordinates_plus[1][2] = 20; Coordinates_plus[1][3] = 20;
Coordinates_plus[2][0] = 250; Coordinates_plus[2][1] = 12; Coordinates_plus[2][2] = 20; Coordinates_plus[2][3] = 20;
Coordinates_plus[3][0] = 370; Coordinates_plus[3][1] = 12; Coordinates_plus[3][2] = 20; Coordinates_plus[3][3] = 20;
А что не так? Ведь всё правильно. 4 строчки(в данном случаи первая строчка будет иметь координаты начальны для +, остальные просто переставляться. |
|
|
Zireael |
Отправлено: 17 Ноября, 2019 - 13:06:46
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А что не так?
Запусти этот код:
CODE:loop()sleep(100);
// код ниже никогда не выполнится
messagebox("Сообщение"); |
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 13:37:22
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Как правильно?CODE:int aa=sendmessage(TCM_GETITEMCOUNT, 0, 0);
messagebox(aa);
(Добавление)
Вот, что вышло.Код (Отобразить)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;
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_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, 100, 15, 20, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam == Object_Button1)
{
int aa=sendmessage(TCM_GETITEMCOUNT, 0, 0);
messagebox(aa);
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]);
}
}
function getmessage (0, WM_MOVE)
{
pause(100);
}
|
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 13:45:17
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как правильно?
sendmessage принимает 4 параметра.
ОшибкаCODE:
int aa=sendmessage(TCM_GETITEMCOUNT, 0, 0, 0);
messagebox(aa);
|
|
|
Zireael |
Отправлено: 17 Ноября, 2019 - 13:52:08
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Ошибка
Естественно. Последним параметром нужно передавать указатель на окно. В скрипте же есть пример:
Цитата: sendmessage(TCM_INSERTITEMA, 1, address(#TCITEMA[0]), formatiw(Object_Tab1)); |
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 14:01:24
|
Эксперт
Покинул форум
Сообщений всего: 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;
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_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);
}
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);
}
}
}
function getmessage (0, WM_MOVE)
{
pause(100);
}
|
|
|
007wan |
Отправлено: 17 Ноября, 2019 - 14:07:44
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: А что делать если кнопки исчезают?
Обновить окно. A SetWindowPos HWND_TOPMOST Object_Button1 подойдет?(Отредактировано автором: 17 Ноября, 2019 - 14:08:13) |
|
|
|