windowsgdi中的delphitextrect

windowsgdi中的delphitextrect,delphi,text,gdi,rect,drawtext,Delphi,Text,Gdi,Rect,Drawtext,GDI中是否有类似的Delphi TextRect?我查看了DrawText,DrawTextEx,但没有找到我需要的东西。我需要绘制进度条的百分比文本,该进度条分为两个颜色部分,例如,文本的左部分为黑色,右部分为白色。所以通常在所有进度条中都是这样 谢谢你的回答 您正在寻找该函数 样本: procedure TForm4.FormPaint(Sender: TObject); const S = 'This is a sample text'; begin ExtTextOut(Ca

GDI中是否有类似的
Delphi TextRect
?我查看了
DrawText,DrawTextEx
,但没有找到我需要的东西。我需要绘制进度条的百分比文本,该进度条分为两个颜色部分,例如,文本的左部分为黑色,右部分为白色。所以通常在所有进度条中都是这样

谢谢你的回答

您正在寻找该函数

样本:

procedure TForm4.FormPaint(Sender: TObject);
const
  S = 'This is a sample text';
begin
  ExtTextOut(Canvas.Handle, 10, 10, ETO_CLIPPED,
    Rect(40, 10, 100, 100), PChar(S), length(S), nil)    
end;
但我认为你真正想做的是画:



(来源:)

在GDI中,您可以使用
TextOut
DrawText
DrawTextEx
)。这些函数包含比Delphi函数更多的特性。你到底想要什么功能?您的
tcavas
代码看起来怎么样?为什么您觉得需要放弃
TCanvas
?但我需要TextRect的主要思想(我可以剪切文本的一部分,而不是绘制它)。我在DrawText/Ex中看不到它。请看发布的图片,我需要像在TGauge(或其他进度条)中那样绘制文本。@maxfax:好的,现在(迟做总比不做好——我有时有点“慢”)我看到了
TextRect
中缺少的内容。您要查找的WinAPI函数是
ExtTextOut
。尽管如此,我还是想知道仅仅画一个非彩色的文本是否更简单。。。
procedure DrawTextNOT(const hDC: HDC; const Font: TFont; const Text: string; const X, Y: integer);
begin
  with TBitmap.Create do
    try
      Canvas.Font.Assign(Font);
      with Canvas.TextExtent(Text) do
        SetSize(cx, cy);
      Canvas.Brush.Color := clBlack;
      Canvas.FillRect(Rect(0, 0, Width, Height));
      Canvas.Font.Color := clWhite;
      Canvas.TextOut(0, 0, Text);
      BitBlt(hDC, X, Y, Width, Height, Canvas.Handle, 0, 0, SRCINVERT);
    finally
      Free;
    end;
end;

procedure TForm4.FormPaint(Sender: TObject);
const
  S = 'This is a sample text';
var
  ext: TSize;
begin
  Canvas.Brush.Color := clBlack;
  Canvas.FillRect(Rect(0, 0, Width div 2, Height));
  Canvas.Brush.Color := clWhite;
  Canvas.FillRect(Rect(Width div 2, 0, Width, Height));
  ext := Canvas.TextExtent(S);

  DrawTextNOT(Canvas.Handle, Canvas.Font, S, (Width - ext.cx) div 2,
    (Height - ext.cy) div 2);
end;