![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]()
Интересно, в секции сообщения windows WM_CREATE я правильно рисую в bimap-е или нужно иначе рисовать? Вроде бы работает, но не знаю, работает так как нужно или нет..
Код:
|
![]() |
![]() |
![]() |
#12 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]() Цитата:
Далее реализация анимации. Для начала подготовка: при создании формы вычисляете DrawText(..., DT_CALCRECT) - ширину в высоту текста, который будет нарисован и увеличиваете размеры этой области в два раза по высоте. Создаете bitmap по этим размерам и будете использовать его как back-буфер для создания анимации (вторым способом можно включить двойную буферизацию на форме, чтобы не мерцало). При перерисовке для начала весь текст (после можно сделать каждый символ в отдельности) рисуете на этом bitmap при этом вычисляя его положение в зависимости от времени. А затем BitBlt копирует верхнюю половину bitmap в нужную позицию экрана. Таким образом часть символов обрезается по этой границы и создается эффект плавного всплытия. Когда получится со строкой целиком, то можете добавить массив координат для каждого отдельного символа и используя все те же формулы усложнить работу анимации добавив задержку всплытия между каждым отдельным символом. Таким образом текст будет всплывать последовательно. |
|
![]() |
![]() |
![]() |
#13 | ||||
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]() Цитата:
Таймер я создал, но хоть убей не понимаю, как функцию написать, чтобы всё работало, да ещё с таймером, не понимаю... т.е. если я захочу использовать эту функцию, прежде, мне нужно создать таймер, так получается, а не просто вызвать её с заданными аргументами, как обычно и делают. Ну да ладно, это всё лирика. Цитата:
Цитата:
Цитата:
Я вообще ничего не понял) Рисуете на bitmap - это как, с помощью функции TetxOut и тому подобных, если так, то получется я должен рисовать часть текста(или букву или часть буквы) в BITMAP-е только по обработчику сообщения WM_TIMER? иЛИ, КАК ВСЁ ЭТО ДОЛЖНО ПРОИСХОДИТЬ и самое главное где, в функцию я это не запихну, как мне кажется, короче говоря я не знаю с чего начинать. я запутался. |
||||
![]() |
![]() |
![]() |
#14 | ||||
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]() Цитата:
Цитата:
Цитата:
Да. Для этого надо сначала еще создать временный HDC через CreateCompatibleDC и при помощи SelectObject соединить его с bitmap. Потом можно будет использовать этот hdc для рисования на bitmap и переносе пикселей с нее на hdc формы (через BitBlt(hSrcDC <- в качестве этого параметра, ...)). Цитата:
Код:
Последний раз редактировалось macomics; 26.11.2022 в 10:56. |
||||
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]()
По моему вы меня не поняли я имел ввиду, что функция, даже, если я её напишу будет требовать таймера при использовании, а это заведомо , плохо т.е. как я хочу использовать функцию:
Код:
TPoint textPos[textCount]; //позиции и где их вычислять, с этим не разобраться char *textArray[textCount]; //Здесь текст int startTime[textCount]; //здесь что, забить значениями GetTickCount(); Кроме как массив текста остальное не очевидно от слова совсем. Значения для массива startTime тоже вычислять в БЛОКЕ СООБЩЕНИЯ WM_CREATE:? textPos - я так и не понял, зачем этот массив, для каждого символа вычислять позицию? А если мне нужно вызвать функцию раз десять в программе т.к. нужно вывести результаты участников некоторого события, тогда что, для каждого участника заполнять всё это, не слишком ли много работы... Код:
|
![]() |
![]() |
![]() |
#16 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]()
Вы мой пример видели. У меня таймер инициализируется при WM_CREATE. А для запуска анимации достаточно в переменную startTime записать значение GetTickCount и анимация запустится. Закончится она когда разница между значением в переменной startTime и возвращаемым из GetTickCount превысит количество пикселей, на которое поднимается текст. Т.е. для прекращения анимации достаточно обнулить startTime.
|
![]() |
![]() |
![]() |
#17 | |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
#18 | |||
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]() Цитата:
Цитата:
Цитата:
Можно конечно изобразить каждый символ строки как отдельную анимацию, но лучше это сделать в функции drawAnimatedText. А в массивы заполнить сразу строки. |
|||
![]() |
![]() |
![]() |
#19 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
![]() Цитата:
Я еще забыл вызвать FillRect(bmp, rct); для очистки bitmap от старого текста. animation указывает на координаты задаваемые через textPos[i] back bitmap это картинка, которая будет нарисована в памяти pos это те самые вычисления координат На форме нарисован текст частично всплывший после запуска анимации. Пока вся строка целиком. Возиться с каждым отдельным символом пока не хочу. Последний раз редактировалось macomics; 26.11.2022 в 15:09. |
|
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 22.01.2014
Сообщений: 313
|
![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Необходимо написать "таймер", который будет запускаться при нажатии кнопки "Start", приостанавливаться на "Pause", и сбрасываться на "Reset" | billiejean78 | JavaScript, Ajax | 1 | 03.09.2021 08:58 |
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" | Бахтиёр1916 | Windows | 1 | 05.04.2017 12:53 |
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") | ZIRASS | PHP | 4 | 15.06.2016 14:23 |
Поиск компонента GroupBox с эффектом "спойлер" | XerSon | Компоненты Delphi | 1 | 24.03.2011 09:59 |