问题描述
我正在尝试使用Delphi 6将阿拉伯语中的旋转文本绘制到颜料盒中。尝试使用GR32和GDIPLUS等其他工具。
GDIPLUS样品工作正常,我可以绘制“你好”:
graphics := TGPGraphics.Create(PaintBox.Canvas.Handle);
fontFamily:= TGPFontFamily.Create('Times New Roman');
font := TGPFont.Create(fontFamily,24,FontStyleRegular,UnitPixel);
pointF := MakePoint(30.0,10.0);
solidBrush:= TGPSolidBrush.Create(MakeColor(255,255));
r := graphics.DrawString('Hello',-1,font,pointF,solidBrush);
showmessage( GetEnumName(
typeinfo(Tstatus),ord(r) )
);
fontFamily.Free;
font.Free;
solidBrush.Free;
graphics.Free;
运行时,按预期方式在PaintBox中绘制了“ Hello”,并且状态恢复为“ OK”。
现在,我更改DrawString中的字符串(这是一个宽字符串参数),以接受来自放置在画布上的TTnTEdit的输入。
thestring := TNTEdt1.Text;
r := graphics.DrawString(thestring,solidBrush);
现在我什么都没打印了,仍然可以返回。
我希望TTnTEdit实际上返回一个宽字符串吗?
编辑:我应该指出,即使我输入“ Hello”,TNTEdit的内容也不重要。
解决方法
如果您已经使用了 Tnt Delphi Unicode控件,则只需通过发出as_dict = {k: dict(v) for k,v in graph}
,就可以将 TntGraphics.pas 用于Widestring
上的输出:
TCanvas
由于您的问题提到旋转文本,但是您的代码无处尝试,因此请查看this answer的方法TntGraphics.WideCanvasTextOut( MyPaintBox.Canvas,x,y,MyTntEdit.Text );
并使用该方法。当然:将DrawTextRotatedB()
更改为String
,将Widestring
更改为我的示例代码行。使用D7成功地尝试了这一点,我很确定它也可以与D6一起使用: