Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Nov 20, 2019 4:15 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 11 posts ] 
Author Message
 Post subject: InputBox
PostPosted: Fri Sep 28, 2018 6:03 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Начал делать компонент 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
InputBox1.png [ 15.71 KiB | Viewed 4570 times ]
Attachment:
InputBox2.png
InputBox2.png [ 13.83 KiB | Viewed 4570 times ]
Можно проверить, как это работает, есть сборка уже вместе с InputBox, в ней есть папка "$$$_TEST_$$$", там примеры, использующие InputBox.
Исходники примеров в TEST_SRC.7z:
    один на ассемблере собирается с помощью UASM
    другой на C — с помощью BCC32
Там же и исходники самого InputBoxInputBox_SRC.7z.
Attachment:
test(InputBox).7z [1.25 MiB]
Downloaded 55 times


Top
   
 Post subject: Re: InputBox
PostPosted: Fri Sep 28, 2018 8:49 pm 
Offline

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


Top
   
 Post subject: Re: InputBox
PostPosted: Fri Sep 28, 2018 10:34 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
Закрытые библиотеки это саботаж 100%


Top
   
 Post subject: Re: InputBox
PostPosted: Fri Sep 28, 2018 10:54 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
Похоже исходник лежит в kolibri.img\$$$_TEST_$$$\InputBox_SRC.7z\lib\InputBox.asm

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


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 2:57 pm 
Offline

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


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

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

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

Теперь поддерживается ввод 64-битных чисел.
Добавился ещё один код ошибки IBE_RESULT_TOO_LONG. Все константы:
Code:
  ; 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

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


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 3:15 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5066
В случае с OpenDialog, Марат возможно изначально писал KFM2, потом превратив его в OpenDialog. Что точно знаю, что он хотел на основе OpenDialog потом сделать KFM2.
Возможно отсюда и такая связка.

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


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 3:44 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Leency wrote:
он хотел на основе OpenDialog потом сделать KFM2
Ну это он говорил. А ColorDialog просто по аналогии?


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 5:01 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
0CodErr wrote:
Siemargl wrote:
Закрытые библиотеки это саботаж 100%
А к чему ты это написал здесь?
Сможешь объяснить? Или так, от нефиг делать?
....

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

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


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 5:52 pm 
Offline

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


Top
   
 Post subject: Re: InputBox
PostPosted: Mon Oct 01, 2018 8:03 pm 
Offline

Joined: Tue Mar 08, 2016 11:00 pm
Posts: 436
0CodErr wrote:
Siemargl wrote:
посчитал это частью дельфийской твоей либы
Первый вариант InputBox как раз был с ней собран, но теперь всё в одной библиотеке.
А так как линкера coff->coff нет, то пришлось скопипастить из неё некоторый код.
Если и как только перейдём на PE, то снова можно будет собирать, просто прилинковав эту библиотеку.
Siemargl wrote:
не нашел исходников
Плохо искал, значит. Папка "Src" там есть.....

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

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


Top
   
 Post subject: Re: InputBox
PostPosted: Sat Oct 13, 2018 11:00 am 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 11 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: Google [Bot] and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited