C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Как вывести текст по окружности? / Алгоритмы / Borland C++

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

Автор: неизвестен
Текст предоставил: KAV
Исходная ссылка: - - -

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 (переменные завести). Только перед каждым рисованием, надо в этой функции очищать уже нарисованное, чтобы не оставалось старого. А если это непосредственно на канве делается медленно и мигает, но надо рисовать на битмапе и оттуда изображение копировать.