Начал делать компонент
InputBox.
Прототип функции такой(
UASM\
Pascal\
C):
Code:
InputBox Proto Buffer:Ptr, Caption:Ptr, Prompt:Ptr, Default:Ptr, Flags:Dword, BufferSize:Dword, RedrawProc:Ptr
Code:
Function InputBox(Buffer: Pointer; Caption, Prompt, Default: PChar; Flags, BufferSize: Dword; RedrawProc: Proc) : LongBool;
Code:
unsigned long __stdcall InputBox(void* Buffer, char* Caption, char* Prompt, char* Default,
unsigned long Flags, unsigned long BufferSize, void* RedrawProc)
Buffer — по этому адресу будет записано возвращаемое значение
Caption — заголовок окна InputBox-а
Prompt — сообщение отображаемое в окне и предлагающее пользователю ввести данные
Default — значение по умолчанию, отображается в текстовом поле
Flags — опции, флаги
BufferSize — размер буфера под возвращаемое значение
RedrawProc — процедура перерисовки окна, вызывается при активации родительского окна
Функция возвращает код ошибки или 0(
IBE_NO_ERROR) в случае успеха.
Flags =
[MOUSE|SCREEN|PARENT
][NUMBER|STRING
]:
IBF_STRING = 0 — в буфер будет записана строка
IBF_NUMBER = 1 — в буфер будет записано число
IBF_MOUSE_REL = 0 — относительно положения указателя мыши
IBF_SCREEN_REL = 8 — относительно экрана
IBF_PARENT_REL = 16 — относительно родительского окна
Errors:
IBE_NO_ERROR = 0 — успешно, нет ошибки
IBE_NUMBER_OVERFLOW = 1 — переполнение при вводе числа
Предполагается работать примерно так:
Code:
Var
Err: LongBool;
X: LongInt;
Txt: Array[0..10] Of Char;
// Ввод числа в переменную X
Err := InputBox(@X, 'Input', 'Enter value', '-100', IBF_NUMBER, SizeOf(X), @On_Redraw);
If Not Err Then // Если нет ошибки
DoSomething; // продолжаем работу
Else // иначе
InputBoxError(Err); // обрабатываем ошибку
// Ввод строки в буфер Txt, Flags = 0, но можно вместо нуля написать IBF_STRING
InputBox(@Txt, 'Input', 'Enter string', 'my text', 0, SizeOf(Txt), @On_Redraw);
Для использования нужно загрузить библиотеку
InputBox.obj и использовать функцию
InputBox из неё.
Размер шрифта зависит от системной настройки.
Вот так выглядят примеры
Attachment:
InputBox1.png [ 15.71 KiB | Viewed 8302 times ]
Attachment:
InputBox2.png [ 13.83 KiB | Viewed 8302 times ]
Можно проверить, как это работает, есть сборка уже вместе с
InputBox, в ней есть папка "
$$$_TEST_$$$", там примеры, использующие
InputBox.
Исходники примеров в
TEST_SRC.7z:
один на ассемблере собирается с помощью UASM
другой на C — с помощью BCC32
Там же и исходники самого
InputBox —
InputBox_SRC.7z.
Attachment:
test(InputBox).7z [1.25 MiB]
Downloaded 95 times