box_lib.obj - библиотека gui компонентов

Discussing libraries simplifying applications development
  • У edit_box-а после вызова edit_box_set_text не пропадает выделение, если оно было до вызова.
  • 0CodErr wrote:У edit_box-а после вызова edit_box_set_text не пропадает выделение, если оно было до вызова.
    Исправил в ревизии 2898
  • В каком формате возвращает значение форма для ввода данных, с флагом ввода только цифр?
    to infinity and beyond
  • punk_joker wrote:В каком формате возвращает значение форма для ввода данных, с флагом ввода только цифр?
    Каким образом возвращает? Если подразумевается указатель text в структуре editbox, то там по указателю будет строка текста.
    Вообще флаг ввода только цифр ничего не преобразовывает в числовой формат, он просто фильтрует попытки ввода не числовых символов.
  • Вообще можно сделать чтобы возвращалось целое число, но такой метод не гибкий и по идее выходит за рамки логической целесообразности.
  • Ну я так и думал насчет возвращаемого значения. И еще, есть у кого процедурка или макрос для преобразования этой строки в число? А то не хочется лишний раз велосипед изобретать, а учитывая мой опыт на фасме это дело может затянуться.
    to infinity and beyond
  • есть функция, только она для целочисленных значений (без плавающей точки)
    Spoiler:

    Code: Select all

    ;input:
    ; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
    ;output:
    ; eax - число
    align 4
    proc conv_str_to_int, buf:dword
    	xor eax,eax
    	push ebx ecx esi
    	xor ebx,ebx
    	mov esi,[buf]
    
    	;на случай если перед числом находятся пробелы
    	@@:
    	cmp byte[esi],' '
    	jne @f
    		inc esi
    		jmp @b
    	@@:
    
    	;определение отрицательных чисел
    	xor ecx,ecx
    	inc ecx
    	cmp byte[esi],'-'
    	jne @f
    		dec ecx
    		inc esi
    	@@:
    
    	cmp word[esi],'0x'
    	je .load_digit_16
    
    	.load_digit_10: ;считывание 10-тичных цифр
    		mov bl,byte[esi]
    		cmp bl,'0'
    		jl @f
    		cmp bl,'9'
    		jg @f
    			sub bl,'0'
    			imul eax,10
    			add eax,ebx
    			inc esi
    			jmp .load_digit_10
    	jmp @f
    
    	.load_digit_16: ;считывание 16-ричных цифр
    		add esi,2
    	.cycle_16:
    		mov bl,byte[esi]
    		cmp bl,'0'
    		jl @f
    		cmp bl,'f'
    		jg @f
    		cmp bl,'9'
    		jle .us1
    			cmp bl,'A'
    			jl @f ;отсеиваем символы >'9' и <'A'
    		.us1: ;составное условие
    		cmp bl,'F'
    		jle .us2
    			cmp bl,'a'
    			jl @f ;отсеиваем символы >'F' и <'a'
    			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
    		.us2: ;составное условие
    			sub bl,'0'
    			cmp bl,9
    			jle .cor1
    				sub bl,7 ;convert 'A' to '10'
    			.cor1:
    			shl eax,4
    			add eax,ebx
    			inc esi
    			jmp .cycle_16
    	@@:
    	cmp ecx,0 ;если число отрицательное
    	jne @f
    		sub ecx,eax
    		mov eax,ecx
    	@@:
    	pop esi ecx ebx
    	ret
    endp
  • punk_joker

    Например так.
    Attachments
    hda_tester.7z (17.25 KiB)
    Downloaded 366 times
  • Вопрос по option_box. Куда заноситсю значение? Если я правильно понимаю, то если пункт выбран, то возвращает значение 1, иначе 0. Но куда это значение возвращается?
    to infinity and beyond
  • Asper спасибо за исходничек, многое помог понять.
    to infinity and beyond
  • Второй пост в вверх. Подскажите.
    to infinity and beyond
  • http://websvn.kolibrios.org/filedetails ... ox_lib.mac
    Spoiler:

    Code: Select all

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;Basic macros for use OptionBox                           ;
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    
    struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags
    
    {        ;структура параметров для чек бокса
    op_flag_en=10b
    .option_group: dd point_gr
    .left: dw left       ;+0 ;положение по х
    .top:  dw top        ;положение по у
    .ch_text_margin:  dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи
    .ch_size: dd op_size ;размер квадрата чек бокса, для примера 12
    .color:   dd color   ;цвет внутри чекбокса
    .border_color: dd border_color ;цвет рамки
    .text_color:   dd text_color   ;цвет надписи
    .text: dd text                 ;адрес в коде программы где расположен текст
    .ch_text_length: dd op_text_length ;длинна строки с символами
    .flags: dd flags+0   ; флаги
    }
    
    .flags: dd flags+0 ; флаги
  • Устанавливаю для скроллбара такие параметры:

    Code: Select all

    scrollbar:
      .size_x         dw 15
      .start_x        dw 20
      .size_y         dw 300
      .start_y        dw 20
      .btn_high       dd 15
      .type           dd 1
      .max_area       dd 30
      .cur_area       dd 7
      .position       dd 0
      .bckg_col       dd 0xEEEEEE
      .frnt_col       dd 0xBBDDFF
      .line_col       dd 0
      .redraw         dd 0
      .delta          dw 0
      .delta2         dw 0
      .r_size_x       dw 0
      .r_start_x      dw 0
      .r_size_y       dw 0
      .r_start_y      dw 0
      .m_pos          dd 0
      .m_pos_2        dd 0
      .m_keys         dd 0
      .run_size       dd 0
      .position2      dd 0
      .work_size      dd 0
      .all_redraw     dd 1
      .ar_offset      dd 10
    Если передвинуть ползунок до конца вниз, то .position = 24.
    Теперь, если нажать на скроллбаре кнопку со стрелочкой вниз, то .position = 23.
  • Должен ли edit_box терять фокус при нажатии на кнопку(событие с кодом 3)?
  • Who is online

    Users browsing this forum: No registered users and 2 guests