Ну или хотябы не самые сложные примеры.IgorA wrote:Простых примеров скорее всего нет. Есть примеры которые есть используют сразу несколько элементов.
box_lib.obj - библиотека gui компонентов
-
to infinity and beyond
У edit_box-а после вызова edit_box_set_text не пропадает выделение, если оно было до вызова.
Исправил в ревизии 28980CodErr wrote:У edit_box-а после вызова edit_box_set_text не пропадает выделение, если оно было до вызова.
В каком формате возвращает значение форма для ввода данных, с флагом ввода только цифр?
to infinity and beyond
Каким образом возвращает? Если подразумевается указатель text в структуре editbox, то там по указателю будет строка текста.punk_joker wrote:В каком формате возвращает значение форма для ввода данных, с флагом ввода только цифр?
Вообще флаг ввода только цифр ничего не преобразовывает в числовой формат, он просто фильтрует попытки ввода не числовых символов.
Вообще можно сделать чтобы возвращалось целое число, но такой метод не гибкий и по идее выходит за рамки логической целесообразности.
Ну я так и думал насчет возвращаемого значения. И еще, есть у кого процедурка или макрос для преобразования этой строки в число? А то не хочется лишний раз велосипед изобретать, а учитывая мой опыт на фасме это дело может затянуться.
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 364 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 ; флаги
Устанавливаю для скроллбара такие параметры:
Если передвинуть ползунок до конца вниз, то .position = 24.
Теперь, если нажать на скроллбаре кнопку со стрелочкой вниз, то .position = 23.
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 = 23.
Должен ли edit_box терять фокус при нажатии на кнопку(событие с кодом 3)?
Who is online
Users browsing this forum: No registered users and 18 guests