diff --git a/programs/develop/info3ds/data.inc b/programs/develop/info3ds/data.inc index 48bd0f6e1f..9b493a8dab 100644 --- a/programs/develop/info3ds/data.inc +++ b/programs/develop/info3ds/data.inc @@ -1,7 +1,7 @@ if lang eq ru -capt db 'info 3ds версия 10.11.15',0 ;подпись окна +capt db 'info 3ds версия 26.11.15',0 ;подпись окна else -capt db 'info 3ds version 10.11.15',0 ;window caption +capt db 'info 3ds version 26.11.15',0 ;window caption end if MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа @@ -69,6 +69,7 @@ block_3ds CHUNK_MATNAME, 3,1,txt_a000 block_3ds 0xa010,4,0,txt_a010 block_3ds 0xa020,4,0,txt_a020 block_3ds 0xa030,4,0,txt_a030 +block_3ds 0xa100,5,1,txt_a100 block_3ds CHUNK_TEXTURE, 3,0,txt_a200 block_3ds CHUNK_MAPFILE, 6,1,txt_a300 block_3ds CHUNK_KEYFRAMER, 7,0,txt_b000 @@ -145,10 +146,10 @@ txt_4160 db ' txt_4600 db 'Свет',0 txt_4700 db 'Камера',0 txt_a000 db 'Название материала',0 -;txt_a100 db 'MAT_SHADING',0 txt_a010 db 'Окружающий цвет',0 txt_a020 db 'Диффузный цвет',0 txt_a030 db 'Зеркальный цвет',0 +txt_a100 db 'Тип материала [1=flat 2=gouraud 3=phong 4=metal]',0 txt_a200 db 'Текстура материала 1',0 txt_a300 db 'Имя файла текстуры',0 ;txt_a353 db 'MAT_MAP_TEXBLUR',0 @@ -230,6 +231,7 @@ txt_a000 db 'Material name',0 txt_a010 db 'Ambient color',0 txt_a020 db 'Diffuse color',0 txt_a030 db 'Specular color',0 +txt_a100 db 'Material type [1=flat 2=gouraud 3=phong 4=metal]',0 txt_a200 db 'Texture map 1',0 txt_a300 db 'Mapping filename',0 txt_afff db 'Meterial',0 diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index e7c017794e..0468e1576d 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -11,6 +11,7 @@ include '../../develop/libraries/TinyGL/asm_fork/opengl_const.inc' include '../../dll.inc' include 'lang.inc' include 'info_fun_float.inc' +include 'info_menu.inc' debug equ 0 @@ -129,6 +130,24 @@ start: mcall 40,0x27 stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога + ;kmenu initialisation + stdcall [kmenu_init],sc + stdcall [ksubmenu_new] + mov [main_menu], eax + + stdcall [ksubmenu_new] + mov [main_menu_view], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Vertexes, 5 + stdcall [ksubmenu_add], [main_menu_view], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Faces, 6 + stdcall [ksubmenu_add], [main_menu_view], eax + stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0 + stdcall [ksubmenu_add], [main_menu_view], eax + stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_Light, 7 + stdcall [ksubmenu_add], [main_menu_view], eax + stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_View, [main_menu_view] + stdcall [ksubmenu_add], [main_menu], eax + mov dword[w_scr_t1.type],1 stdcall dword[tl_data_init], tree1 ;системные иконки 16*16 для tree_list @@ -158,7 +177,7 @@ start: mcall 26,9 mov [last_time],eax - stdcall [kosglMakeCurrent], 5,3,320,240,ctx1 + stdcall [kosglMakeCurrent], 5,23,320,240,ctx1 stdcall [glEnable], GL_DEPTH_TEST stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов stdcall [glClearColor], 0.0,0.0,0.0,0.0 @@ -208,13 +227,10 @@ mouse: align 4 timer_funct: pushad -if debug - mcall 4, (5 shl 16)+8, 0xff+0x80000000, txt_0002 -end if mcall 26,9 mov [last_time],eax - ; + ;просматриваем выделенный блок данных stdcall [tl_node_get_data],tree1 cmp eax,0 je @f @@ -227,6 +243,7 @@ end if add eax,dword[open_file_lif] ;получаем значение сдвига в памяти cmp dword[offs_last_timer],eax je @f + ;если выделенный блок данных не совпадает с последним запомненным mov dword[offs_last_timer],eax call buf_draw_beg stdcall [buf2d_draw_text], buf_0, buf_1,txt_3ds_offs,5,35,0xb000 @@ -240,6 +257,12 @@ end if stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране @@: popad + + ;просмотр окна с координатами точек + ;cmp byte[prop_wnd_run],0 + ;je @f + ; call prop_timer_funct + ;@@: jmp still align 4 @@ -479,9 +502,7 @@ but_open_file: mov byte[can_save],0 call init_tree stdcall [buf2d_draw], buf_0 ;обновляем буфер на экране - mov dword[angle_x],0.0 - mov dword[angle_y],0.0 - mov dword[angle_z],0.0 + call prop_wnd_clear_param ;чистим параметры окна с координатами cmp byte[prop_wnd_run],0 je @f ;чистим окно с координатами @@ -778,7 +799,7 @@ proc add_3ds_object, icon:dword,level:dword,size_bl:dword,info_bl:dword mov ecx,size_one_list-(list_offs_text+5) cld rep movsb - mov byte[buffer+size_one_list-1],0 ;0 - символ конеца строки + mov byte[buffer+size_one_list-1],0 ;0 - символ конца строки .no_capt: stdcall [tl_node_add], tree1, ebx, buffer stdcall [tl_cur_next], tree1 @@ -819,6 +840,42 @@ proc print_err, fun:dword, mes:dword ; popad ret endp + +;input: +; eax - value +; edi - string buffer +; len - buffer len +;output: +align 4 +proc convert_int_to_str, len:dword +pushad + mov esi,[len] + add esi,edi + dec esi + call .str +popad + ret +endp + +align 4 +.str: + mov ecx,0x0a + cmp eax,ecx + jb @f + xor edx,edx + div ecx + push edx + call .str + pop eax + @@: + cmp edi,esi + jge @f + or al,0x30 + stosb + mov byte[edi],0 + @@: + ret + end if align 4 @@ -857,7 +914,6 @@ but_save_file: je .end_save_file ;код при удачном открытии диалога - mov eax,70 ;70-я функция работа с файлами mov [run_file_70.Function], 2 mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 @@ -867,11 +923,10 @@ but_save_file: mov dword[run_file_70.Count], ebx ;размер файла mov byte[run_file_70+20], 0 mov dword[run_file_70.FileName], openfile_path - mov ebx,run_file_70 - int 0x40 ;загружаем файл изображения + mcall 70,run_file_70 cmp ebx,0xffffffff je .end_save_file - + ;...сообщение... .end_save_file: popad ret @@ -1333,7 +1388,6 @@ include '../../develop/libraries/TinyGL/asm_fork/export.inc' align 4 mouse_dd dd 0x0 -sc system_colors last_time dd 0 align 4 @@ -1371,7 +1425,7 @@ angle_y dd 0.0 angle_z dd 0.0 delt_size dd 3.0 -light_position dd 0.0, 0.0, 2.0, 1.0 ; Расположение источника [0][1][2] +light_position dd 0.0, 0.0, -2.0, 1.0 ; Расположение источника [0][1][2] ;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии) light_dir dd 0.0,0.0,0.0 ;направление лампы @@ -1383,6 +1437,7 @@ lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; align 16 i_end: procinfo process_information + sc system_colors rb 2048 align 16 thread_coords: diff --git a/programs/develop/info3ds/info_menu.inc b/programs/develop/info3ds/info_menu.inc new file mode 100644 index 0000000000..969a29304c --- /dev/null +++ b/programs/develop/info3ds/info_menu.inc @@ -0,0 +1 @@ + if lang eq ru sz_main_menu_View db 'Вид', 0 sz_main_menu_Veiw_Vertexes db 'Вершины вкл./выкл.', 0 sz_main_menu_Veiw_Faces db 'Грани вкл./выкл.', 0 sz_main_menu_Veiw_Light db 'Свет вкл./выкл.', 0 else sz_main_menu_View db 'View', 0 sz_main_menu_Veiw_Vertexes db 'Vertexes on/off', 0 sz_main_menu_Veiw_Faces db 'Faces on/off', 0 sz_main_menu_Veiw_Light db 'Light on/off', 0 end if main_menu dd 0 main_menu_file dd 0 main_menu_view dd 0 KMENUITEM_NORMAL equ 0 KMENUITEM_SUBMENU equ 1 KMENUITEM_SEPARATOR equ 2 \ No newline at end of file diff --git a/programs/develop/info3ds/info_wnd_coords.inc b/programs/develop/info3ds/info_wnd_coords.inc index 0598183ac0..a34706202c 100644 --- a/programs/develop/info3ds/info_wnd_coords.inc +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -1,6 +1,6 @@ ; ; в этом файле собраны функции нужные для создания и -; работы окна с координатами +; работы окна с координатами вершин ; prop_wnd_width equ 340 ;ширина окна со свойствами объекта @@ -8,6 +8,12 @@ prop_wnd_height equ 460 SIZE_ONE_FLOAT equ 14 MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1) +bit_vertexes equ 0 +bit_faces equ 1 +bit_faces_fill equ 2 +bit_light equ 3 +def_dr_mode equ 0x1111b + prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно txt_q db '?',0 @@ -32,36 +38,76 @@ pushad mcall 40,0x27 ;маска ожидаемых событий inc byte[prop_wnd_run] mov dword[w_scr_t3.type],1 + call prop_wnd_clear_param stdcall [tl_node_get_data],tree1 xor edx,edx mov dword[capt_p],txt_q cmp eax,0 je .no_points - mov ebx,dword[eax] ;получаем значение сдвига выбранного блока - add ebx,dword[open_file_lif] + mov ebx,[eax] ;получаем значение сдвига выбранного блока + add ebx,[open_file_lif] cmp word[ebx],CHUNK_VERTLIST - jne @f + jne .end_vlist movzx edx,word[ebx+6] ;колличество точек add ebx,8 mov dword[capt_p],txt_4110 - jmp .no_points - @@: - cmp word[ebx],0xb013 + ;поиск данных для треугольков + mov ecx,eax + stdcall [tl_node_poi_get_info], tree1,0 + @@: + mov esi,eax + stdcall [tl_node_poi_get_data], tree1,esi + cmp eax,ecx + je @f ;если попали на выбранный узел + stdcall [tl_node_poi_get_next_info], tree1,esi + cmp eax,0 + jne @b + jmp .set_points + @@: + ;если нашли выбранный узел, то далее пытаемся найти узел с треугольниками + movzx ecx,byte[esi+2] ;cl - уровень выбранного узла + .cycle_0: + stdcall [tl_node_poi_get_next_info], tree1,esi + cmp eax,0 + je .set_points + mov esi,eax + stdcall [tl_node_poi_get_data], tree1,esi + cmp byte[esi+2],cl + jl .set_points + je .found + jmp .cycle_0 + .found: ;если нашли узел тогоже уровня что и выбранный узел + cmp eax,0 + je .set_points + mov eax,[eax] + add eax,[open_file_lif] + cmp word[eax],CHUNK_FACELIST + jne .cycle_0 + movzx ecx,word[eax+6] + mov [obj_tri_count],ecx + add eax,8 ;2+4+2 (chunk+size+count) + mov [obj_tri_data],eax + jmp .set_points + .end_vlist: + cmp word[ebx],CHUNK_TRACKPIVOT jne @f inc edx add ebx,6 mov dword[capt_p],txt_b013 - jmp .no_points + jmp .set_points @@: cmp word[ebx],0xb014 jne @f mov edx,2 add ebx,6 mov dword[capt_p],txt_b014 - ;jmp .no_points + ;jmp .set_points @@: + .set_points: + mov [obj_poi_data],ebx + mov [obj_poi_count],edx .no_points: ;настройка списка объектов @@ -117,7 +163,13 @@ popad align 4 prop_still: pushad - mcall 10 + + mcall 23,10 + or eax,eax + jnz @f + call prop_timer_funct + jmp .end + @@: cmp al,1 ;изм. положение окна jne @f @@ -159,15 +211,15 @@ pushad int 0x40 mov esi,[sc.work_button] - mcall 8, (5 shl 16)+20, (246 shl 16)+20, 3 - mcall , (30 shl 16)+20, (246 shl 16)+20, 4 + mcall 8, (5 shl 16)+20, (266 shl 16)+20, 3 + mcall , (30 shl 16)+20, (266 shl 16)+20, 4 mov ebx,[image_data_toolbar] add ebx,4*IMAGE_TOOLBAR_ICON_SIZE - mcall 7, , (16 shl 16)+16, (7 shl 16)+247 ;load + mcall 7, , (16 shl 16)+16, (7 shl 16)+268 ;load sub ebx,IMAGE_TOOLBAR_ICON_SIZE - mov edx,(32 shl 16)+247 ;save + mov edx,(32 shl 16)+268 ;save int 0x40 mov dword[w_scr_t3.all_redraw],1 @@ -177,19 +229,32 @@ pushad stdcall [edit_box_draw], edit2 stdcall [edit_box_draw], edit3 + stdcall [kmainmenu_draw], [main_menu] call draw_3d mcall 12,2 popad ret +;установка всех основных переменных по умолчанию +align 4 +prop_wnd_clear_param: + mov dword[angle_x],0.0 + mov dword[angle_y],0.0 + mov dword[angle_z],0.0 + mov dword[obj_poi_data],0 + mov dword[obj_poi_count],0 + mov dword[obj_tri_data],0 + mov dword[obj_tri_count],0 + mov dword[draw_mode],def_dr_mode + ret + +;установка размеров объекта align 4 proc obj_set_sizes uses eax ebx esi - stdcall dword[tl_node_poi_get_info], tree3,0 - cmp eax,0 + cmp dword[obj_poi_count],0 je .end - stdcall [tl_node_poi_get_data], tree3,eax finit - mov eax,[eax] + mov eax,[obj_poi_data] mov ebx,dword[eax] mov [obj_x_min],ebx mov [obj_x_max],ebx @@ -200,13 +265,10 @@ proc obj_set_sizes uses eax ebx esi mov [obj_z_min],ebx mov [obj_z_max],ebx - stdcall dword[tl_node_poi_get_info], tree3,0 + mov ebx,[obj_poi_data] + mov esi,[obj_poi_count] align 4 .cycle_0: ;работа с координатой x - mov esi,eax - stdcall [tl_node_poi_get_data], tree3,esi - mov ebx,[eax] - fld dword[ebx] fld dword[obj_x_min] fcomp @@ -228,9 +290,9 @@ align 4 mov [obj_x_max],eax .next_x: - stdcall dword[tl_node_poi_get_next_info], tree3,esi - cmp eax,0 - jne .cycle_0 + add ebx,12 + dec esi + jnz .cycle_0 fld1 fld dword[obj_x_max] @@ -248,13 +310,10 @@ align 4 fchs fstp dword[obj_x_centr] - stdcall dword[tl_node_poi_get_info], tree3,0 + mov ebx,[obj_poi_data] + mov esi,[obj_poi_count] align 4 .cycle_1: ;работа с координатой y - mov esi,eax - stdcall [tl_node_poi_get_data], tree3,esi - mov ebx,[eax] - fld dword[ebx+4] fld dword[obj_y_min] fcomp @@ -276,9 +335,9 @@ align 4 mov [obj_y_max],eax .next_y: - stdcall dword[tl_node_poi_get_next_info], tree3,esi - cmp eax,0 - jne .cycle_1 + add ebx,12 + dec esi + jnz .cycle_1 fld1 fld dword[obj_y_max] @@ -296,13 +355,10 @@ align 4 fchs fstp dword[obj_y_centr] - stdcall dword[tl_node_poi_get_info], tree3,0 + mov ebx,[obj_poi_data] + mov esi,[obj_poi_count] align 4 .cycle_2: ;работа с координатой z - mov esi,eax - stdcall [tl_node_poi_get_data], tree3,esi - mov ebx,[eax] - fld dword[ebx+8] fld dword[obj_z_min] fcomp @@ -324,9 +380,9 @@ align 4 mov [obj_z_max],eax .next_z: - stdcall dword[tl_node_poi_get_next_info], tree3,esi - cmp eax,0 - jne .cycle_2 + add ebx,12 + dec esi + jnz .cycle_2 fld1 fld dword[obj_z_max] @@ -360,8 +416,18 @@ endp ;рисование точек в 3d align 4 draw_3d: + cmp dword[obj_poi_count],2 + jl .end_f + stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины stdcall [glPushMatrix] + bt dword[draw_mode],bit_light + jnc @f + call SetLight + jmp .end_l + @@: + stdcall [glDisable],GL_LIGHTING + .end_l: stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z stdcall [glScalef], [obj_x_scale],[obj_y_scale],[obj_z_scale] stdcall [glScalef], 1.0,1.0,0.7 ;correct for z @@ -370,22 +436,22 @@ draw_3d: stdcall [glRotatef], [angle_x],1.0,0.0,0.0 stdcall [glTranslatef], [obj_x_centr],[obj_y_centr],[obj_z_centr] - stdcall [glColor3f], 1.0,1.0,1.0 - stdcall [glBegin],GL_POINTS - - stdcall dword[tl_node_poi_get_info], tree3,0 - @@: - cmp eax,0 - je @f - mov esi,eax - stdcall [tl_node_poi_get_data], tree3,esi - mov eax,[eax] - stdcall [glVertex3f], [eax],[eax+4],[eax+8] - stdcall dword[tl_node_poi_get_next_info], tree3,esi - jmp @b - @@: - stdcall [glEnd] + ;рисование точек + bt dword[draw_mode],bit_vertexes + jnc .end_points + stdcall [glColor3f], 1.0,1.0,1.0 + stdcall [glBegin],GL_POINTS + mov eax,[obj_poi_data] + mov ebx,[obj_poi_count] + @@: + stdcall [glVertex3f], [eax],[eax+4],[eax+8] + add eax,12 + dec ebx + jnz @b + stdcall [glEnd] + .end_points: + ;рисование выделенной точки stdcall [tl_node_get_data],tree3 cmp eax,0 je @f @@ -405,17 +471,70 @@ draw_3d: stdcall [glEnd] stdcall [glColor3f], 1.0, 1.0, 0.0 - stdcall [glTranslatef], [eax],[eax+4],[eax+8] - stdcall [gluSphere], [qObj], [sph_radius], 8,8 + stdcall [glPushMatrix] + stdcall [glTranslatef], [eax],[eax+4],[eax+8] + stdcall [gluSphere], [qObj], [sph_radius], 8,8 + stdcall [glPopMatrix] @@: + ;рисование граней + bt dword[draw_mode],bit_faces + jnc .end_triangles + cmp dword[obj_tri_count],0 + je .end_triangles + cmp dword[obj_poi_count],0 + je .end_triangles + stdcall [glColor3f], 0.5,0.5,0.5 + ;bt dword[draw_mode],bit_faces_fill + ;jnc @f + ;@@: + stdcall [glBegin],GL_TRIANGLES + mov eax,[obj_tri_data] + mov ecx,[obj_tri_count] + @@: + movzx ebx,word[eax] ;1-я вершина + imul ebx,12 + add ebx,[obj_poi_data] + stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] + movzx ebx,word[eax+2] ;2-я вершина + imul ebx,12 + add ebx,[obj_poi_data] + stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] + movzx ebx,word[eax+4] ;3-я вершина + imul ebx,12 + add ebx,[obj_poi_data] + stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] + add eax,8 ;размер треугольника = (3 вершины (по 2б) + свойства (2б)) + dec ecx + jnz @b + stdcall [glEnd] + .end_triangles: + stdcall [glPopMatrix] stdcall [kosglSwapBuffers] + .end_f: ret align 4 -prop_key: -push eax +SetLight: + stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position + stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir + + stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light + stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light + + stdcall [glEnable], GL_COLOR_MATERIAL + stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE + stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular + stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess + stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient + + stdcall [glEnable],GL_LIGHTING + stdcall [glEnable],GL_LIGHT0 + ret + +align 4 +proc prop_key uses eax ebx mcall 2 test word [edit1.flags],10b ;ed_focus @@ -433,7 +552,11 @@ push eax stdcall [edit_box_key], edit3 jmp .end @@: - stdcall [tl_key], tree3 + cmp dword[el_focus], tree3 + jne @f + stdcall [tl_key], tree3 + jmp .end + @@: cmp ah,178 ;Up jne @f @@ -468,12 +591,13 @@ push eax ;jmp .end @@: .end: -pop eax ret +endp align 4 prop_mouse: ;push ecx edi + stdcall [kmainmenu_dispatch_cursorevent], [main_menu] stdcall [tl_mouse], tree3 stdcall [edit_box_mouse], edit1 stdcall [edit_box_mouse], edit2 @@ -557,6 +681,21 @@ prop_button: pop esi edi ecx ebx eax jmp prop_still.end @@: + cmp ah,5 + jne @f + call mnu_vertexes_on_off + jmp prop_still.end + @@: + cmp ah,6 + jne @f + call mnu_faces_on_off + jmp prop_still.end + @@: + cmp ah,7 + jne @f + call mnu_light_on_off + jmp prop_still.end + @@: cmp ah,1 jne prop_still.end @@ -597,6 +736,39 @@ get_point_coords: ret align 4 +proc prop_timer_funct uses eax + ;просматриваем выделенную координату + stdcall [tl_node_get_data],tree3 + cmp [cursor_last_draw],eax + je @f + mov [cursor_last_draw],eax + call draw_3d + @@: + ret +endp + +align 4 +mnu_vertexes_on_off: + xor dword[draw_mode], 1 shl bit_vertexes + ret + +align 4 +mnu_faces_on_off: + xor dword[draw_mode], 1 shl bit_faces + ret + +align 4 +mnu_light_on_off: + xor dword[draw_mode], 1 shl bit_light + ret + +align 4 +draw_mode dd 0 +obj_poi_data dd 0 ;указатель на координаты вершин +obj_poi_count dd 0 ;колличество вершин +obj_tri_data dd 0 ;указатель на данные треугольников +obj_tri_count dd 0 ;колличество треугольников +cursor_last_draw dd 0 ;положение курсора при последней прорисовке 3d окна sph_radius dd 0 ;радиус сферы для выделения активной точки obj_x_max dd 0 obj_x_min dd 0 @@ -615,12 +787,12 @@ capt_p dd 0 ;дерево с объектами в пользовательском файле tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\ - 16,16, 0xffffff,0xb0d0ff,0x400040, 5,270,303,160, 16, 4,0, el_focus,\ + 16,16, 0xffffff,0xb0d0ff,0x400040, 5,290,303,140, 16, 4,0, el_focus,\ w_scr_t3,get_point_coords -edit1 edit_box 80, 76, 249, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 -edit2 edit_box 80, 160, 249, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 -edit3 edit_box 80, 244, 249, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0 +edit1 edit_box 80, 76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 +edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 +edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0 editboxes_end: string1 rb 34