Box lib editbox

From KolibriOS wiki
Jump to navigation Jump to search

Introduction

Text field is used when entering text/numeric information.

Functions

  • edit_box_key - this function should be called when you enter the information from the keyboard
  • edit_box_mouse - this function should be called when you enter the information from the mouse
  • edit_box_draw - this function should be called when redrawing.
  • edit_box_set_text - it copies the text from the cursor in the text box. If the text in the index is longer than allowed in edit_box element, it is written not all. After calling this function, you need to redraw the window function edit_box_draw, otherwise the changes are not immediately visible. Example of use:
push dword buf
push dword edit1
call dword [edit_box_set_text]
.........
buf db '111-222-333', 0

where edit1 - edit_box structure element; buf - buffer, which contains the text of the installed.

  • version_ed - version element

editbox structure

editbox structure size is set within box_lib.mac file in ed_struc_size parameter.

struc  edit_box width,left,top,color,shift_color,focus_border_color,\
       blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
{
.width dd width
.left  dd left
.top   dd top
.color dd color
.shift_color dd shift_color
.focus_border_color dd focus_border_color
.blur_border_color  dd blur_border_color
.text_color dd text_color
.max  dd max
.text dd text
.mouse_variable dd mouse_variable
.flags  dd flags+0
.size   dd size+0
.pos    dd pos+0
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift     dd 0
.shift_old dd 0
}
  • width - width of the element
  • left - the left margin
  • top - the top margin
  • color - background color
  • shift_color - color selection by holding [Shift] or mouse
  • focus_border_color - frame color when the field is in focus
  • blur_border_color - frame color when the field is not in focus
  • text_color
  • max - the maximum size of the text (должно быть +2 резервных символа)
  • size - the current length of the text

Flags

ed_figure_only= 1000000000000000b   ;some characters
ed_always_focus= 100000000000000b
ed_focus=                     10b   ;application focus
ed_pass=                       1b   ;password field
ed_shift_on=                1000b   ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift
ed_shift_on_off=1111111111110111b
ed_shift=                    100b   ;включается при нажатии на shift т.е. если нажимаю
ed_shift_off=   1111111111111011b
ed_shift_bac=              10000b   ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение
ed_shift_bac_cl=1111111111101111b   ;очистка при удалении выделения
ed_shift_cl=    1111111111100011b
ed_shift_mcl=   1111111111111011b
ed_left_fl=               100000b
ed_right_fl=    1111111111011111b
ed_offset_fl=            1000000b
ed_offset_cl=   1111111110111111b
ed_insert=              10000000b
ed_insert_cl=   1111111101111111b
ed_mouse_on =          100000000b
ed_mous_adn_b=         100011000b
ed_mouse_on_off=1111111011111111b

Example

use32                  ; use 32-bit command
; standard header
    db 'MENUET01'      ; signature
    dd 1               ; header version
    dd start           ; entry point
    dd i_end           ; initialized size
    dd mem             ; required memory
    dd mem             ; stack pointer
    dd 0               ; parameters
    dd cur_dir_path    ; path

include 'macros.inc'
include 'proc32.inc'
include 'dll.inc'
include 'box_lib.mac'

start:
    ; load libraries
    stdcall dll.Load, @IMPORT_BOXLIB
    test    eax, eax
    jnz     exit
    mcall   40,0x27           ;set up a mask for expected events

red_win:
    call     draw_window      ;initially it is necessary to draw a box

align 4
still:
    mcall    10               ;notifies of an event
    dec      eax
    jz       red_win
    dec      eax
    jz       key
    dec      eax
    jz       button

    push    dword edit1
    call    [edit_box_mouse]

    jmp     still

button:
    mcall   17             ;receive identifier of the pressed key
    test    ah,ah
    jz      still

exit:
    mcall   -1

key:
    mcall   2              ;get the code of the pressed key

    push    dword edit1
    call    [edit_box_key]

    jmp     still

align 4
draw_window:                ;draw application window
    mcall   12,1
    mcall   0,<320,190>,<300,75>,0x33AABBCC,0x805080DD,hed

    push    dword edit1
    call    [edit_box_draw]

    mcall   12,2
   ret

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

hed db 'edit_box example',0

edit1 edit_box 165,10,10,0xffffff,0x6f9480,0,0xAABBCC,0,308,username_buffer,mouse_dd,ed_focus

align 4
@IMPORT_BOXLIB:

library box_lib, 'box_lib.obj'

import  box_lib, \
        edit_box_draw,  'edit_box', \
        edit_box_key,   'edit_box_key', \
        edit_box_mouse, 'edit_box_mouse', \
        version_ed,     'version_ed'

username_buffer    rb 100
;-----------------------

mouse_dd        rd 1
cur_dir_path    rb 4096
i_end:
rb 1024
mem: