Delphi:计算文字包装文本所需的矩形高度

Delphi:计算文字包装文本所需的矩形高度,delphi,rect,Delphi,Rect,Delphi Rio 10.3.1+GR32(文本输出+DT_断字) 我想使用GR32的库中的textowOut在TBitmap32上绘制文本,并且在给定MaxWidth参数和特定字体的情况下,计算容纳wordwrapped文本所需的高度 如何为此计算所需的Rect?GR32中的TextoutW方法(至少对于VCL后端而言)封装了WindowsDrawTextW函数。此Windows API函数确实提供了通过DT\u CALCRECT标志计算输出rect的方法。但是,GR32接口不会将计算出的r

Delphi Rio 10.3.1+GR32(文本输出+DT_断字)

我想使用GR32的库中的textowOut在TBitmap32上绘制文本,并且在给定MaxWidth参数和特定字体的情况下,计算容纳wordwrapped文本所需的高度


如何为此计算所需的Rect?

GR32中的
TextoutW
方法(至少对于VCL后端而言)封装了Windows
DrawTextW
函数。此Windows API函数确实提供了通过
DT\u CALCRECT
标志计算输出rect的方法。但是,GR32接口不会将计算出的rect返回给调用方


因此,我怀疑您需要直接调用
DrawTextW
,传递相应的标志和GR32表面的设备上下文(HDC)。

我猜这取决于您使用的GDI后端。使用
TGDIBackend.textowu
调用Winapi函数
DrawTextW
,该函数不支持计算输出rect。但是,
TGDIBackend.textout
的接口通过值而不是作为var参数传递rect。为了解决这个问题,您需要直接调用Winapi函数
DrawTextW
。我总是返回0,我做错了什么?“DrawTextW(bTray.Handle,PChar(originalttle),Length(originalttle),r,DT_CALCRECT或DT_LEFT或DT_TOP或DT_WORDBREAK);”bTray.Handle的值是多少??我使用的是表单的句柄,糟糕的是,我不得不使用canvas.Handle(DC)。但是现在,我如何将逻辑单位转换为实际像素?这很好,如果没有对设备上下文应用任何转换,您可以使用它,例如,映射模式是MM_文本。