delphi - 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 有什么内容并不重要,即使我输入“你好”。
解决方案
如果您已经使用 Tnt Delphi Unicode Controls,您也可以使用TntGraphics.pas在 a上Widestring
输出TCanvas
,只需发出:
TntGraphics.WideCanvasTextOut( MyPaintBox.Canvas, x, y, MyTntEdit.Text );
由于您的问题提到了旋转文本,但您的代码无处可尝试,因此请查看此答案的方法DrawTextRotatedB()
并使用该方法。当然:更改String
并Widestring
进入ACanvas.TextOut(X, Y, AText)
我的示例代码行。使用 D7 成功尝试了这个,我很确定它也适用于 D6:
推荐阅读
- mysql - mySQL:查询以在上个月的每 22 日获取所有行
- github - 在 github 操作中触发工作流之前,我们可以等待另一个 repo 工作流完成吗?
- latex - pandoc 的 markdown pdf:字体大小为 11 或 12pt 会增大字体,但 13 或 14pt 会变小
- node.js - 更新 mongoDB 中的深层嵌套数组(不是文档/对象数组)
- java - 如何将模型的对象传递给 thymeleaf,并将控制器隐藏在 thymeleaf 中?
- html - 在闪亮中返回上一个链接
- aws-lambda - 雪花的异步外部函数不尊重 HttpStatus 429
- javascript - 带有对象解构的下一个 js 动态导入
- javascript - 无法使用 Angular 多次上传同一个文件
- postgresql - 如何复制特定分区表