Heavyiron
Че то я не врубаюсь - кто из вас пишет компоненту.
На сайте http://www.lrz.land.ru/ компонент от 30.03.2007...
Эффективное программирование в KOLIBRI OS
446 ревизия - сегодняшняя
Я пока не могу залить на свой сайт компонент без бага, т.к. просто не могу зайти по ftp
Ребята, пожалуйста не ссортись. Марат, скачай обновленный компонент с моего сайта, баг пофиксен.
<Lrz>
Спасибо.
Спасибо.
Heavyiron
>Обнаружил еще один глюк в editbox (446). Если выделить всю строку мышью справа налево, то она не удаляется del-ом
Обновил компонент, исправлено.
Mario79
>Выделенная мышью строка при повторном щелчке мышью не очищается.
>А зачем удалил Shift+мышь? ИМХО большие возможности это плюс.
Выделять можно мышкой, причем удерживая любую клавишу. Т.е. если раньше было так - пока не будешь держать shift не выделишь, а сейчас это не имеет никакого значения. Обновления доступны на svn и на моем сайте.
Огромная просьба протестировать компонент на рельной машине, под эмулем у меня все ок, но вот на рельной машине я наблюдал некоторые баги, возможно стоит эмуль скорректировать с текущей версией ядра.
Жду ваших замечаний и предложений.
>Обнаружил еще один глюк в editbox (446). Если выделить всю строку мышью справа налево, то она не удаляется del-ом
Обновил компонент, исправлено.
Mario79
>Выделенная мышью строка при повторном щелчке мышью не очищается.
>А зачем удалил Shift+мышь? ИМХО большие возможности это плюс.
Выделять можно мышкой, причем удерживая любую клавишу. Т.е. если раньше было так - пока не будешь держать shift не выделишь, а сейчас это не имеет никакого значения. Обновления доступны на svn и на моем сайте.
Огромная просьба протестировать компонент на рельной машине, под эмулем у меня все ок, но вот на рельной машине я наблюдал некоторые баги, возможно стоит эмуль скорректировать с текущей версией ядра.
Жду ваших замечаний и предложений.
Итак возникли проблемы с интеграцией новой версией едитбокса:
Т.к. в алгоритм были внесены существенные изменения, то они повлекли новые данные, которые необходимо инициализировать в секции кода вашей программы.
mouse_flag: dd 0x0 используется для хранения указателя на активный бокс, если там не 0 обрабатывается только бокс , чей указатель находится в этой переменной.
structure_of_potock: rb 1024 ;1 кб для получения общей структуры
Т.к. сейчас я получаю гболальные координаты, то эта структура нужна для того что бы можно было узнать координаты окна. можно выделить 100 байт (но в документации для совместимости просят указывать 1 кб.)
Т.к. в алгоритм были внесены существенные изменения, то они повлекли новые данные, которые необходимо инициализировать в секции кода вашей программы.
mouse_flag: dd 0x0 используется для хранения указателя на активный бокс, если там не 0 обрабатывается только бокс , чей указатель находится в этой переменной.
structure_of_potock: rb 1024 ;1 кб для получения общей структуры
Т.к. сейчас я получаю гболальные координаты, то эта структура нужна для того что бы можно было узнать координаты окна. можно выделить 100 байт (но в документации для совместимости просят указывать 1 кб.)
<Lrz>
Новый глюк в последней версии - как только щелкаешь мышью по компоненту, он теряет фокус и его уже никак не вернуть. Если действовать исключительно клавиатурой все нормально.
Новый глюк в последней версии - как только щелкаешь мышью по компоненту, он теряет фокус и его уже никак не вернуть. Если действовать исключительно клавиатурой все нормально.
Проверил на новом эмуляторе, такого бага не обнаружил, напиши по подробнее. Ты уже экспериментируешь над KFM ?
В моем примере такую ошибку я не наблюдал. Могу высказать предположение, что потеря фокуса связана с тем, что не правильно (не верно) выдается координаты после отработки функции
;----------------------------------------------------------
;--- получаем координаты окна, заносятся в структуру structure_of_potock
;----------------------------------------------------------
mov eax,9
mov ebx,structure_of_potock
or ecx,-1
int 0x40
Хотя все очень странно.....
В моем примере такую ошибку я не наблюдал. Могу высказать предположение, что потеря фокуса связана с тем, что не правильно (не верно) выдается координаты после отработки функции
;----------------------------------------------------------
;--- получаем координаты окна, заносятся в структуру structure_of_potock
;----------------------------------------------------------
mov eax,9
mov ebx,structure_of_potock
or ecx,-1
int 0x40
Хотя все очень странно.....
[offtop]
ребята, а не проще поставить тот же Mantis или Bugzilla???
А то ветку загадили: "нашел баг" - "пофиксено", "нашел еще" - "пофиксено", "и еще" - "уже исправил"...
А ведь тема называлась "Эффективное программирование в KOLIBRI OS".
Насколько я знаю на ваш сервер можно поставить любую срань...
Ну это так ИМХО и сорри за офттоп
[/offtop]
ребята, а не проще поставить тот же Mantis или Bugzilla???
А то ветку загадили: "нашел баг" - "пофиксено", "нашел еще" - "пофиксено", "и еще" - "уже исправил"...
А ведь тема называлась "Эффективное программирование в KOLIBRI OS".
Насколько я знаю на ваш сервер можно поставить любую срань...
Ну это так ИМХО и сорри за офттоп
[/offtop]
Изначально тема задумывалась, как создание методов, алгоритмов, и рекомендаций по написанию эффективного кода на ассемблере для Колибри. Однако первые мои опыты были не очень удачным примером того как нужно программировать, скорее они были как не нужно программировать. Еще один недостаток, который я заметил у многих программ, это перерисовка всего окна при смене или изменении небольшого объекта в окне. В своих работах, я, по возможности отхожу от этого, конечно неимоверно усложняется код, но зато нет ничего лишнего и ни что не напрягает глаз...
Со времененм, да бы не ткрывать другую ветку, в этой были размещены ссылки на мои работы. Конечно, сейчас, это больше напоминает свалку: "нашел" , "исправил" .....
Если будет другая альтернатива, то я обязательно воспользуюсь ей.
Со времененм, да бы не ткрывать другую ветку, в этой были размещены ссылки на мои работы. Конечно, сейчас, это больше напоминает свалку: "нашел" , "исправил" .....
Если будет другая альтернатива, то я обязательно воспользуюсь ей.
<Lrz>
Чтобы было от чего оттолкнуться - у меня реализовано так:
;-------------------------------------------------------------
editbox_copy_name:
mcall 66, 1, 0
jmp .red
.red_1:
call draw_window
.red:
call draw_editbox_copy_name
.still:
mcall 10
cmp eax,1
je .red_1
cmp eax,2
je .key_copy
cmp eax,3
je .button_copy
mouse_edit_boxes copy_editboxes,copy_editboxes_end
jmp .still
;-------------------------------------------------------------
.button_copy:
mov eax,17
int 0x40
test ah,ah
jz .still
cmp ah,160
je .exit_with_copy
cmp ah,161
je .exit_without_copy
cmp ah,1
jne .still
mcall -1
.exit_with_copy:
mov [max_progress_value],1
call copy_file_1
cmp [move_file_flag],0
je @f
call del_file
test eax,eax
jz @f
call start_error_window_thread
@@:
call proc_read_left_folder
call proc_read_right_folder
.exit_without_copy:
mcall 66, 1, 1
mov [move_file_flag],0
jmp red
;-------------------------------------------------------------
.key_copy:
mov eax,2
int 0x40
cmp ah,13
je .exit_with_copy
cmp ah,27
je .exit_without_copy
key_edit_boxes copy_editboxes,copy_editboxes_end
jmp .still
;-------------------------------------------------------------
draw_editbox_copy_name:
mov ecx,[window_high]
mov ebx,[window_width]
shr ecx,1
shr ebx,1
sub ecx,30
sub ebx,87
shl ecx,16
shl ebx,16
mov cx,60
mov bx,174
mcall 13, , ,0x6060ff ;0xff
pusha
shr ebx,16
add ebx,10
shr ecx,16
add ecx,17
mov eax,copy_editboxes
mov dword [eax+4],ebx
mov dword [eax+8],ecx
draw_edit_boxes copy_editboxes,copy_editboxes_end
popa
pusha
add ebx,70 shl 16
add ecx,37 shl 16
mov cx,15
mov bx,40
mov esi,0xffffff
mov edx,0x40000000+160
mov eax,8
int 0x40
add ebx,50 shl 16
inc edx
int 0x40
popa
push ebx ecx
add ebx,70 shl 16
add ecx,37 shl 16
mov bx,40
mov cx,15
mov edx,0
push ebx ecx
sub ecx,1 shl 16
sub ebx,1 shl 16
mov bx,42
mov cx,17
int 0x40
add ebx,50 shl 16
int 0x40
pop ecx ebx
mov edx,0xff7700
int 0x40
mov edx,0xaa00
add ebx,50 shl 16
int 0x40
pop ecx ebx
shr ecx,16
mov bx,cx
add ebx,60 shl 16+5
cmp [move_file_flag],0
je .copy
mov edx,move_type_1
jmp @f
.copy:
mov edx,copy_type_1
@@:
mcall 4, ,0x90ffffff
add ebx,18 shl 16+36
mov edx,type_yes
int 0x40
add ebx,56 shl 16
mov edx,type_no
int 0x40
ret
;-------------------------------------------------------------
Чтобы было от чего оттолкнуться - у меня реализовано так:
;-------------------------------------------------------------
editbox_copy_name:
mcall 66, 1, 0
jmp .red
.red_1:
call draw_window
.red:
call draw_editbox_copy_name
.still:
mcall 10
cmp eax,1
je .red_1
cmp eax,2
je .key_copy
cmp eax,3
je .button_copy
mouse_edit_boxes copy_editboxes,copy_editboxes_end
jmp .still
;-------------------------------------------------------------
.button_copy:
mov eax,17
int 0x40
test ah,ah
jz .still
cmp ah,160
je .exit_with_copy
cmp ah,161
je .exit_without_copy
cmp ah,1
jne .still
mcall -1
.exit_with_copy:
mov [max_progress_value],1
call copy_file_1
cmp [move_file_flag],0
je @f
call del_file
test eax,eax
jz @f
call start_error_window_thread
@@:
call proc_read_left_folder
call proc_read_right_folder
.exit_without_copy:
mcall 66, 1, 1
mov [move_file_flag],0
jmp red
;-------------------------------------------------------------
.key_copy:
mov eax,2
int 0x40
cmp ah,13
je .exit_with_copy
cmp ah,27
je .exit_without_copy
key_edit_boxes copy_editboxes,copy_editboxes_end
jmp .still
;-------------------------------------------------------------
draw_editbox_copy_name:
mov ecx,[window_high]
mov ebx,[window_width]
shr ecx,1
shr ebx,1
sub ecx,30
sub ebx,87
shl ecx,16
shl ebx,16
mov cx,60
mov bx,174
mcall 13, , ,0x6060ff ;0xff
pusha
shr ebx,16
add ebx,10
shr ecx,16
add ecx,17
mov eax,copy_editboxes
mov dword [eax+4],ebx
mov dword [eax+8],ecx
draw_edit_boxes copy_editboxes,copy_editboxes_end
popa
pusha
add ebx,70 shl 16
add ecx,37 shl 16
mov cx,15
mov bx,40
mov esi,0xffffff
mov edx,0x40000000+160
mov eax,8
int 0x40
add ebx,50 shl 16
inc edx
int 0x40
popa
push ebx ecx
add ebx,70 shl 16
add ecx,37 shl 16
mov bx,40
mov cx,15
mov edx,0
push ebx ecx
sub ecx,1 shl 16
sub ebx,1 shl 16
mov bx,42
mov cx,17
int 0x40
add ebx,50 shl 16
int 0x40
pop ecx ebx
mov edx,0xff7700
int 0x40
mov edx,0xaa00
add ebx,50 shl 16
int 0x40
pop ecx ebx
shr ecx,16
mov bx,cx
add ebx,60 shl 16+5
cmp [move_file_flag],0
je .copy
mov edx,move_type_1
jmp @f
.copy:
mov edx,copy_type_1
@@:
mcall 4, ,0x90ffffff
add ebx,18 shl 16+36
mov edx,type_yes
int 0x40
add ebx,56 shl 16
mov edx,type_no
int 0x40
ret
;-------------------------------------------------------------
Выскажу предположение:
1 версия. У тебя код мышки обрабатывает основной поток программы т.е. как я понял ты создаешь новый поток и в него выводишь уже сообщение и editbox. А мышку ты обрабатываешь старым потоком. Т.е. у тебя два потока основной и второй где прорисовывается eidtbox. Как следствие тебе нужно сделать так чтобы второй поток обрабатывал код мышки.
2 версия у тебя при вызове 9 функции, которую я привет по адресам dword [structure_of_potock +34] и dword [structure_of_potock +38] расположены координаты основного потока. Если ты вызываешь обработчики мышки в уже сформированном потоке.
Если это так то это уже баг сис функции или фитча.
Если тебе не сложно вышли мне на мыло полностью код KFM, я разберусь вчем дело.
1 версия. У тебя код мышки обрабатывает основной поток программы т.е. как я понял ты создаешь новый поток и в него выводишь уже сообщение и editbox. А мышку ты обрабатываешь старым потоком. Т.е. у тебя два потока основной и второй где прорисовывается eidtbox. Как следствие тебе нужно сделать так чтобы второй поток обрабатывал код мышки.
2 версия у тебя при вызове 9 функции, которую я привет по адресам dword [structure_of_potock +34] и dword [structure_of_potock +38] расположены координаты основного потока. Если ты вызываешь обработчики мышки в уже сформированном потоке.
Если это так то это уже баг сис функции или фитча.
Если тебе не сложно вышли мне на мыло полностью код KFM, я разберусь вчем дело.
<Lrz>
Поток у меня один.
Второй поток запускается только для сообщения об ошибке файловой системы.
Поток у меня один.
Второй поток запускается только для сообщения об ошибке файловой системы.
Так .... без пол литра не обойтись... у меня есть отладочный код, с момощью него можно выявить что находится в eax, и по адресам dword [structure_of_potock +34] и dword [structure_of_potock+38].
Но лучше дай мне посмотреть исходный код KFM мое мыло 200_u_200{at}mail.ru
Но лучше дай мне посмотреть исходный код KFM мое мыло 200_u_200{at}mail.ru
Who is online
Users browsing this forum: No registered users and 15 guests