Доброго времени! Есть проблема с изучением прогресс бара. Iczelion progressbar : http://www.wasm.ru/article.php?article=1001018 ( 18 урок - контролы ) Как работает пример в уроке с SetTimer я разобрался, но как привязывать к коду в программе не могу. Пример: ThreadProc PROC USES ecx ParamWORD mov edx, 6000000 mov ecx, 60000000 cikl: add eax,eax dec ecx cmp ecx,0 je vikh cmp edx,ecx jne cikl invoke SendMessage, hwndProgres, PBM_STEPIT, 0, 0 shr edx,16 jmp cikl vikh: invoke SendMessage,hwndProgres, PBM_SETPOS,0,0 ret ThreadProc endp в трейде просто складываю eax c eax и хочу что бы этот процесс сопровождался заполнением процесс бара. Суть идеи: когда уменьшающаяся ecx догоняет edx, то происходит сообщение на PBM_SETPOS, которое сдвигает прогресс бар на какое-то количество пунктов. Потом edx делится, что бы ecx опять его догоняла, ну и так далее... В основном коде установки прогресс бара такие: S_VISIBLE+WS_CHILD, 0, 243, 400, 15, hWnd, IDC_PROGRES, hInstance, NULL mov hwndProgres,eax mov eax,1000 mov CurrentStep, eax shl eax,16 invoke SendMessage, hwndProgres,PBM_SETRANGE,0,eax invoke SendMessage, hwndProgres,PBM_SETSTEP,1,0 Прогресс бар зацикливается и всё... PBM_SETSTEP и PBM_SETRANGE пробовал менять на разные значения, результат тот же. Гугл прошарил , везде PBM_SETSTEP и PBM_SETRANGE применяется только с SetTimer, но к своему примеру не знаю как это прикрутить. Если не сложно объясните Заранее спасибо! p.s. Задал вопрос здесь: http://www.wasm.ru/forum/viewtopic.php?pid=340267#p340267 Ответил или прикололся Rockphorr я не понял, но хотелось бы ещё и получить информацию по прогресс бару. Неверный результат - тоже результат...
В качестве счетчиков и места для хранения переменных Plis использует регистры eax, edx, ecx при этом вызывается SendMessage который использует эти регистры, естественно, "Прогресс бар зацикливается и всё..." отсюда мораль, 1) либо перед вызывом SendMessage сохранять значение eax, edx, ecx в стеке, а после SendMessage извлекать их оттуда, 2) либо использовать переменные в памяти, 3) либо использовать содержимое edi, esi, ebp, ebx значение в которых api-функции не портят
В аттаче иммитация прогрессбара в консольном приложении и работа с пятью разными прогрессбарами через WM_TIMER. Написано на masm и nasm, exe и sours прилагаются
Plis Выложил там переделку примера из tut18 именно по вашему сценарию (со 2-ым потоком), чтобы вы могли сравнить с вашим "зацикливанием".
Mikl___ Да, спосибо, установил переменные вместо eax и ecx - перестала зацикливаться... простая ошибка... Исчерпывающий пример!!! kero Да, спасибо, в примере esi и edi используются для цикла, о чём и написал Mikl___. Что за переходы : jz @f jnz @b т.е. я понимаю что они переходят к одной метке @@ и к другой, понимаю и зачем это делается - а вот почему это работает? Можно ведь так и обозначить метки @f и @b, или в твоём примере есть какое-то преимущество?
jz @f jnz @b т.е. я понимаю что они переходят к одной метке @@ и к другой, понимаю и зачем это делается - а вот почему это работает? Можно ведь так и обозначить метки @f и @b, или в твоём примере есть какое-то преимущество? это стандартный макро механизм генерации имен чтоб лишний раз не напрягать фантазию по поводу имен меток
Rockphorr А буквы только f и b используются или другие есть? Если только эти, то получается можно использовать таким способом только две метки...
буква f (forvard) jmp @f -- переход вперед к ближайшей @@ метке; буква b (back) jmp @b -- переход назад к ближайшей @@ метке, какие еще можно подставить буквы?