Box lib editbox

From KolibriOS wiki
Revision as of 13:43, 24 July 2016 by Nisargshah95 (talk | contribs) (add example code)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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: