Borland C++ Builder VCL FAQ - Вывод текста по окружности
ОГЛАВЛЕНИЕ
Страница 60 из 96
Вывод текста по окружности
Нижеприведенная функция выводит текст по кругу:void DrawCircularText (TCanvas *Canvas, AnsiString asFontName, int iHeight,Изменяя аргумент iAngle, вы получаете возможность вращать начальную точку вывода текста, а если изменять агрумент iSector, то можно рисовать текст как по дуге, так и по окружности.
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);
}
}