Zireael |
Отправлено: 15 Января, 2021 - 20:55:08
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Подскажите как на этих полях размещать элементы?
Если имеется ввиду на вкладках, то чуть выше есть пример.
Цитата: Еще вопрос как изменить цвет текстового сообщения в поле edit?
Использовать RichEdit https://kibor-bot.com/forum/topi...66162#1569166162 |
|
|
Zireael |
Отправлено: 16 Января, 2021 - 09:21:12
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: можно как то сделать, что бы фокус в поле edit всегда был на последнем сообщении.
code (Отобразить)CODE:#define WS_CHILD 1073741824
#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define ES_AUTOHSCROLL 128
#define ES_AUTOVSCROLL 64
#define ES_MULTILINE 4
#define ES_WANTRETURN 4096
#define WS_VSCROLL 2097152
#define WS_HSCROLL 1048576
#define EM_GETLINECOUNT 0x00BA
#define EM_LINESCROLL 0x00B6
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll");
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll");
external(INT, "GetWindowTextLength", "GetWindowTextLengthA", "User32.dll");
int edit;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
loop()
{
settext(edit, "string1"); // добавить текст в Edit
sleep(500);
settext(edit, "string2"); // добавить текст в Edit
sleep(500);
settext(edit, "str3");
sleep(500);
}
function getmessage(0, WM_CREATE)
{
edit=CreateWindow(0, "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | WS_VSCROLL | WS_HSCROLL |
ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN, 10, 10, 150, 120, gethwnd(0), 0, 0, 0);
}
function settext(int handle, string text)
{
char edit_text[99999];
int count_symbol = GetWindowTextLength(handle); // узнать сколько символов в edit
if(count_symbol+size(text)>=sizearray(edit_text))SetWindowText(handle, ""); // если больше чем буфер, удалить весь текст
if(GetWindowText(handle, address(#edit_text[0]), sizearray(edit_text)))
SetWindowText(handle, format(#edit_text[0])+"^r^n"+text);
else SetWindowText(handle, text);
int count = sendmessage(EM_GETLINECOUNT, 0, 0, formatiw(handle)); // узнать сколько строк в edit
sendmessage(EM_LINESCROLL, 0, count, formatiw(handle)); // скролл до последней строки
} |
|
|
Zireael |
Отправлено: 18 Января, 2021 - 15:36:14
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: но не получается разместить такие элементы как например галки или checkbox
checkbox это тоже button, только со стилем:
CODE:#define BS_AUTOCHECKBOX 3
CODE:check=CreateWindow(0, "BUTTON", "Галка1", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 20, 10, 70, 20, gethwnd(0), 0, 0, 0); |
|
|
Karkun |
Отправлено: 18 Января, 2021 - 15:55:39
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
Zireael пишет: checkbox это тоже button, только со стилем:
CODE:
#define BS_AUTOCHECKBOX 3
CODE:
check=CreateWindow(0, "BUTTON", "Галка1", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 20, 10, 70, 20, gethwnd(0), 0, 0, 0);
Благодарю вас. Тогда можно еще немного ликбеза для начинающего, почему для простого окна нам достаточно строки
Zireael пишет:
CODE:
CreateWindow(0, "BUTTON", "Галка0", 3+1342177280, 20, 10, 70, 20, formatwi(w), 0, 0, 0);
// CreateWindow(0, "BUTTON", "Галка0", 1342177283, 20, 10, 70, 20, formatwi(w), 0, 0, 0); // или так, без разницы
Создаст галку.
|
|
|
Zireael |
Отправлено: 18 Января, 2021 - 16:09:27
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: почему для простого окна нам достаточно строки
Изначально не было констант в кибор. Вообще лучше так:
CODE:#define WS_VISIBLE 0x10000000
#define WS_CHILD 0x40000000
#define WS_BORDER 0x00800000
#define BS_AUTOCHECKBOX 3
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
int button0;
int check0;
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 200, 1, 1);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
button0=CreateWindow(0, "BUTTON", "Кнопка", WS_CHILD | WS_VISIBLE, 20, 10, 100, 24, gethwnd(0), 0, 0, 0); // создать кнопку
check0=CreateWindow(0, "BUTTON", "Галка", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE, 20, 50, 100, 20, gethwnd(0), 0, 0, 0); // создать галку
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==button0) // если нажата кнопка
{
messagebox("Нажата кнопка");
}
if (message.lparam==check0) // если нажата галка
{
messagebox("Нажата галка");
}
} |
|
|
|