Zireael |
Отправлено: 18 Ноября, 2019 - 07:58:03
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Ошибка я думаю в Text_Tab
И для кого это написано:
Цитата: Работают также как TCM_INSERTITEMA. |
|
|
007wan |
Отправлено: 18 Ноября, 2019 - 08:02:57
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Ошибка я думаю в Text_Tab
И для кого это написано:
Цитата: Работают также как TCM_INSERTITEMA.
Чё за бред) Мне нужно текст получить. Так?
CODE:string a=sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(Object_Tab1));
messagebox(a);
(Добавление)
Цитата: TCM_GETITEM сообщение
2 минуты на чтение
Получает сведения о вкладке в элементе управления tab. Это сообщение можно отправить явно или с помощью макроса TabCtrl_GetItem.
Параметры
wParam
Индекс вкладки.
lParam
Указатель на структуру TCITEM, которая задает информацию для извлечения и получает сведения о вкладке. При отправке сообщения элемент mask указывает, какие атрибуты следует возвращать. Если элемент mask задает значение TCIF_TEXT, то элемент pszText должен содержать адрес буфера, который получает текст элемента, а элемент cchTextMax должен указывать размер буфера.
(Добавление)
Не получается. Что бы получить текст из вкладки по индексу нужно новый адрес создать или скопировать в уже имеющиеся?
(Добавление)
А как с помощью этого узнать ширину ВСЕХ вкладок?
Полагаю нужно сделать цикл.
CODE:
int Width_Tabs;
for (int g=0; g<Count_Tabs; g++)
{
sendmessage(TCM_GETITEMRECT, g, address(#Rect_Tab[0]), formatiw(Object_Tab1));
Wigth_Tabs = Wigth_Tabs + (Rect_Tabs[0]-Rect_Tabs[2]);//Правильно?
}
Wigth_Tabs = Rect_Tabs[0]-Rect_Tabs[2];//Ширина одной вкладки в данном случаи по индексу 0
По идеи правильно, если не ошибаюсь. Он должен получать сколько всего вкладок и начиная с первой получать ширину вкладки, потом второй если есть и основываясь на этом выводить "+" рядышком. |
|
|
Zireael |
Отправлено: 18 Ноября, 2019 - 10:43:19
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define TCS_HOTTRACK 64
#define TCIF_TEXT 1
#define TCM_INSERTITEMA 4871
#define TCM_GETITEMA 4869
#define TCM_SETITEMA 4870
#define TCM_GETITEMRECT 4874
#define TCM_GETITEMCOUNT 4868
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
int tab;
char text[99];
int TCITEMA[7]={TCIF_TEXT, 0, 0, address(#text[0]), sizearray(text), 0, 0}
createdialog(0);
showdialog(0, "Dialog", 100, 100, 400, 300, 1, 1);
messagebox("Через 2 секунды узнаем текст второй вкладки");
pause(2000);
sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(tab)); // текст второй вкладки
messagebox("Текст второй вкладки: "+format(#text[0]));
strcpy(#text[0], "Новый текст");
sendmessage(TCM_SETITEMA, 1, address(#TCITEMA[0]), formatiw(tab)); // изменить текст второй вкладки
messagebox("Текст вкладки изменён");
int rect[4];
sendmessage(TCM_GETITEMRECT, 1, address(#rect[0]), formatiw(tab)); // координаты второй вкладки относительно таба
messagebox("Координаты вкладки относительно таба: "+format(rect[0])+" "+
format(rect[1])+" "+format(rect[2])+" "+format(rect[3]));
messagebox("Ширина вкладки: "+format(rect[2]-rect[0])+formatic(13)+formatic(10)+"Высота вкладки: "+format(rect[3]-rect[1]));
int count_item=sendmessage(TCM_GETITEMCOUNT, 0, 0, formatiw(tab));
sendmessage(TCM_GETITEMRECT, count_item-1, address(#rect[0]), formatiw(tab));
messagebox("Конечная коорданата X последней вкладки относительно таба: "+format(rect[2]));
messagebox("Конечная коорданата X последней вкладки относительно окна: "+format(rect[2]+50)); // 50 это начальная координата X таба на диалоге
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
tab=CreateWindow(0, "SysTabControl32", "", TCS_HOTTRACK | WS_VISIBLE | WS_CHILD, 50, 30, 300, 150, gethwnd(0), 0, 0, 0);
strcpy(#text[0], "Вкладка1");
sendmessage(TCM_INSERTITEMA, 0, address(#TCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка2");
sendmessage(TCM_INSERTITEMA, 1, address(#TCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка3");
sendmessage(TCM_INSERTITEMA, 2, address(#TCITEMA[0]), formatiw(tab));
}
|
|
|
Zireael |
Отправлено: 18 Ноября, 2019 - 13:12:04
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Должна же быть функция, которая ПОЛУЧАЕТ из вкладок текст
Это она и есть.
Цитата: если messagebox показывает текст ранее созданых вкладок буфера???!!!
Покажет то что было скопировано последний раз. Т. е. в данном случае текст последней вкладки. |
|
|
|