007wan |
Отправлено: 19 Сентября, 2019 - 14:46:15
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Ну разве не чудесно это выглядит? Нет?
Нажмите для увеличения
(Добавление)
ivantu пишет: Еще б теперь понять как по вкладкам контролы распределять... ИЗИ
(Добавление)
Потом объясню. Надо несколько вариантов опробовать. Мало ли ошибки или баги. а то уже было у меня такое. просто не говорил)
(Добавление)
007wan пишет: Еще б теперь понять как по вкладкам контролы распределять... Короче. Чисто теоретически создаешь все контролы в WM_CREATE для своего диалога. А в таймере при получении нужной вкладки, лишние контролы убираешь, а новые показываешь, а не создаешь. CODE:external(INT, "ShowWindow", "ShowWindow", "User32.dll" );
#define SW_HIDE 0
#define SW_SHOW 5
ShowWindow(baton4, SW_HIDE);//Скрыть
ShowWindow(baton3, SW_SHOW);//показать(первый параметр и есть контрол или окна)
(Добавление)
У меня примерно так:
CODE:function Selected_Tabs()
{
Selected_Tab1 = sendmessage(TCM_GETCURSEL, 0, 0, formatiw(Object_Tab1));
if (Selected_Tab1 == 0)
{
for (int eu = 0; eu<sizearray(Object_Checkbox); eu++)
{
ShowWindow(Object_Checkbox[eu], SW_SHOW);
ShowWindow(Object_Checkbox2[eu], SW_HIDE);
}
}
//===================
if (Selected_Tab1 == 1)
{
for (int et = 0; et<sizearray(Object_Checkbox); et++)
{
ShowWindow(Object_Checkbox[et], SW_HIDE);
ShowWindow(Object_Checkbox2[et], SW_SHOW);
}
}
}
(Добавление)
Я еще в настройки "О прграмме " добавил, и даже 3 диалог не нужен) класс.(Отредактировано автором: 19 Сентября, 2019 - 14:46:23) |
|
|
007wan |
Отправлено: 19 Сентября, 2019 - 15:10:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
ivantu пишет: 007wan пишет: ИЗИ
Я бы сказал костыль... ))
Надеюсь есть более грамотное решение, т.к скрыть показать, табс и не нужен был бы. Согласен. Но грамотное решение есть в Visual c++ , там создаются "слои" для контролов в Табе и всё это связывается, но принцип я думаю такой же(слой скрыт, показан новый)
(Добавление)
Я лично не умею писать dll ки
(Добавление)
И каждый раз кого-то просить написать её из-за смены стиля или же нового контрола мне не хочется. Сами знайте почему) [Я всех дoстал]
(Добавление)
007wan пишет: Я бы сказал костыль... )) ЕЩЕ плюс костыля в том, что при смене вкладки не нужно каждый раз загружать из файла статусы галчек и их задавать галочками |
|
|
Zireael |
Отправлено: 19 Сентября, 2019 - 15:17:55
|
Эксперт
Покинул форум
Сообщений всего: 4467
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Еще б теперь понять как по вкладкам контролы распределять...
Tab (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_EX_COMPOSITED 33554432
#define GWL_EXSTYLE -20
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define TCIF_TEXT 1
#define TCM_INSERTITEM 4871
#define TCM_GETCURSEL 4875
#define SW_HIDE 0
#define SW_SHOW 5
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "ShowWindow", "ShowWindow", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
int hinstance;
int tab, current_tab=0;
char text[99];
int tagTCITEMA[7]={TCIF_TEXT, 0, 0, address(#text[0]), size(#text[0]), 0, 0}
int tab_ctrl[3][10]; // 3 вкладки по 10 или меньше контролов
int count_control_tab[3]={3, 1, 2} // количество контролов на каждой вкладке
int mouse_posX, mousePosY;
createdialog(0);
showdialog(0, "Dialog", 200, 200, 400, 300, 1, 1);
enabletimer(0);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) + WS_EX_COMPOSITED);
hinstance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
// контролы первой вкладки
tab_ctrl[0][0]=CreateWindow(0, "BUTTON", "Кнопка0", WS_VISIBLE | WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[0][1]=CreateWindow(0, "BUTTON", "Кнопка1", WS_VISIBLE | WS_BORDER | WS_CHILD, 30, 80, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[0][2]=CreateWindow(0, "EDIT", "Edit", WS_VISIBLE | WS_BORDER | WS_CHILD, 130, 50, 80, 20, gethwnd(0), 0, 0, 0);
// контролы второй вкладки
tab_ctrl[1][0]=CreateWindow(0, "BUTTON", "Кнопка2", WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
// контролы третьей вкладки
tab_ctrl[2][0]=CreateWindow(0, "BUTTON", "Кнопка3", WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[2][1]=CreateWindow(0, "STATIC", "Статик", WS_CHILD, 130, 50, 80, 20, gethwnd(0), 0, 0, 0);
// tab, создавать после контролов
tab=CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 10, 300, 150, gethwnd(0), 0, hinstance, 0, 0);
strcpy(#text[0], "Вкладка0");
sendmessage(TCM_INSERTITEM, 0, address(#tagTCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка1");
sendmessage(TCM_INSERTITEM, 1, address(#tagTCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка2");
sendmessage(TCM_INSERTITEM, 2, address(#tagTCITEMA[0]), formatiw(tab));
// остальные контролы диалога
}
CREATE_TIMER(0, 100)
{
textbkcolor(255, 65280);
textout(0, 300, 150, "Выбрана вкладка: "+format(current_tab), 0);
getmouse(mouse_posX, mousePosY);
if(WindowFromPoint(mouse_posX, mousePosY)==tab)control_on_off(); // если был клик по табу
}
function control_on_off()
{
int i, j;
current_tab=sendmessage(TCM_GETCURSEL, 0, 0, formatiw(tab)); // получить номер вкладки
for(i=0; i<sizearray(tab_ctrl); i++) // для всех вкладок
{
if(i==current_tab)
{
for(j=0; j<count_control_tab[i]; j++)ShowWindow(tab_ctrl[i][j], SW_SHOW); // показать конролы текущей вкладки
}
else
{
for(j=0; j<count_control_tab[i]; j++)ShowWindow(tab_ctrl[i][j], SW_HIDE); // скрыть контролы других вкладок
}
}
} |
|
|
007wan |
Отправлено: 19 Сентября, 2019 - 15:18:46
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
А твои "Слои" он создаются и создают на них контролы и приходится постоянно эти контролам менять положение (или нет, может быть они так же создаются)
(Добавление)
Zireael , WindowFromPoint обязательно?
(Добавление)
ivantu пишет: не только, в твоих темах много готовых решений, которые удалось "выклянчить" Ну блин, мне кажется если никто не просил бы, то было бы скучновато на форуме, а так хоть я кого-то раздражаю, ну и помогаю другим, что прошу код, только вот жаль, что поиск форума плохо пашет, а то искать кому-то тяжело будет, а то в теме про external минимум от 15 страниц бывало.
(Добавление)
Я получаю код и делюсь своими идеями и впечатлениями.
(Добавление)
007wan пишет: не только, в твоих темах много готовых решений, которые удалось "выклянчить" Да и к тому же никто не сможет написать безумный код, кроме как умных тут на форуме, поэтому и прошу. |
|
|
007wan |
Отправлено: 19 Сентября, 2019 - 15:29:35
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
ivantu пишет: Zireael , этот вариант tab-ов, координально отличается от того что вы мне ранее подсказывали ? Я в плане быстродействия, и правильности кода.
Просто местами алгоритмы похожи, особенно про показ и скрытие контролов. Это другое не обращай внимание)))) шучу. просто завуалированный код. Что про быстродействие, то я думаю можно вместо "показа" контролов сделать "перемещение", тоесть создать все, а не нужны за рамку диалога поместить и перемещать когда нужна вкладка.
ИЛИ же у одних контролов менять текст(если они одинаковы во всех вкладках) при переключении вкладок, а потом при нужном контроле сравнивать тексты в коде, например, если текст в первой вкладки у галочеки равен "1", то при переключении вкладки, он будет "2", а потом сравнивать, если он равен "2", значит показать сообщение итд.
ИЛИ же поместить на контролы изображение растровое и его отключать при переключении вкладок, что будет быстрее показывать и одновременно.
(Добавление)
Отключение вкладок ПРИВЕТСТВУЕТСЯ, ВАУУУ)
Tab Control Styles(Отредактировано автором: 19 Сентября, 2019 - 15:33:23) |
|
|
|