Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » вопрос по external и др

Страниц (14): В начало « ... 5 6 7 8 [9] 10 11 12 13 ... » В конец
 

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));
}

2. В WM_COMMAND добавь ретурны. Нет смысла лишние проверять.
CODE:
function getmessage(0, WM_COMMAND)
{
if (message.lparam == Object_Button1)
{
// тут код
return;
}
if (message.lparam == Object_Button2)
{
// тут код
return;
}
// остальное аналогично
}

3. Убрать точки с запятыми после фигурных скобок.
4. С первого раза непонятно видимо, повторю:
 Цитата:
size(#text_tab_c[0])
Исправить на 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;
}
}
}

тут всего одна строчка дополнительная и всё и скоро еще прибавится код.
 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

Что тут непонятного? Без разницы что было в массиве до этого, хоть вообще пустой, отправили TCM_GETITEMA, указав номер вкладки, текст запишется в массив. Если TCM_SETITEMA, то установит текст вкладки, который записан в массиве.
 Цитата:
что текст вкладок содержится в структуре TCITEMA

Нет его там.
86. 007wan - 19 Ноября, 2019 - 03:02:51 - перейти к сообщению
Zireael , Последние вопросы и они вам не понравятся)
Есть код)
CODE:
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 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(); // вызвать нужную функцию
88. 007wan - 19 Ноября, 2019 - 03:27:34 - перейти к сообщению
 Zireael пишет:
Что мешает вызвать функцию, которая выполнит нужный код.
CODE:
sendmessage(TCM_SETCURSEL, Selected_Tab+1, 0, formatiw(Object_Tab1));
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;
}
}
}

CODE:
function getmessage(0, WM_NOTIFY)
{
Selected_Tab = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
Show_Controls(0, 1);
}
90. 007wan - 19 Ноября, 2019 - 04:57:58 - перейти к сообщению
 Zireael пишет:
Так сложно удалить несколько строчек кода?
Я думал не эти) Но какая разница в данном случаи? Всёравно при переключении не вызывается эта функция так что -_-
(Добавление)
Может я какой-то событие не учёл? Хотя вроде всё...

Powered by ExBB FM 1.0 Final