Page 18 of 29

Posted: Mon Jul 15, 2013 12:37 pm
by punk_joker
В edit'ах при включенном capslock'е символы вводятся как бы с shift'ом.

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

Posted: Mon Jul 15, 2013 12:39 pm
by Mario_r4
punk_joker wrote:В edit'ах при включенном capslock'е символы вводятся как бы с shift'ом.
А как, по твоему, они должны? CapsLock, по твоему, за что отвечает вообще? Фраза "Ты зачем пишешь КАПСОМ?" ни о чем не напоминает?

Posted: Mon Jul 15, 2013 3:09 pm
by punk_joker
Уточню, становится невозможен ввод цифр без нажатия shift, или отключения capslock. Обычно capslock влияет на регистр букв.

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

Posted: Mon Jul 15, 2013 11:52 pm
by Mario_r4
punk_joker wrote:Уточню, становится невозможен ввод цифр без нажатия shift, или отключения capslock. Обычно capslock влияет на регистр букв.
Да, вот теперь фраза выглядит логично. Это не edit_box, а на уровне системы я добавлял поддержку CapsLock. Надо будет код ядра посмотреть.

З.Ы. Да, проблема так просто не решается. Дело осложняется тем, что в разных раскладках буквы могут присутствовать на не совпадающих клавишах. На английской раскладке букв меньше, а на русской больше и как отлавливать случай с русской кодировкой, если там нет английской буквы. А ведь есть и другие раскладки кроме русской и английской. Пожалуй оставлю я все как есть, выключить CAPS LOCK пользователем - вполне вариант. Если у кого есть нестерпимое желание решить этот вопрос кодированием, то я ему мешать не стану.

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

Posted: Tue Jul 23, 2013 1:46 am
by Mario_r4
SVN r.3830 компонент FileBrowser поддерживает поиск файлов по первой букве. Используются данные активной в текущий момент раскладки клавиатуры.

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

Posted: Tue Aug 06, 2013 11:24 pm
by punk_joker
Для чего служит флаг "фокус приложения" у editbox'а?

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

Posted: Wed Aug 07, 2013 12:17 am
by Mario_r4
Для реализации переключения фокуса, же! Представь, что у тебя более одного editbox и все они показывают курсор, а поскольку он не мигающий, то как ты однозначно определишь в какой editbox будет занесен текст?

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

Posted: Sat Aug 10, 2013 8:35 pm
by punk_joker
Моя структура (на всякий случай):
edit_box edit_disk_size= {60,48,5,0xffffff,0x94AECE,0x000000,0xffffff,0,sizeof(disk_size)+2,#disk_size,#mouse_dd, 1000000000000000b};

Теперь собственно вопрос, как проверить активный edit или нет? Пробовал проверять равно ли edit_disk_size.flags значению 10b или 1000000000000010b, но не сработало, может и и в другом ошибся, или вообще не так делается?

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

Posted: Sat Aug 10, 2013 10:35 pm
by Mario_r4
Я для OpenDialog переменную делал отдельную в качестве указателя.

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

Posted: Sun Aug 11, 2013 10:33 am
by 0CodErr
punk_joker, нужно проверять не значение, а бит.
Например, так:

Code: Select all

ED_FOCUS equ 10b
; ..........................................
        test   [edit_box.flags], dword ED_FOCUS
        jz     .not_focus
или так:

Code: Select all

ED_FOCUS equ 10b
; ..........................................       
        bt     dword [edit_box.flags], 1 ; первый бит, начиная с нулевого
        jnc    .not_focus

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

Posted: Thu Oct 10, 2013 3:06 am
by Mario_r4
SVN r.4000 - поправлен компонент Filebrowser.. Теперь пустой слот не выделяется, в случае если ничего не отображается компонентом, т.е. список пустой.

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

Posted: Tue Oct 15, 2013 6:28 pm
by Heavyiron
Нужна помощь по компоненту optionbox - прочитал много доков и исходников, но так для себя и не уяснил самый главный момент - как в программе определить, какой из чекбоксов выбран в данный момент?

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

Posted: Tue Oct 15, 2013 6:39 pm
by Mario_r4
Heavyiron wrote:Нужна помощь по компоненту optionbox - прочитал много доков и исходников, но так для себя и не уяснил самый главный момент - как в программе определить, какой из чекбоксов выбран в данный момент?
ЕМНИП там побитовый указатель.

UPD А нет наврал. Там возвращается указатель на текущий чебокс. Можешь посмотреть в исходниках zSea, в частности в win_bcgr.inc

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

Posted: Sat Oct 19, 2013 8:36 pm
by Heavyiron
Хочется более подробно - совсем для дурака...

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

Posted: Sat Oct 19, 2013 9:20 pm
by Mario_r4
Heavyiron wrote:Хочется более подробно - совсем для дурака...
Ну, вот достаточно простой пример - окно выбора режима сортировки файлов в zSea, т.е. файл win_sort.inc
Spoiler:

Code: Select all

;---------------------------------------------------------------------
k_sort_directory:
	test	dword [status],16
	jnz	still
	or	dword [status],16

	call	get_memory_for_thread_stack
	mov	[thread_stack_5],eax
	mcall	51,1,thread5	; thread_stack_5
	jmp	still
;---------------------------------------------------------------------
thread5:				; start of bgrd thread
	mcall	9,procinfo_threads,-1
	mov	eax,[ebx+30]
	mov	[PID5],eax
	mcall	40,0x27
	mov	eax,[sort_type]
	cmp	[sort_type],dword 0
	jne	@f
	
	mov	[option_group2],sort0
	jmp	.thread5
;---------------------------------------------------------------------
@@:
	cmp	[sort_type],dword 2
	jne	@f
	
	mov	[option_group2],sort2
	jmp	.thread5
;---------------------------------------------------------------------
@@:
	cmp	[sort_type],dword 4
	jne	@f
	
	mov	[option_group2],sort4
	jmp	.thread5
;---------------------------------------------------------------------
@@:
	mov	[option_group2],sort6
;-----------------------------------
.thread5:
	mov	[sort_type_old],eax
	mov	eax,[option_group2]
	mov	[option_group2_old],eax
;-----------------------------------
.red:
	call	.draw_window
;-----------------------------------
.still:
	mcall	10	; wait here for event

	cmp	eax,1	; redraw request ?
	je	.red

	cmp	eax,2	; key in buffer ?
	je	.key

	cmp	eax,3	; button in buffer ?
	je	.button

	cmp	eax,6	; mouse in buffer ?
	je	.mouse

	jmp	.still
;---------------------------------------------------------------------
.mouse:
	push	dword option_boxes_sort
	call	[option_box_mouse]

	cmp	[option_group2],sort0
	jne	@f
	
	mov	[sort_type],dword 0
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[option_group2],sort2
	jne	@f
	
	mov	 [sort_type],dword 2
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[option_group2],sort4
	jne	@f
	
	mov	[sort_type],dword 4
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[option_group2],sort6
	jne	@f
	
	mov	[sort_type],dword 6
	jmp	.still
;---------------------------------------------------------------------
.key:
	mcall
	cmp	ah,27
	je	.close

	cmp	ah,13
	je	.kok

	cmp	ah,177 ;down
	je	.fdn

	cmp	ah,178 ;up
	jne	.still

	cmp	[sort_type],0
	je	.still
	
	sub	[sort_type],2
	jmp	.flagcont
;---------------------------------------------------------------------
.fdn:
	cmp	[sort_type],6
	je	.still
	
	add	[sort_type],2
	
.flagcont:
	cmp	[sort_type],dword 0
	jne	@f
	
	mov	[option_group2],sort0
	call	.draw_opt_boxes
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[sort_type],dword 2
	jne	@f
	
	mov	[option_group2],sort2
	call	.draw_opt_boxes
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[sort_type],dword 4
	jne	@f
	
	mov	[option_group2],sort4
	call	.draw_opt_boxes
	jmp	.still
;---------------------------------------------------------------------
@@:
	cmp	[sort_type],dword 6
	jne	.still	;@f
	
	mov	[option_group2],sort6
	call	.draw_opt_boxes
	jmp	.still
;---------------------------------------------------------------------
.button:			 ; button
	mcall	17 		; get id
	cmp	ah,1			; button id=1 ?
	jne	.noclose
;-------------------------------
.close:
	mov	eax,[sort_type_old]
	mov	[sort_type],eax
	mov	eax,[option_group2_old]
	mov	[option_group2],eax
.close_1:
	xor	dword [status],16
	xor	eax,eax
	mov	[PID5],eax
	mcall	68,13,[thread_stack_5]
	mcall	-1 		; close this program
;---------------------------------------------------------------------
.noclose:
.kok:
	mov	eax,[load_directory_pointer]
	cmp	[eax+4],dword 0
	je	.close_1
	
	call	load_directory.copy_dir_path
	call	load_directory.sort
	mov	[sort_directory_flag],byte 1
	jmp	.close_1
;---------------------------------------------------------------------
;	 *********************************************
;	 ******** WINDOW DEFINITIONS AND DRAW ********
;	 *********************************************
.draw_window:
	mcall	12,1
	xor	eax,eax			 ; function 0 : define and draw window
	xor	esi,esi
	mcall	,<100,300>,<100,110>,0x13909090,,labelt5
	mcall	8,<120,40>,<50,20>,4,0xdddddd
	mcall	4,<46,28>,0xffffff,sorttext,sorttext.size
	xor	ecx,ecx
	mcall	,<135,57>,,ok_btn,ok_btn.size
	call	.draw_opt_boxes
;	mcall	47,0x80000,[PID5],<200, 5>,0xffffff
	mcall	12,2
	ret
;---------------------------------------------------------------------
.draw_opt_boxes:
	push	dword option_boxes_sort
	call	[option_box_draw]
	ret
;---------------------------------------------------------------------
Блок данных для optionbox расположен в файле data.inc
Spoiler:

Code: Select all

;---------------------------------------------------------------------
align 4
;option_boxes_sort:
sort0 option_box option_group2,60,40,6,12,0xFFFFFF,0,0xffffff,op_text_1.1,op_text_1.e1-op_text_1.1
sort2 option_box option_group2,60,55,6,12,0xFFFFFF,0,0xffffff,op_text_1.2,op_text_1.e2-op_text_1.2
sort4 option_box option_group2,60,70,6,12,0xFFFFFF,0,0xffffff,op_text_1.3,op_text_1.e3-op_text_1.3
sort6 option_box option_group2,60,85,6,12,0xFFFFFF,0,0xffffff,op_text_1.4,op_text_1.e4-op_text_1.4
option_boxes_sort_end:

op_text_1:
.1 db 'Name'
.e1:
.2 db 'Type'
.e2:
.3 db 'Date'
.e3:
.4 db 'Size'
.e4:

option_group2   dd sort2
option_group2_old dd 0

option_boxes_sort       dd sort0, sort2, sort4, sort6,0
Как видно в коде считывается указатель на текущий выбранный optionbox - sort0 или sort2 или sort4 или sort6, значение хранится в переменной option_group2, которая задана в каждом из блоков определяющем каждую возможную линию.

Я уж не знаю как еще проще объяснить.