Zireael |
Отправлено: 20 Января, 2022 - 02:01:56
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Обновил архив в первом сообщении.
Цитата: function load_config() и function save_config() хорошо бы пронумеровать от номера диалога.
Сделал.
Цитата: И хорошо бы делать больше 3 диалогов.
В данном виде только 3 диалога можно. Думал сделать через регистрацию своего класса окна, но не часто требуется больше 3х окон, так что не стал. |
|
|
neba2101 |
Отправлено: 20 Января, 2022 - 09:58:57
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Сделал.
Спасибо!
Zireael пишет: В данном виде только 3 диалога можно. Думал сделать через регистрацию своего класса окна, но не часто требуется больше 3х окон, так что не стал.
Видел в примерах от Kibor без createdialog(0); (как я понял это "через регистрацию своего класса" ) и получается нет ограничений на кол-во окон. Было бы очень круто!
Ещё бы отделить общую часть кода, которая нужна 1 раз (#define, external, переменные без нумерации) в следующих диалогах. |
|
|
neba2101 |
Отправлено: 20 Января, 2022 - 18:37:14
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
И ещё было бы круто сделать отдельный код диалога с выводом переменной, которая отвечает за данный контрол.
Пример:
Скрытый текст:Для просмотра Вам необходимо авторизоваться
Только ко всем контролам.
Было бы удобно при большом количестве контролов.
(Добавление)
neba2101 пишет: Zireael пишет: Цитата: В поле edit вставляется или печатается текст только по размеру самого edit-а. Текст который не влез просто удаляется
Нужно добавить ES_AUTOHSCROLL.
Цитата: #define ES_AUTOHSCROLL 0x0080
edit0[0] = CreateWindow(0, "EDIT", text_edit0[0], WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL, 40, 24, 80, 20, gethwnd(0), 0, 0, 0);
Было бы отлично, если бы вы это добавили это в DialogEditor
(Добавление)
А ещё dialogPosX и dialogPosY пронумеровать) |
|
|
Zireael |
Отправлено: 21 Января, 2022 - 01:34:45
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: И ещё было бы круто сделать отдельный код диалога с выводом переменной, которая отвечает за данный контрол.
Можно задать имя переменной, когда много контролов это будет проще. Условно ButtonStart, ButtonStop явно понятнее чем button0[0], button0[1].
Цитата: А ещё dialogPosX и dialogPosY пронумеровать)
Обновил архив. |
|
|
neba2101 |
Отправлено: 21 Января, 2022 - 13:42:45
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Zireael пишет: Можно задать имя переменной, когда много контролов это будет проще. Условно ButtonStart, ButtonStop явно понятнее чем button0[0], button0[1].
Забыл про эту возможность.
Zireael пишет: Обновил архив.
Спасибо!
Можно еще
CODE:
...
end_0;//Пронумеровать вот это и соответственно goto global end_0;
function getmessage(0, WM_CLOSE)
{
save_config_0(); // вызов функции, котороая сохранит настройки в ini файл
destroydialog(0);//Добавить destroydialog(номер диалога);<--тут кстати сейчас пустая строка
DeleteObject(h_font);
goto global end_0; //
// close(); // закрыть кибор
}
Спасибо заранее! |
|
|
Zireael |
Отправлено: 21 Января, 2022 - 13:53:00
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: end_0;//Пронумеровать вот это и соответственно goto global end_0;
Обновил архив.
Цитата: destroydialog(0);//Добавить destroydialog
Кому надо сам добавит, не всегда требуется удалять диалог при закрытии. |
|
|
neba2101 |
Отправлено: 29 Января, 2022 - 17:22:41
|
Мастер
Покинул форум
Сообщений всего: 154
Дата рег-ции: Февр. 2017
Репутация: 4
|
Как при нажатии на поле edit вывести сообщение с именем переменной, которая хранит текст этого поля?
И как при выборе пункта в listbox и combobox вывести такое же сообщение только с именем переменной и значением выбранного пункта?
Пробовал так:
Код (Отобразить)#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define ES_MULTILINE 0x0004
#define ES_WANTRETURN 0x1000
#define ES_AUTOVSCROLL 0x0040
#define ES_AUTOHSCROLL 0x0080
#define LB_ADDSTRING 0x0180
#define LB_GETCURSEL 0x0188
#define LB_SETCURSEL 0x0186
#define LBS_NOTIFY 0x0001
#define CBS_DROPDOWNLIST 0x0003
#define CB_ADDSTRING 0x0143
#define CB_GETCURSEL 0x0147
#define CB_SETCURSEL 0x014E
#define TRUE 1
#define WM_SETFONT 0x0030
#define RUSSIAN_CHARSET 204
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "GetWindowRect", "GetWindowRect", "User32.dll" );
external(INT, "DeleteObject", "DeleteObject", "Gdi32.dll" );
external(INT, "DeleteFile", "DeleteFileA", "kernel32.dll" );
int h_font;
string rn = formatic(13)+formatic(10);
int dialogPosX_0 = 9, dialogPosY_0 = 61;
int edit0[3];
string text_edit0[3];
text_edit0[0] = "Edit0"; text_edit0[1] = "Edit1"; text_edit0[2] = "Edit2";
int listbox0[3];
int flag_listbox0[3] = { 0, 0, 0 };
string text_listbox0[3][3];
int count_rows_listbox0[3] = { 3, 3, 3 };
text_listbox0[0][0] = "111"; text_listbox0[0][1] = "222"; text_listbox0[0][2] = "333";
text_listbox0[1][0] = "qqq"; text_listbox0[1][1] = "www"; text_listbox0[1][2] = "eee";
text_listbox0[2][0] = "fff"; text_listbox0[2][1] = "ggg"; text_listbox0[2][2] = "hhh";
int combobox0[3];
int flag_combobox0[3] = { 0, 0, 0 };
string text_combobox0[3][3];
int count_rows_combobox0[3] = { 3, 3, 3 };
text_combobox0[0][0] = "yyy"; text_combobox0[0][1] = "uuu"; text_combobox0[0][2] = "iii";
text_combobox0[1][0] = "ooo"; text_combobox0[1][1] = "ppp"; text_combobox0[1][2] = "[[[";
text_combobox0[2][0] = "zzz"; text_combobox0[2][1] = "xxx"; text_combobox0[2][2] = "ccc";
createdialog(0);
showdialog(0, "Диалог0", dialogPosX_0, dialogPosY_0, 455, 406, 4, 1);
loop()
{
// тут нужный код
sleep(10);
}
end_0:;
function getmessage(0, WM_CREATE)
{
int i;
int j;
char c_text_listbox[999];
char c_text_combobox[999];
h_font = CreateFont(-12, 0, 0, 0, 400, 0, 0, 0, RUSSIAN_CHARSET, 0, 0, 0, 0, "Arial" );
edit0[0] = CreateWindow(0, "EDIT", text_edit0[0], WS_VISIBLE | WS_CHILD | WS_BORDER, 5, 5, 80, 20, gethwnd(0), 0, 0, 0);
edit0[1] = CreateWindow(0, "EDIT", text_edit0[1], WS_VISIBLE | WS_CHILD | WS_BORDER, 90, 5, 80, 20, gethwnd(0), 0, 0, 0);
edit0[2] = CreateWindow(0, "EDIT", text_edit0[2], WS_VISIBLE | WS_CHILD | WS_BORDER, 175, 5, 80, 20, gethwnd(0), 0, 0, 0);
listbox0[0] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY, 5, 30, 100, 142, gethwnd(0), 0, 0, 0);
listbox0[1] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY, 110, 30, 100, 142, gethwnd(0), 0, 0, 0);
listbox0[2] = CreateWindow(0, "LISTBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | LBS_NOTIFY, 215, 30, 100, 142, gethwnd(0), 0, 0, 0);
combobox0[0] = CreateWindow(0, "COMBOBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_DROPDOWNLIST, 5, 170, 100, 74, gethwnd(0), 0, 0, 0);
combobox0[1] = CreateWindow(0, "COMBOBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_DROPDOWNLIST, 110, 170, 100, 74, gethwnd(0), 0, 0, 0);
combobox0[2] = CreateWindow(0, "COMBOBOX", "", WS_VISIBLE | WS_CHILD | WS_BORDER | CBS_DROPDOWNLIST, 215, 170, 100, 74, gethwnd(0), 0, 0, 0);
for(i=0; i<3; i++)
{
for(j=0; j<count_rows_listbox0[i]; j++)
{
strcpy(#c_text_listbox[0], text_listbox0[i][j]);
sendmessage(LB_ADDSTRING, 0, address(#c_text_listbox[0]), formatiw(listbox0[i]));
}
}
for(i=0; i<3; i++)sendmessage(LB_SETCURSEL, flag_listbox0[i], 0, formatiw(listbox0[i]));
for(i=0; i<3; i++)
{
for(j=0; j<count_rows_combobox0[i]; j++)
{
strcpy(#c_text_combobox[0], text_combobox0[i][j]);
sendmessage(CB_ADDSTRING, 0, address(#c_text_combobox[0]), formatiw(combobox0[i]));
}
}
for(i=0; i<3; i++)sendmessage(CB_SETCURSEL, flag_combobox0[i], 0, formatiw(combobox0[i]));
for(i=0; i<3; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(edit0[i]));
for(i=0; i<3; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(listbox0[i]));
for(i=0; i<3; i++)sendmessage(WM_SETFONT, h_font, TRUE, formatiw(combobox0[i]));
}
function getmessage(0, WM_COMMAND)
{
int i;
char c_text_edit[999];
for(i=0; i<3; i++) // обработка нажатий edit
{
if(message.lparam == edit0[i])
{
GetWindowText(edit0[i], address(#c_text_edit[0]), sizearray(c_text_edit));
text_edit0[i] = format(#c_text_edit[0]);
messagebox("text_edit0["+format(i)+"]" );
return;
}
}
for(i=0; i<3; i++) // обработка нажатий на список listbox
{
if(message.lparam == listbox0[i])
{
flag_listbox0[i] = sendmessage(LB_GETCURSEL, 0, 0, formatiw(listbox0[i]));
messagebox("flag_listbox0["+format(i)+"]=="+format(flag_listbox0[i]));
return;
}
}
for(i=0; i<3; i++) // обработка нажатий на список combobox
{
if(message.lparam == combobox0[i])
{
flag_combobox0[i] = sendmessage(CB_GETCURSEL, 0, 0, formatiw(combobox0[i]));
messagebox("flag_combobox0["+format(i)+"]=="+format(flag_combobox0[i]));
return;
}
}
}
function getmessage(0, WM_CLOSE)
{
DeleteObject(h_font);
goto global end_0; // переход в метке
// close(); // закрыть кибор
}
Но работает не совсем правильно. Выводит сообщение несколько раз и первое сообщение повторят с прошлого вывода как я понял. |
|
|
Zireael |
Отправлено: 29 Января, 2022 - 17:59:47
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
messagebox в обработчике лучше не использовать, есть textout.
Цитата: messagebox("text_edit0["+format(i)+"]" );
CODE:textout(0, 0, 0, "text_edit0["+format(i)+"]", 1); |
|
|
|