81. Nikanr - 18 Ноября, 2019 - 09:08:10 - перейти к сообщению
Можно как-нибудь выводить AppendMenu по центру, если хватает длины диалога, но не хватает пунктов меню?) На уме только пробелы в имени
82. Nikanr - 18 Ноября, 2019 - 12:09:11 - перейти к сообщению
И можно ссылку на то, как скрыть значок программы из панели задач?
(Добавление)
Сорь что захламляю тему, не подумав пишу) Нашел как решать обе проблемы
(Добавление)
Сорь что захламляю тему, не подумав пишу) Нашел как решать обе проблемы
83. Zireael - 18 Ноября, 2019 - 17:11:23 - перейти к сообщению
Цитата:
как мне переменовать ТЕКУЩУЮ вкладку
1. Из обработчика WM_NOTYFI убери лишний код. Похоже что не успевает все события обработать.
CODE:
function getmessage(0, WM_NOTIFY)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
}
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
}
2. В WM_COMMAND добавь ретурны. Нет смысла лишние проверять.
CODE:
function getmessage(0, WM_COMMAND)
{
if (message.lparam == Object_Button1)
{
// тут код
return;
}
if (message.lparam == Object_Button2)
{
// тут код
return;
}
// остальное аналогично
}
{
if (message.lparam == Object_Button1)
{
// тут код
return;
}
if (message.lparam == Object_Button2)
{
// тут код
return;
}
// остальное аналогично
}
3. Убрать точки с запятыми после фигурных скобок.
4. С первого раза непонятно видимо, повторю:
Цитата:
size(#text_tab_c[0])
Исправить на sizearray(text_tab_c)
Исправить на sizearray(text_tab_c)
5. Зачем ставить флаг TCIF_IMAGE, если иконки не используются?
Теперь, по поводу вопроса. Вот структура:
Цитата:
int TCITEMA[7] = {TCIF_TEXT, 0, 0, address(#Buffer1[0]), sizearray(Buffer1), 0, 0}
В ней записан адрес массива Buffer1, а текст для вкладки копируется в Buffer2.
Цитата:
strcpy(#Buffer2[0], format(#Text_Tab[0]));
Так может стоит копировать текст туда, откуда он будет браться, а не куда попало.
А вообще проще сразу получить текст из списка в Buffer1 и ничего, никуда копировать не придётся.
Кнопку 'Выбрать' можно убрать. Если в списке была выбрана строка, то сразу выполнить нужные действия.
84. 007wan - 19 Ноября, 2019 - 01:02:39 - перейти к сообщению
Zireael пишет:
Из обработчика WM_NOTYFI убери лишний код. Похоже что не успевает все события обработать.
Это лишний код?
CODE:
function getmessage(0, WM_NOTIFY)
{
if(addressi(message.lparam) == Object_Tab1)
{
if(addressi(message.lparam+8) == NM_CLICK || addressi(message.lparam+8) == TCN_SELCHANGE)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(Object_Tab1));//это
//если получили текст текущей вкладки при переключении вкладок, показывать нужные контроллы ShowWindow SW_SHOW & SW_HIDE
return;
}
}
}
{
if(addressi(message.lparam) == Object_Tab1)
{
if(addressi(message.lparam+8) == NM_CLICK || addressi(message.lparam+8) == TCN_SELCHANGE)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(Object_Tab1));//это
//если получили текст текущей вкладки при переключении вкладок, показывать нужные контроллы ShowWindow SW_SHOW & SW_HIDE
return;
}
}
}
тут всего одна строчка дополнительная и всё и скоро еще прибавится код.
Zireael пишет:
Зачем ставить флаг TCIF_IMAGE, если иконки не используются?
Иконки пока не нарисовал и не придумал. В будущем ширина вкладки будет учитываться и иконка(или нет, если он уже дает ширину с иконками). Zireael пишет:
Кнопку 'Выбрать' можно убрать. Если в списке была выбрана строка, то сразу выполнить нужные действия.
А можно по двойному щелчку по строчке?PS:Остальное вроде как поменял. Можно взглянуть (Есть ошибки при запуске, изменил как всё было написано). Яндекс.Жиск.
Напомню суть скрипта: WM_NOTYFY (при переключении вкладки) определяет текст ТЕКУЩЕЙ вкладки, а потом исходя из текста показывает или скрывает нужные контроллы.
(Добавление)
Zireael пишет:
Теперь, по поводу вопроса. Вот структура:
(Добавление)
Я конечно единственное что я понял так это, что текст вкладок содержится в структуре TCITEMA, а как получить не ясно.
85. Zireael - 19 Ноября, 2019 - 02:31:18 - перейти к сообщению
Цитата:
Есть ошибки при запуске
И даже пишет где ошибка, в sizearray.
Цитата:
А Как узнать текст текущей вкладки
Цитата:
int TCITEMA[7] = {TCIF_TEXT, 0, 0, address(#Buffer1[0]), sizearray(Buffer1), 0, 0}
sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(tab)); // текст второй вкладки
// текст второй вкладки будет в массиве Buffer1
sendmessage(TCM_GETITEMA, 1, address(#TCITEMA[0]), formatiw(tab)); // текст второй вкладки
// текст второй вкладки будет в массиве Buffer1
Что тут непонятного? Без разницы что было в массиве до этого, хоть вообще пустой, отправили TCM_GETITEMA, указав номер вкладки, текст запишется в массив. Если TCM_SETITEMA, то установит текст вкладки, который записан в массиве.
Цитата:
что текст вкладок содержится в структуре TCITEMA
Нет его там.
86. 007wan - 19 Ноября, 2019 - 03:02:51 - перейти к сообщению
Zireael , Последние вопросы и они вам не понравятся)
Есть код)
Вопросы: почему TCM_SETCURSEL не отправляет сообщение WM_NOTIFY, мы же назначили(выбрали вкладку), что не так?
Как вызвать WM_NOTIFY принудительно?
Логика такая: вызываем TCM_SETCURSEL, значит нужно узнать текст вкладки, а если текст такой-то, то показать нужные контроллы И что бы мне не писать лишний код, можно просто вызвать WM_NOTIFY(по идеи я думал он сам будет вызываться, а оказалось нет)
Есть код)
CODE:
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
sendmessage(TCM_SETCURSEL, Selected_Tab+1, 0, formatiw(Object_Tab1));
sendmessage(TCM_SETCURSEL, Selected_Tab+1, 0, formatiw(Object_Tab1));
Вопросы: почему TCM_SETCURSEL не отправляет сообщение WM_NOTIFY, мы же назначили(выбрали вкладку), что не так?
Как вызвать WM_NOTIFY принудительно?
Логика такая: вызываем TCM_SETCURSEL, значит нужно узнать текст вкладки, а если текст такой-то, то показать нужные контроллы И что бы мне не писать лишний код, можно просто вызвать WM_NOTIFY(по идеи я думал он сам будет вызываться, а оказалось нет)
87. Zireael - 19 Ноября, 2019 - 03:20:32 - перейти к сообщению
Что мешает вызвать функцию, которая выполнит нужный код.
CODE:
sendmessage(TCM_SETCURSEL, Selected_Tab+1, 0, formatiw(Object_Tab1));
func(); // вызвать нужную функцию
func(); // вызвать нужную функцию
88. 007wan - 19 Ноября, 2019 - 03:27:34 - перейти к сообщению
Zireael пишет:
Что мешает вызвать функцию, которая выполнит нужный код.
Ой,)CODE:
sendmessage(TCM_SETCURSEL, Selected_Tab+1, 0, formatiw(Object_Tab1));
func(); // вызвать нужную функцию
func(); // вызвать нужную функцию
(Добавление)
Zireael , Вот как я примерно хотел, но работает коряво, очень)
При переключении вкладок должен получать норме вкладки и текст, а т.к он не срабатывает или не успевает, то контроллы не убираются и нужные не показываются.
Яндекс.Диск
Так что я не знаю что теперь делать, похожу всё время на которое я потратил Табам в бездну-_-
(Добавление)
Не забудь убрать messagebox WM_NOTIFY
89. Zireael - 19 Ноября, 2019 - 04:52:04 - перейти к сообщению
Цитата:
а т.к он не срабатывает или не успевает
Так сложно удалить несколько строчек кода?
Цитата:
function getmessage(0, WM_NOTIFY)
{
if(addressi(message.lparam) == Object_Tab1)
{
if(addressi(message.lparam+8) == NM_CLICK || addressi(message.lparam+8) == TCN_SELCHANGE)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
Show_Controls(0, 1);
messagebox(1);
return;
}
}
}
{
if(addressi(message.lparam) == Object_Tab1)
{
if(addressi(message.lparam+8) == NM_CLICK || addressi(message.lparam+8) == TCN_SELCHANGE)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
Show_Controls(0, 1);
messagebox(1);
return;
}
}
}
CODE:
function getmessage(0, WM_NOTIFY)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
Show_Controls(0, 1);
}
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
Show_Controls(0, 1);
}
90. 007wan - 19 Ноября, 2019 - 04:57:58 - перейти к сообщению
Zireael пишет:
Так сложно удалить несколько строчек кода?
Я думал не эти) Но какая разница в данном случаи? Всёравно при переключении не вызывается эта функция так что -_-(Добавление)
Может я какой-то событие не учёл? Хотя вроде всё...