首页 > 解决方案 > 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, 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 中的字符串(这是一个宽字符串参数)以接受来自我放置在画布上的 TTnTEdit 的输入。

  thestring := TNTEdt1.Text;   
  r :=  graphics.DrawString(thestring , -1, font, pointF, solidBrush);

现在我没有打印任何东西,并且仍然可以返回。

我希望 TTnTEdit 实际上返回一个宽字符串?

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

标签: delphigdi+

解决方案


如果您已经使用 Tnt Delphi Unicode Controls,您也可以使用TntGraphics.pas在 a上Widestring输出TCanvas,只需发出:

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

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

旋转文本:阿拉伯文、片假名、汉字


推荐阅读