Delphi中的GDIPLUS-TTnTEdit中的字符串

问题描述

我正在尝试使用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一起使用:

rotated text: Arabian,Katakana,Kanji