文字随弧排列,高分求算法 在椭圆内写入汉字!汉字随椭圆弧度排列!汉字旋转的角度要与该点于水平夹角相等!当椭圆的纵轴或短轴变化的时候文字的位置跟着变化!希望能得到解答!谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //看以下我写的代码能否满足楼主需求(可是原创呀!^_^)unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure MyTextOut(Ca:TCanvas;X,Y,Angle:Integer;Text:String);var lf : TLogFont;begin with Ca do begin GetObject(Font.Handle, sizeof(lf), @lf); lf.lfEscapement := Angle*10; Font.Handle := CreateFontIndirect(lf); TextOut(X,Y,Text); lf.lfEscapement := 0; lf.lfOrientation := 0; Font.Handle := CreateFontIndirect(lf); end;end;procedure CircleText(Ca:TCanvas;X0,Y0,RX,RY,BeginAngle,EndAngle:Integer;Text:WideString);const aq=180/3.1415926; qa=3.1415926/180; procedure _CircleAlpha(Ca:TCanvas;X0,Y0,RX,RY,Angle:Integer;Alpha:WideChar); var x,y:Integer; tw,th:Double; begin tw:=Ca.TextWidth(Alpha) / 2; th:=Ca.TextWidth(Alpha) / 2; x:=Round(Cos((Angle-90)*qa)*tw)+X0; y:=Round(Sin((Angle-90)*qa)*tw)+Y0; x:=Round(Cos(Angle*qa)*RX)+x; y:=Round(Sin(Angle*qa)*RY)+y; MyTextOut(Ca,x,y,270-Angle,Alpha); end;var Angle,Step:Double; n:Integer;begin Step:=(EndAngle-BeginAngle)/Length(Text); Angle:=BeginAngle; for n:=1 to Length(Text) do begin _CircleAlpha(Ca,X0,Y0,RX,RY,Round(Angle),Text[n]); Angle:=Angle+Step; end;end;procedure TForm1.Button1Click(Sender: TObject);begin Canvas.Font.Name:='宋体'; Canvas.Font.Color:=clBlue; Canvas.Font.Size:=12; CircleText(Canvas,200,200,150,100,180,360,'I am Wizardqi(男巫)!');end;end. 参考:http://community.csdn.net/Expert/topic/4417/4417147.xml?temp=.731518 求解 关于adoquery问题 注册过的ocx提示“尚未注册库”??? 请教一个DLL的问题 控件keypress事件的参数为char,当输入中文时如何处理? 关于SQL? 请教,如何将图片和文字保存在同一个字段? Socket(C/S)结构中,怎么传送硬盘的大量图片(非图像),并在另一端存放于硬盘,简单否。, FastReport:如果取得Fastreport中Memo的数据值..Memo的数据来源于数据集. 大富翁网站的地址是多少??! teechart 7.0问题 怎样能知道点击保存对话框的确定还是取消按钮
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
procedure MyTextOut(Ca:TCanvas;X,Y,Angle:Integer;Text:String);
var
lf : TLogFont;
begin
with Ca do
begin
GetObject(Font.Handle, sizeof(lf), @lf);
lf.lfEscapement := Angle*10;
Font.Handle := CreateFontIndirect(lf);
TextOut(X,Y,Text);
lf.lfEscapement := 0;
lf.lfOrientation := 0;
Font.Handle := CreateFontIndirect(lf);
end;
end;
procedure CircleText(Ca:TCanvas;X0,Y0,RX,RY,BeginAngle,EndAngle:Integer;Text:WideString);
const
aq=180/3.1415926;
qa=3.1415926/180;
procedure _CircleAlpha(Ca:TCanvas;X0,Y0,RX,RY,Angle:Integer;Alpha:WideChar);
var
x,y:Integer;
tw,th:Double;
begin
tw:=Ca.TextWidth(Alpha) / 2;
th:=Ca.TextWidth(Alpha) / 2;
x:=Round(Cos((Angle-90)*qa)*tw)+X0;
y:=Round(Sin((Angle-90)*qa)*tw)+Y0;
x:=Round(Cos(Angle*qa)*RX)+x;
y:=Round(Sin(Angle*qa)*RY)+y;
MyTextOut(Ca,x,y,270-Angle,Alpha);
end;
var
Angle,Step:Double;
n:Integer;
begin
Step:=(EndAngle-BeginAngle)/Length(Text);
Angle:=BeginAngle;
for n:=1 to Length(Text) do
begin
_CircleAlpha(Ca,X0,Y0,RX,RY,Round(Angle),Text[n]);
Angle:=Angle+Step;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Canvas.Font.Name:='宋体';
Canvas.Font.Color:=clBlue;
Canvas.Font.Size:=12;
CircleText(Canvas,200,200,150,100,180,360,'I am Wizardqi(男巫)!');
end;end.