Delphi 中的 GDIPLUS - 来自 TTnTEdit 的字符串

GDIPLUS in Delphi - string from TTnTEdit

我正在尝试使用 Delphi 将阿拉伯语中的旋转文本绘制到绘画盒中 6. 尝试了不同的工具,例如 GR32,现在尝试了 GDIPLUS。

GDIPLUS 示例工作正常,我可以绘制“Hello”:

  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, 0, 0, 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 中的字符串(这是一个宽字符串参数)以接受来自我放在 canvas.

上的 TTnTEdit 的输入
  thestring := TNTEdt1.Text;   
  r :=  graphics.DrawString(thestring , -1, font, pointF, solidBrush);

现在我没有打印任何东西,但仍然正常 returned。

我希望 TTnTEdit 实际上 return 宽字符串 ?

编辑:我应该指出,TNTEdit 有什么内容并不重要,即使我输入“你好”也是如此。

如果您已经使用 Tnt Delphi Unicode Controls,您还可以使用 TntGraphics.pas for WidestringTCanvas 上输出,只需发出:

TntGraphics.WideCanvasTextOut( MyPaintBox.Canvas, x, y, MyTntEdit.Text );

由于您的问题提到了旋转文本,但您的代码无处尝试,因此请查看 this answer 的方法 DrawTextRotatedB() 并使用该方法。当然:将 String 更改为 Widestring 并将 ACanvas.TextOut(X, Y, AText) 更改为我的示例代码行。使用 D7 成功地尝试了这个,我很确定它也适用于 D6: