Всем привет!
Пробовал искать по форуму уже в течении нескольких часов. Поиск обвенчался неудачей, вот и решил создать тему.
Суть вопроса:
Можно ли создавать в Немодальных диалогах контролы динамически ?
Что я хочу:
1. Инициализировать диалог с массивом EDIT контролов.
2. В процессе взаимодействия с диалогом - дополнить массив контролов динамически.
Ожидания:
1. После изменения массива EDIT (или другого типа) контрола - увидеть изменения на форме динамически.
2. Данные переменной массива EDIT контролов все так же связаны и я могу получить значение того или иного textbox в нужный мне момент времени.
Допустимые варианты решения проблемы:
1.Реализация через winApi. P.S. Уже пытался курить мануал, если кто нибудь поможет - буду благодарен.
1. Velm - 20 Апреля, 2020 - 08:30:03 - перейти к сообщению
2. Zireael - 20 Апреля, 2020 - 08:47:58 - перейти к сообщению
Цитата:
Можно ли создавать в Немодальных диалогах контролы динамически
Можно.
CODE:
#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define SW_SHOW 5
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
int button0;
int edit[5]; // массив для 5 edit
int count_edit = 0;
createdialog(0);
showdialog(0, "dialog",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
// создать кнопку
button0=CreateWindow(0, "BUTTON", "Добавить edit", WS_VISIBLE | WS_CHILD, 10, 10, 110, 25, gethwnd(0), 0, 0, 0);
// создать edit, не отображаются, т. к. не указан стиль WS_VISIBLE
for(int i=0; i<sizearray(edit); i++)
edit[i]=CreateWindow(0, "EDIT", "", WS_CHILD | WS_BORDER, 10, 50+i*25, 80, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam == button0) // если нажата кнопка
{
if(count_edit < sizearray(edit)) // если видимо меньше 5 edit (по размеру массива)
{
ShowWindow(edit[count_edit], SW_SHOW); // показать edit
count_edit++; // увеличивает счётчик на 1
}
else messagebox("Уже создано максимальное число edit");
}
}
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define SW_SHOW 5
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "ShowWindow", "ShowWindow", "User32.dll");
int button0;
int edit[5]; // массив для 5 edit
int count_edit = 0;
createdialog(0);
showdialog(0, "dialog",100, 100, 300, 300, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
// создать кнопку
button0=CreateWindow(0, "BUTTON", "Добавить edit", WS_VISIBLE | WS_CHILD, 10, 10, 110, 25, gethwnd(0), 0, 0, 0);
// создать edit, не отображаются, т. к. не указан стиль WS_VISIBLE
for(int i=0; i<sizearray(edit); i++)
edit[i]=CreateWindow(0, "EDIT", "", WS_CHILD | WS_BORDER, 10, 50+i*25, 80, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam == button0) // если нажата кнопка
{
if(count_edit < sizearray(edit)) // если видимо меньше 5 edit (по размеру массива)
{
ShowWindow(edit[count_edit], SW_SHOW); // показать edit
count_edit++; // увеличивает счётчик на 1
}
else messagebox("Уже создано максимальное число edit");
}
}