Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн дек 17, 2018 3:46 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 11 сообщений ] 
Автор Сообщение
 Заголовок сообщения: InputBox
СообщениеДобавлено: Пт сен 28, 2018 6:03 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
Начал делать компонент InputBox.
Прототип функции такой(UASM\Pascal\C):
Код:
InputBox Proto Buffer:Ptr, Caption:Ptr, Prompt:Ptr, Default:Ptr, Flags:Dword, BufferSize:Dword, RedrawProc:Ptr             
Код:
Function InputBox(Buffer: Pointer; Caption, Prompt, Default: PChar; Flags, BufferSize: Dword; RedrawProc: Proc) : LongBool;         
Код:
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 — переполнение при вводе числа

Предполагается работать примерно так:
Код:
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 из неё.

Размер шрифта зависит от системной настройки.
Вот так выглядят примеры
Вложение:
InputBox1.png
InputBox1.png [ 15.71 КБ | 1093 просмотра ]
Вложение:
InputBox2.png
InputBox2.png [ 13.83 КБ | 1093 просмотра ]
Можно проверить, как это работает, есть сборка уже вместе с InputBox, в ней есть папка "$$$_TEST_$$$", там примеры, использующие InputBox.
Исходники примеров в TEST_SRC.7z:
    один на ассемблере собирается с помощью UASM
    другой на C — с помощью BCC32
Там же и исходники самого InputBoxInputBox_SRC.7z.
Вложение:
test(InputBox).7z [1.25 МБ]
20 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пт сен 28, 2018 8:49 pm 
Не в сети

Зарегистрирован: Вс окт 27, 2013 8:13 pm
Сообщения: 140
Выглядит симпатично и в использовании удобно. Хорошо бы иметь такую библиотеку для разных диалоговых окон: MsgBox, FindReplace... Знаю, что есть такая библиотека, но она устарела -- мелкий шрифт.


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пт сен 28, 2018 10:34 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 417
Закрытые библиотеки это саботаж 100%


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пт сен 28, 2018 10:54 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4879
Похоже исходник лежит в kolibri.img\$$$_TEST_$$$\InputBox_SRC.7z\lib\InputBox.asm

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 2:57 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
Siemargl писал(а):
Закрытые библиотеки это саботаж 100%
А к чему ты это написал здесь?
Сможешь объяснить? Или так, от нефиг делать?
Leency писал(а):
Похоже исходник лежит в kolibri.img\$$$_TEST_$$$\InputBox_SRC.7z\lib\InputBox.asm
Да, именно это я и написал в первом сообщении
Вложение:
1.PNG
1.PNG [ 9.19 КБ | 1004 просмотра ]


Я изначально делал по аналогии с OpenDialog и ColorDialog: приложение + библиотека.
Но что-то существенных профитов от этого не обнаружил.
Интересно, какие цели преследовал Марат при разработке OpenDialog и ColorDialog?
Разве что раздельное адресное пространство — может в этом была задумка?

Плюсы варианта "всё вместе в библиотеке":
    нет возни с разделяемой памятью
    не нужно запускать новый процесс
    упрощается код
    один файл вместо двух

Для вызывающего приложения существенной разницы нет — интерфейс остаётся такой же.

Теперь поддерживается ввод 64-битных чисел.
Добавился ещё один код ошибки IBE_RESULT_TOO_LONG. Все константы:
Код:
  ; Flags = [mouse|screen|parent][number|string]
  IBF_STRING = 0      ; в буфер будет записана строка         ; string will be written to the buffer
  IBF_NUMBER = 1      ; в буфер будет записано число          ; number will be written to the buffer
  IBF_MOUSE_REL = 0   ; относительно положения указателя мыши ; relative to the mouse pointer
  IBF_SCREEN_REL = 8  ; относительно экрана                   ; relative to the screen
  IBF_PARENT_REL = 16 ; относительно родительского окна       ; relative to the parent window
 
  ; Errors
  IBE_NO_ERROR = 0        ; успешно, нет ошибки            ; success
  IBE_NUMBER_OVERFLOW = 1 ; переполнение при вводе числа   ; number greater than 0xFFFFFFFFFFFFFFFF
  IBE_RESULT_TOO_LONG = 2 ; результат не умещается в буфер ; result does not fit into buffer

Я переделал вариант "приложение + библиотека", теперь стало "всё вместе в библиотеке".
Исходники примеров остались без изменений.
Если возражений нет, я закоммичу такой вариант.
Если нужны ещё какие-нибудь примеры — могу сделать ещё.
Вложение:
test(InputBox).7z [1.28 МБ]
15 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 3:15 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4879
В случае с OpenDialog, Марат возможно изначально писал KFM2, потом превратив его в OpenDialog. Что точно знаю, что он хотел на основе OpenDialog потом сделать KFM2.
Возможно отсюда и такая связка.

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 3:44 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
Leency писал(а):
он хотел на основе OpenDialog потом сделать KFM2
Ну это он говорил. А ColorDialog просто по аналогии?


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 5:01 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 417
0CodErr писал(а):
Siemargl писал(а):
Закрытые библиотеки это саботаж 100%
А к чему ты это написал здесь?
Сможешь объяснить? Или так, от нефиг делать?
....

Наверное потому что посчитал это частью дельфийской твоей либы, от которой не нашел исходников, когда хотел натравить на нее фрипаскаль.

А первый пост просто проглядел видимо


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 5:52 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
Siemargl писал(а):
посчитал это частью дельфийской твоей либы
Первый вариант InputBox как раз был с ней собран, но теперь всё в одной библиотеке.
А так как линкера coff->coff нет, то пришлось скопипастить из неё некоторый код.
Если и как только перейдём на PE, то снова можно будет собирать, просто прилинковав эту библиотеку.
Siemargl писал(а):
не нашел исходников
Плохо искал, значит. Папка "Src" там есть. А ещё вон там viewtopic.php?f=33&t=735&p=68255#p68255 есть ссылки на pastebin.


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Пн окт 01, 2018 8:03 pm 
Не в сети

Зарегистрирован: Вт мар 08, 2016 11:00 pm
Сообщения: 417
0CodErr писал(а):
Siemargl писал(а):
посчитал это частью дельфийской твоей либы
Первый вариант InputBox как раз был с ней собран, но теперь всё в одной библиотеке.
А так как линкера coff->coff нет, то пришлось скопипастить из неё некоторый код.
Если и как только перейдём на PE, то снова можно будет собирать, просто прилинковав эту библиотеку.
Siemargl писал(а):
не нашел исходников
Плохо искал, значит. Папка "Src" там есть.....

"Там" это где?

Про СВН в профильной теме


Вернуться к началу
 Заголовок сообщения: Re: InputBox
СообщениеДобавлено: Сб окт 13, 2018 11:00 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1499
Загрузил исходники InputBox на svn( http://websvn.kolibrios.org/listing.php ... 8aa795be26 ) и добавил в автосборку.
Также были добавлены примеры использования InputBox(в папке "Examples").


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 11 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB