procedure DrawTextByCenter(Canvas : TCanvas;nX,nY,nH,nW,nColor : integer;dAngle : double;sFontName,sSymbol : string);
const FOCUS_RIDUS = 30;
var
lfont: TLogFont;
oldFont1,OldFont2, newFont: HFont;
FW,FH : integer; //字体高度和宽度
Ceta : double; //初始角度
OX,OY : integer; // x offset and y offset
OldPenColor,OldColor : TColor;
IX,IY : integer;
OldBrushMode : TBrushStyle;
OldPenWidth : integer;
begin
with lfont do begin
lfHeight := nH;
lfWidth := nW;
lfEscapement := Trunc(dAngle*1800/PI);
lfItalic := 0;
lfUnderline := 0;
lfStrikeOut := 0;
lfCharSet := 1;
lfOutPrecision := OUT_TT_PRECIS;
lfClipPrecision:= CLIP_DEFAULT_PRECIS;
lfQuality := PROOF_QUALITY;
lfPitchAndFamily := DEFAULT_PITCH;
StrPCopy(lfFaceName,sFontName);
end;
newFont := CreateFontIndirect(lFont);
oldFont1 := SelectObject(Canvas.Handle, newFont);
//计算新的字体位置
FW := Canvas.TextWidth(sSymbol);
FH := Canvas.TextHeight(sSymbol);
Ceta := Arctan(FH/FW);
OY := Trunc(FH/2 + cos(PI/2 - dAngle + Ceta)*(Sqrt(Sqr(FW)+Sqr(FH))/2));
OX := Trunc(FW/2 - sin(PI/2 - dAngle + Ceta)*(Sqrt(Sqr(FW)+Sqr(FH))/2));
SetBkMode(Canvas.Handle,Transparent);
Oldcolor := GetTextColor(Canvas.Handle);
SetTextColor(Canvas.Handle,nColor);
IX := nX + OX - Trunc(FW/2);
IY := nY + OY - Trunc(FH/2);
TextOut(Canvas.Handle,IX,IY,Pchar(sSymbol),Length(sSymbol));
SetTextColor(Canvas.Handle,OldColor);
DeleteObject(SelectObject(Canvas.Handle, oldFont1));
end;