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

Discussing libraries simplifying applications development
  • punk_joker wrote:В edit'ах при включенном capslock'е символы вводятся как бы с shift'ом.
    А как, по твоему, они должны? CapsLock, по твоему, за что отвечает вообще? Фраза "Ты зачем пишешь КАПСОМ?" ни о чем не напоминает?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Уточню, становится невозможен ввод цифр без нажатия shift, или отключения capslock. Обычно capslock влияет на регистр букв.
    to infinity and beyond
  • punk_joker wrote:Уточню, становится невозможен ввод цифр без нажатия shift, или отключения capslock. Обычно capslock влияет на регистр букв.
    Да, вот теперь фраза выглядит логично. Это не edit_box, а на уровне системы я добавлял поддержку CapsLock. Надо будет код ядра посмотреть.

    З.Ы. Да, проблема так просто не решается. Дело осложняется тем, что в разных раскладках буквы могут присутствовать на не совпадающих клавишах. На английской раскладке букв меньше, а на русской больше и как отлавливать случай с русской кодировкой, если там нет английской буквы. А ведь есть и другие раскладки кроме русской и английской. Пожалуй оставлю я все как есть, выключить CAPS LOCK пользователем - вполне вариант. Если у кого есть нестерпимое желание решить этот вопрос кодированием, то я ему мешать не стану.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • SVN r.3830 компонент FileBrowser поддерживает поиск файлов по первой букве. Используются данные активной в текущий момент раскладки клавиатуры.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Для чего служит флаг "фокус приложения" у editbox'а?
    to infinity and beyond
  • Для реализации переключения фокуса, же! Представь, что у тебя более одного editbox и все они показывают курсор, а поскольку он не мигающий, то как ты однозначно определишь в какой editbox будет занесен текст?
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Моя структура (на всякий случай):
    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, но не сработало, может и и в другом ошибся, или вообще не так делается?
    to infinity and beyond
  • Я для OpenDialog переменную делал отдельную в качестве указателя.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • 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
  • SVN r.4000 - поправлен компонент Filebrowser.. Теперь пустой слот не выделяется, в случае если ничего не отображается компонентом, т.е. список пустой.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Нужна помощь по компоненту optionbox - прочитал много доков и исходников, но так для себя и не уяснил самый главный момент - как в программе определить, какой из чекбоксов выбран в данный момент?
  • Heavyiron wrote:Нужна помощь по компоненту optionbox - прочитал много доков и исходников, но так для себя и не уяснил самый главный момент - как в программе определить, какой из чекбоксов выбран в данный момент?
    ЕМНИП там побитовый указатель.

    UPD А нет наврал. Там возвращается указатель на текущий чебокс. Можешь посмотреть в исходниках zSea, в частности в win_bcgr.inc
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Хочется более подробно - совсем для дурака...
  • 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, которая задана в каждом из блоков определяющем каждую возможную линию.

    Я уж не знаю как еще проще объяснить.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Who is online

    Users browsing this forum: No registered users and 3 guests