Нужно периодически и довольно часто делать паузу в выполнении программы - от 0.1 до 1 сек . Смотрел исходники, не совсем понял, вроде есть что-то на эту тему но у меня не заработало... Интересно можно ли из call`a сделать call в себя? щас попробую... PAUZA proc .if Timer jmp куда-то .else call PAUZA .endif ret PAUZA endp ринг 3 не такой и безопасный, как написанов умных книжках, вчера по ошибке поставил xor ebx,ebx сразу после .REPEAT и дальше - .UNTIL ebx==8 - с панели инструментов и из окна диспетчера задач всё исчезло , как корова языком слизала...
Слип,который стоит внутри цикла .REPEAT - .UNTIL, выполняется только один раз...почему-то А дейтсвительно команды выплняются строго последовательно? Возникло подозрение, что это не так ... Команды, которые стоят сразу за тяжёлой какой-нить функцией - спокойно выполняются, а та ещё всё думает ...
Так, просто загрузка цп, видимо, 100%...завис эксплоер и не отображал какое-то время... Если они в одном потоке - то да. Это как? ))
ща сдохну. слип принимает параметр-на скоко тормозить... не подходит слип - используй таймер, тоже довольно мощная штука
сори , но Код (Text): .REPEAT inc ebx invoke IsWindowVisible,[hcard +4*ebx] .if eax >=1 invoke MoveWindow,[hcard +4*ebx],xpos,416,71,95,1 invoke Sleep,40 mov eax,xpos mov dword ptr[xcard +4*ebx],eax add xpos,20 .else .endif .UNTIL ebx==12 В этом цикле - сдвигаются влево карты на столе,расположенные справа от карты, которой сыграли. Написал как смог...Хотел, чтоб было не слишком всё быстро - поестественней, НО слип здесь испольняется ТОЛЬКО 1 РАЗ . Почему ? Появилась идея, только что - может он он не может включиться, пока не пройдёт те же 40 миллисекунд с момента окончания паузы? и если цикл выполняется быстрее , то...
бред. прога выполняется, доходет до слип, ждет 40мс(на самом деле может ждать и больше), идет дальше....
Veter Sleep для анимации конечно хорошо. Но гладкую анимацию фиг получишь. Более правильно гонять цикл, в котором проверять тики прошедшие от предыдущего кадра анимации, тем самым не будет отдаваться квант времени другим приложениям, и будет гладко. Единственно, что окна ворочать в таком цикле - жесть.
не знаю, может и бред - но слип исполняется ТОЛЬКО ОДИН РАЗ !!!! - для первой карты, которую надо сдвинуть, все остальные- сдвигаются как обычно, без задержки - КЛЯНУСЬ!!!!!!
Veter Я тоже думаю, что бред. Все они сдвигаются с задержкой в ~40 мсек. Вот только Вы этого не видите. Т.к. на самом деле сначала все это дело сдвигается, а потом уже прорисовывается, поэтому у Вас и создается впечатление, что задержка только перед первой картой. Поставьте после Sleep какой-нибудь invalidate или SendMessage (c WM_PAINT) или UpdateWindow и тогда будет видна задержка для каждой карты.
дошел до инвалидэйт в своих изысканиях - не помогло.. попробую апдейт каждого окна, которое сдвигается в этом цикле - карты это же окна ... вроде ничего больше не придумаешь.. Что-то многовато переменных образовалось - хэндл, положение по х и у, номер, масть, и ещё несколько ... короче, 9 х 52 переменных, не считая всех остальных...Если не делать дестрой всего этого хозяйства после каждой сдачи, начинаются глюки...
Veter Первый раз вижу чтобы такое окнами делали -) Хотя может для висты и приемлимо, если там окна аппаратным DirectX рисуются. Но вообще пипец.
Всё что мы видим в клиентской области - это окна . Не рисовать же - ведь по ходу дела нужно прятать, показывать. перемещать отдльные карты и как это можно сделать? в виндовской библиотеке не смог разобраться , есть исходник на с , надо ещё посмотреть. Но там карты получаются не очень .. так себе . Я просто взял бмп-буттон, немного её переделал. и вроде нормально. По сравнению с известными карточными программами - проц грузится в два- три раза меньше - больше всего, когда создаётся новая сдача.... и всё работает очень быстро - даже слишком... вот в чём проблема... Самое печальное - если использовать карты винды, программа получается меньше 10 кило. 98% лопоухих юзеров считает, что их пытаются обдурить. когда предлагают скачать ( а тем более купить - в перспективе) мааленькую программу...
Почти сделал интерфейс как-бы . Если кто хочет - посмотрите, скажите, плиз как у вас смотрится . Проблема- мониторы разнЫе, разрешение все ставят разное, но карты- стандартные и теоретически - разрешение должно соответствовать размеру экрана - для 17 дюймов - 1000 на 800, но разве щас найдёшь нормального юзера - все же стараются вы-нуться и ковыряются в мелочи, портят глаза..
Veter Ну ты даёшь, слов нет. Не надо делать через Ж... и всё будет нормально, посмотри как сделаны карты в виндах, и делай также. Почитай про программирование графики в Win, и всё будет ок. Насчёт того как сделать отображение, перемещение, исчезновение карт: В ООП это делается с помощью объектов, в процедурных языках соответственно процедурами, но тоже используя принципы ООП. Типо есть "объект" - структура карты. Создаёшь экземпляр карты. Делаешь функцию ShowCard c параметрами: указатель на карту, позиция карты, флаг видимости карты и т.д. Собственно сама винда на таких принципах построена. И желательно имет возможность расширять структуру карты, без сильной модификации других функций.
Согласен... И в тоже время - я ещё маленький и инстиктивно стараюсь делать не так, как все. Это вполне нормальный инстинкт, который является залогом прогресса сообщества ...Если получится плохо - можно сделать как обычно, но иногда получается лучше, со всеми вытекающими последствиями... Теперь что мне делать? - всё работает преотлично, особых трудностей в реализации нет, не считая замороченой логики...но она так и останется замороченой, применяю я объектно-ориентированную модель или нет... Затереть проект и начать узучать километровые портянки ?