|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 21, 2003 21:37:02 Помогите отловить ошибку в процедуре: proc FindItem ind dd 0 hwndkat dd 0 i dd 0 enter mov eax,[Find.Flag]; сохраняем в еах флаг поиска для последующего анализа cmp eax,FIND_FOR_TREE; если поиск по категории и подкатегории je findtree; переходим на соответствующую метку findtree: mov eax,[lpAlloc] cmp [CurAdress],eax je next2 xor eax,eax mov [hwndkat],eax mov [i],eax mov ebx,[lpAlloc] ; устанавливаем указатель на начало памяти содержащей структуры каталогов beg: Kat.new.Adr ; пересчитываем указатели на членов структуры xor eax,eax mov [ind],eax mov edx,Kat.Kat; сохраняем адрес текущей категории в edx mov ecx,Find.Kat; сохраняем адрес искомой категории в ecx next: mov eax,[edx] ; загружаем в eax первые 4 символа текущей категории и cmp eax,[ecx] ; сравниваем их с содержимым ячейки памяти по адресу в ecx jne stop ; если категории не совпадают переходим на метку пропучка структуры add ecx,4 add edx,4 inc [ind] cmp [ind],10 jne next mov eax,Kat.Kat_hwnd mov [hwndkat],eax xor eax,eax mov [ind],eax mov edx,Kat.SubKat mov ecx,Find.SubKat next1: mov eax,[edx] ; загружаем в eax первые 4 символа текущей подкатегории и cmp eax,[ecx] ; сравниваем их с содержимым ячейки памяти по адресу в ecx jne stop ; если подкатегории не совпадают переходим на метку пропуска структуры add ecx,4 add edx,4 inc [ind] cmp [ind],10 ; необходимо добавить проверку jne next1 mov eax,Kat.Kat_hwnd mov edx,Kat.SubKat_hwnd mov ebx,[CurAdress] Kat.new.Adr mov Kat.Kat_hwnd,eax mov Kat.SubKat_hwnd,edx jmp stop1 stop: xor eax,eax cmp Kat.New,eax je stop2 add ebx,512 jmp beg stop2: xor eax,eax cmp [hwndkat],eax ; если hwndkat=0 значит нет такой категории и подкатегории jne sub_kat next2: ;invoke MessageBox,0,TempFileName,TempFileName,MB_OK mov [tvinsert.hParent],0 mov [tvinsert.hInsertAfter],TVI_LAST mov [tvinsert.item.imask],TVIF_TEXT+TVIF_SELECTEDIMAGE+TVIF_IMAGE mov eax,[AdrKat] mov [tvinsert.item.pszText],eax mov [tvinsert.item.iImage],0 mov [tvinsert.item.iSelectedImage],0 invoke SendMessage,[hwndTree],TVM_INSERTITEM,NULL,tvinsert mov [hwndkat],eax mov Kat.Kat_hwnd,eax sub_kat: mov eax,[hwndkat] mov [tvinsert.hParent],eax mov [tvinsert.hInsertAfter],TVI_LAST mov [tvinsert.item.imask],TVIF_TEXT+TVIF_SELECTEDIMAGE+TVIF_IMAGE mov eax,[AdrSubKat] mov [tvinsert.item.pszText],eax mov [tvinsert.item.iImage],0 mov [tvinsert.item.iSelectedImage],0 invoke SendMessage,[hwndTree],TVM_INSERTITEM,NULL,tvinsert mov Kat.SubKat_hwnd,eax stop1: return Смысл данной процедуры в следующем: Запускаю программу, нажимаю кнопку добавить в категории пишу "кате" в подкатегории "под1" в остальных полях всякая ерунда (но в полях № CD и Кол.CD должны быть цифры) нажимаю кнопку "Добавить" все нормально в TreeView добавилась категория и подкатегория и сколько бы я повторно ни щелкал на кнопке "Добавить" повторно ни чего не добавляется (это нормально). Далее изменяю название подкатегории на "под2" жму кнопку в имеющуюся категорию добавляется подкатегория "под2", но если ещё раз щелкнуть на кнопке "Добавить" в тойже категории появится ещё одна подкатегория с названием "под2". Далее если изменить название категории появится новая категория с подкатегорией и при повторных нажатиях кнопки "Добавить" создаются новые категории с одинаковыми названиями. Find.Kat, Find.SubKat, Kat.Kat, Kat.SubKat - строки длинной 40 байт. Kat. - структуры неограниченного количества (при запуске отводится 100k, каждая структура длинной 512 байт). Полностью исходники и исполнимый файл в архиве весят 92k. Если кто имеет время могу отправить по почте. Мой адрес mailto: pas1@e-mail.ru |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.071 |