来自TTnTEdit的Delphi字符串中的GDIPLUS

人气:970 发布:2022-10-16 标签: gdi+ delphi

问题描述

我正在尝试使用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";",并返回"确定&q;"状态。

现在我更改DrawString(这是一个宽字符串参数)中的字符串,以接受来自我放置在画布上的TTnTEdit的输入。

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

现在我没有打印任何内容,但仍返回OK。

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

编辑:我要指出的是,TNTEdit包含什么内容并不重要,即使我输入了&Hello";。

推荐答案

如果您已经使用TNT Delphi Unicode控件,您还可以使用TntGraphics.pas在TCanvas上输出,只需发出:

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

既然您的问题提到了旋转文本,但您的代码没有尝试,所以请看一下this answer的方法DrawTextRotatedB()并使用该方法。当然:将String更改为WidestringACanvas.TextOut(X, Y, AText)到我的示例代码行。在D7上成功尝试了这一点,我非常确定它也会在D6上起作用:

951