Page 6 of 8

Posted: Mon Apr 02, 2007 4:38 pm
by Mario79
Heavyiron
Че то я не врубаюсь - кто из вас пишет компоненту. :-)

На сайте http://www.lrz.land.ru/ компонент от 30.03.2007...

Posted: Mon Apr 02, 2007 4:43 pm
by Heavyiron
446 ревизия - сегодняшняя ;)

Posted: Mon Apr 02, 2007 4:59 pm
by <Lrz>
Я пока не могу залить на свой сайт компонент без бага, т.к. просто не могу зайти по ftp

Posted: Tue Apr 03, 2007 7:11 am
by <Lrz>
Ребята, пожалуйста не ссортись. Марат, скачай обновленный компонент с моего сайта, баг пофиксен.

Posted: Tue Apr 03, 2007 7:25 am
by Mario79
<Lrz>
Спасибо.

Posted: Wed Apr 04, 2007 9:51 am
by <Lrz>
Heavyiron
>Обнаружил еще один глюк в editbox (446). Если выделить всю строку мышью справа налево, то она не удаляется del-ом

Обновил компонент, исправлено.

Mario79
>Выделенная мышью строка при повторном щелчке мышью не очищается.
>А зачем удалил Shift+мышь? ИМХО большие возможности это плюс.
Выделять можно мышкой, причем удерживая любую клавишу. Т.е. если раньше было так - пока не будешь держать shift не выделишь, а сейчас это не имеет никакого значения. Обновления доступны на svn и на моем сайте.

Огромная просьба протестировать компонент на рельной машине, под эмулем у меня все ок, но вот на рельной машине я наблюдал некоторые баги, возможно стоит эмуль скорректировать с текущей версией ядра.
Жду ваших замечаний и предложений.

Posted: Wed Apr 04, 2007 4:05 pm
by <Lrz>
Итак возникли проблемы с интеграцией новой версией едитбокса:
Т.к. в алгоритм были внесены существенные изменения, то они повлекли новые данные, которые необходимо инициализировать в секции кода вашей программы.
mouse_flag: dd 0x0 используется для хранения указателя на активный бокс, если там не 0 обрабатывается только бокс , чей указатель находится в этой переменной.
structure_of_potock: rb 1024 ;1 кб для получения общей структуры
Т.к. сейчас я получаю гболальные координаты, то эта структура нужна для того что бы можно было узнать координаты окна. можно выделить 100 байт (но в документации для совместимости просят указывать 1 кб.)

Posted: Thu Apr 05, 2007 7:50 am
by Mario79
<Lrz>
Новый глюк в последней версии - как только щелкаешь мышью по компоненту, он теряет фокус и его уже никак не вернуть. Если действовать исключительно клавиатурой все нормально.

Posted: Thu Apr 05, 2007 8:10 am
by <Lrz>
Проверил на новом эмуляторе, такого бага не обнаружил, напиши по подробнее. Ты уже экспериментируешь над KFM ?
В моем примере такую ошибку я не наблюдал. Могу высказать предположение, что потеря фокуса связана с тем, что не правильно (не верно) выдается координаты после отработки функции
;----------------------------------------------------------
;--- получаем координаты окна, заносятся в структуру structure_of_potock
;----------------------------------------------------------
mov eax,9
mov ebx,structure_of_potock
or ecx,-1
int 0x40
Хотя все очень странно.....

Posted: Thu Apr 05, 2007 10:13 am
by k@sTIg@r
[offtop]
ребята, а не проще поставить тот же Mantis или Bugzilla???
А то ветку загадили: "нашел баг" - "пофиксено", "нашел еще" - "пофиксено", "и еще" - "уже исправил"...
А ведь тема называлась "Эффективное программирование в KOLIBRI OS".
Насколько я знаю на ваш сервер можно поставить любую срань...
Ну это так ИМХО и сорри за офттоп
[/offtop]

Posted: Thu Apr 05, 2007 11:29 am
by <Lrz>
Изначально тема задумывалась, как создание методов, алгоритмов, и рекомендаций по написанию эффективного кода на ассемблере для Колибри. Однако первые мои опыты были не очень удачным примером того как нужно программировать, скорее они были как не нужно программировать. Еще один недостаток, который я заметил у многих программ, это перерисовка всего окна при смене или изменении небольшого объекта в окне. В своих работах, я, по возможности отхожу от этого, конечно неимоверно усложняется код, но зато нет ничего лишнего и ни что не напрягает глаз...
Со времененм, да бы не ткрывать другую ветку, в этой были размещены ссылки на мои работы. Конечно, сейчас, это больше напоминает свалку: "нашел" , "исправил" .....
Если будет другая альтернатива, то я обязательно воспользуюсь ей.

Posted: Thu Apr 05, 2007 12:17 pm
by Mario79
<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
;-------------------------------------------------------------

Posted: Thu Apr 05, 2007 5:07 pm
by <Lrz>
Выскажу предположение:
1 версия. У тебя код мышки обрабатывает основной поток программы т.е. как я понял ты создаешь новый поток и в него выводишь уже сообщение и editbox. А мышку ты обрабатываешь старым потоком. Т.е. у тебя два потока основной и второй где прорисовывается eidtbox. Как следствие тебе нужно сделать так чтобы второй поток обрабатывал код мышки.
2 версия у тебя при вызове 9 функции, которую я привет по адресам dword [structure_of_potock +34] и dword [structure_of_potock +38] расположены координаты основного потока. Если ты вызываешь обработчики мышки в уже сформированном потоке.
Если это так то это уже баг сис функции или фитча.
Если тебе не сложно вышли мне на мыло полностью код KFM, я разберусь вчем дело.

Posted: Fri Apr 06, 2007 7:18 am
by Mario79
<Lrz>
Поток у меня один.
Второй поток запускается только для сообщения об ошибке файловой системы.

Posted: Fri Apr 06, 2007 9:25 am
by <Lrz>
Так .... без пол литра не обойтись... у меня есть отладочный код, с момощью него можно выявить что находится в eax, и по адресам dword [structure_of_potock +34] и dword [structure_of_potock+38].
Но лучше дай мне посмотреть исходный код KFM мое мыло 200_u_200{at}mail.ru