Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:
Код:Секретный код
Повторить:

Меню сайта




Ваше мнение
Оцените скорость загрузки страниц сайта

Реактивная
Быстрая
Нормальная
Неважная
Медленная
Черепашья


Результаты
Другие опросы

Всего голосов: 958
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Как вывести текст по окружности?

Подборка статей по программированию на языке C++ и в средах разработки Visual C+ и C++ Builder. Даже если вы считаете себя профессионалом, вы все равно найдете здесь для себя что-то новое. Опытом делятся профессионалы. Изменяя аргумент iAngle, можно вращать начальную точку - центр. А изменяя iSector можно выводить текст как по окружности, так и по дуге (она задается в градусах). Наверняка многие видели такой эффектик. Какой-нибудь текст крутится вокруг центра и меняется его радиус - расстояние от центра до букв. И тут можно такое же сделать. Для этого надо вызывать эту процедуру по таймеру, где перед вызовом изменять iAngle и iR (переменные завести). Только перед каждым рисованием, надо в этой функции очищать уже нарисованное, чтобы не оставалось старого. А если это непосредственно на канве делается медленно и мигает, но надо рисовать на битмапе и оттуда изображение копировать.

Код
void DrawCircularText (TCanvas *Canvas, AnsiString asFontName, int iHeight, char *szText, int iAngle, int iR, int iCX, int iCY, int iSector)
{
LOGFONT lf; // создаем объект для нестандартного шрифта
HFONT hPrevFont, hFont;
int iPass = iSector/lstrlen(szText); // расстояние между буквами
ZeroMemory(&lf,sizeof(lf));
lf.lfCharSet=RUSSIAN_CHARSET; // для русского языка
lf.lfWeight = 900; // чтоб хоть видно было! Хотя можно убрать
for (int i=0;i<lstrlen(szText);i++)
{
lf.lfEscapement = 10*iAngle-(10*iPass*(i-1)); // угол
lstrcpy(lf.lfFaceName,asFontName.c_str()); // имя шрифта
lf.lfHeight = iHeight; // устанавливаем высоту
hFont = CreateFontIndirect(&lf); // создаем непосредственно шрифт
hPrevFont = SelectObject (Canvas->Handle, hFont); // делаем шрифт hFont
Canvas->TextOut (iCX+iR*sin((-180+iAngle-(i-1)*iPass)*3.14/180),iCY+iR*cos((-180+iAngle-(i-1)*iPass)*3.14/180),szText [i]); // выводим символ
hFont = SelectObject(Canvas->Handle, hPrevFont); // обратно меняем шрифт
DeleteObject (hFont); // удаляем
}
}



Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Статьи и обзоры С++ Visual C++ Как вывести текст по окружности Изменяя аргумент iAngle можно вращать начальную точку центр изменяя iSector выводить текст как по окружности так дуге она задается градусах Наверняка многие видели такой эффектик Какой-нибудь крутится вокруг центра меняется его радиус расстояние от до букв тут такое же сделать Для этого надо вызывать эту процедуру таймеру где перед вызовом изменять переменные завести Только каждым рисованием этой функции