Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.

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

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); // удаляем
 
   }
 
 }
 
 
Изменяя аргумент iAngle, можно вращать начальную точку - центр. А изменяя iSector можно выводить текст как по окружности, так и по дуге (она задается в градусах). Наверняка многие видели такой эффектик. Какой-нибудь текст крутится вокруг центра и меняется его радиус - расстояние от центра до букв. И тут можно такое же сделать. Для этого надо вызывать эту процедуру по таймеру, где перед вызовом изменять iAngle и iR (переменные завести). Только перед каждым рисованием, надо в этой функции очищать уже нарисованное, чтобы не оставалось старого. А если это непосредственно на канве делается медленно и мигает, но надо рисовать на битмапе и оттуда изображение копировать.


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS