Zireael |
Отправлено: 03 Февраля, 2019 - 02:07:20
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Пример как добавить Edit (Отобразить)CODE:#define EM_SETPASSWORDCHAR 204
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "SetFocus", "SetFocus", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 1);
while(window ("Диалог")==0)sleep(10);
win w=window ("Диалог");
int edit1=CreateWindow(0, "EDIT", "", 8192+8388608+1342177280, 10, 20, 100, 20, formatwi(w), 0, 0, 0); // можно вводить только цифры
int edit2=CreateWindow(0, "EDIT", "", 32+8388608+1342177280, 10, 60, 100, 20, formatwi(w), 0, 0, 0); // заменяет вводимый текст на *
int edit3=CreateWindow(0, "EDIT", "", 4+128+4096+1048576+2097152+8388608+1342177280, 10, 100, 120, 120, formatwi(w), 0, 0, 0); // многострочный текст
int button1=CreateWindow(0, "BUTTON", "Показать текст", 1342177280, 150, 60, 110, 20, formatwi(w), 0, 0, 0); // кнопка
int button2=CreateWindow(0, "BUTTON", "Вывести текст в messagebox", 8192+1342177280, 135, 100, 150, 40, formatwi(w), 0, 0, 0); // кнопка
int static1=CreateWindow(0, "STATIC", "Только цифры", 1342177280, 120, 20, 110, 20, formatwi(w), 0, 0, 0); // статик
char buffer[9999]; // буфер для текста из окна edit
loop()
{
sleep(1);
}
function getmessage(0, WM_COMMAND)
{
if(message.lparam==button1) // если нажата кнопка 'Показать текст'
{
if(GetWindowText(button1, address(#buffer[0]), sizearray(buffer))) // получить текст кнопки
{
if(format(#buffer[0])=="Показать текст") // если она называется 'Показать текст'
{
SetWindowText(button1, "Скрыть текст"); // меняем название кнопки
sendmessage(EM_SETPASSWORDCHAR, 0, 0, formatiw(edit2)); // отключаем замену вводимых символов на *
SetFocus(edit2); // ставим курсор в поле edit2
}
else // иначе
{
SetWindowText(button1, "Показать текст"); // меняем текст кнопки
sendmessage(EM_SETPASSWORDCHAR, 42, 0, formatiw(edit2)); // включаем замену вводимых символов на * (код 42) или любой другой символ
SetFocus(edit2);
}
}
}
if(message.lparam==button2) // если нажата кнопка 'Вывести текст в messagebox'
{
GetWindowText(edit3, address(#buffer[0]), sizearray(buffer)); // получить текст из окна edit3
messagebox(format(#buffer[0])); // показать текст в сообщении
}
}
В первое поле edit можно вводить только цифры.
Во втором все вводимые символы заменяются на * (по умолчанию). Символ замены можно изменить. Сам текст не меняется, его можно получить GetWindowText.
В третьем можно вводить многострочный текст. Если текст не помещается станут доступны полосы прокрутки. |
|
|
Kibor |
Отправлено: 03 Февраля, 2019 - 03:00:09
|
Эксперт
Просматривает форум
Сообщений всего: 8218
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Добавил функцию gethwnd
Возвращает HWND созданного диалогового окна с помощью createdialog, для использования в WinApi.
Преимущества получение HWND таким образом в том, что он получается в момент вызова сообщения WM_CREATE.
В обработчике этого сообщения надо создавать все нужные контролы.
Данную функцию можно вызывать и без создания обработчиков сообщений, сразу после createdialog. В этом случае не надо ждать создание окна и получение указателя с помощью window
Синтаксис:
Параметр - номер диалога (0 или 1 или 2)
Или без параметра. Возвращает HWND главного окна.
Пример использования и создание кнопки в обработчике WM_CREATE
CODE:external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int b;
//////////
createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 300, 1, 1);
//////////
loop() sleep(10);//Убрать после теста
function getmessage(0, WM_CREATE)
{
b=CreateWindow(0, "BUTTON", "Первая кнопка", 1342177280, 10, 10, 120, 30, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b)messagebox ("Первая кнопка");
} |
|
|
Zireael |
Отправлено: 03 Февраля, 2019 - 13:25:00
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Пример как добавить combobox (Отобразить)CODE:#define CB_ADDSTRING 323
#define CB_DELETESTRING 324
#define CB_FINDSTRING 332
#define CB_GETCURSEL 327
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "GetWindowText", "GetWindowTextA", "User32.dll" );
external(INT, "SetWindowText", "SetWindowTextA", "User32.dll" );
external(INT, "GetFocus", "GetFocus", "User32.dll" );
int i, button1, button2, combo1, combo2, row;
string combo1_text[4]={"qwe", "rty", "asd", "123"}; // список строк для комбо1
string combo2_text[6]={"Строка1", "Строка2", "string1", "string2", "987", "654"}; // список строк для комбо2
char c[255];
//////////
createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 300, 1, 1);
//////////
loop() sleep(10);//Убрать после теста
function getmessage(0, WM_CREATE)
{
button1=CreateWindow(0, "BUTTON", "Добавить в список", 8192+1342177280, 130, 10, 100, 40, gethwnd(0), 0, 0, 0);
button2=CreateWindow(0, "BUTTON", "Удалить из списка", 8192+1342177280, 130, 60, 100, 40, gethwnd(0), 0, 0, 0);
combo1=CreateWindow(0, "COMBOBOX", "", 64+2097152+1342177280, 10, 10, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в combo1 из массива combo1_text
for(i=0; i<sizearray(combo1_text); i++)
{
strcpy(#c[0], combo1_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo1));
}
combo2=CreateWindow(0, "COMBOBOX", "", 3+64+2097152+1342177280, 10, 150, 110, 120, gethwnd(0), 0, 0, 0);
// добавление строк в combo2 из массива combo2_text
for(i=0; i<sizearray(combo2_text); i++)
{
strcpy(#c[0], combo2_text[i]);
sendmessage(CB_ADDSTRING, 0, address(#c[0]), formatiw(combo2));
}
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==button1) // если нажата 'Добавить в список'
{
GetWindowText(combo1, address(#c[0]), sizearray(c)); // получаем введённый текст
if(sendmessage(CB_FINDSTRING, 1, address(#c[0]), formatiw(combo1))==-1) // ищем есть ли он в списке
{
SetWindowText(combo1, ""); // удаляем текст из поля
sendmessage(CB_ADDSTRING, 1, address(#c[0]), formatiw(combo1)); // добавляем строку в список
}
else
{
if(messageboxyn("Такая строка уже есть в списке"+formatic(13)+formatic(10)+"Всё равно добавить строку?")!=-1)
{
SetWindowText(combo1, "");
sendmessage(CB_ADDSTRING, 1, address(#c[0]), formatiw(combo1));
}
}
}
if (message.lparam==button2) // если нажата 'Удалить из списка'
{
// получить номер выбранной строки и удалить строку
sendmessage(CB_DELETESTRING, sendmessage(CB_GETCURSEL, 1, 0, formatiw(combo1)), 0, formatiw(combo1));
}
if (message.lparam==combo2) // если выбрана строка combo2
{
row=sendmessage(CB_GETCURSEL, 1, 0, formatiw(combo2)); // узнаём номер выбранной строки
if(row>-1)
{
textbkcolor(255, 65280);
textout(0, 380, 480, "Выбранная строка: "+combo2_text[row], 2);
}
}
} |
|
|
|