Borland C++ Builder VCL FAQ - Вывод текста по окружности

ОГЛАВЛЕНИЕ


Вывод текста по окружности

Нижеприведенная функция выводит текст по кругу:
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;

    iPass = iSector/lstrlen (szText);
    ZeroMemory (&lf, sizeof (lf));
    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);
        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, то можно рисовать текст как по дуге, так и по окружности.