【问题标题】:Delphi TextRect in Windows GDIWindows GDI 中的 Delphi TextRect
【发布时间】:2011-11-05 13:21:00
【问题描述】:

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

感谢您的回答!

【问题讨论】:

  • 在 GDI 中,您可以使用 TextOutDrawText (DrawTextEx)。它们包含比 Delphi 函数更多的特性。您到底在寻找什么功能?您的TCanvas 代码是什么样的?为什么你觉得你需要放弃TCanvas
  • 但我需要 TextRect 的主要思想(我可以剪切文本的一部分而不是绘制它)。我在 DrawText/Ex 中看不到它。请看张贴的图片,我需要在 TGauge(或其他进度条)中绘制文本。

标签: delphi text gdi rect drawtext


【解决方案1】:

您正在寻找ExtTextOut 函数。

示例:

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;

但我觉得你真正想做的,是画'NOT-coloured text'

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;


(来源:rejbrand.se

【讨论】:

  • @maxfax:好的,现在(迟到总比没有好——有时我有点“慢”……)我明白你从@987654329 中遗漏了什么@。您正在寻找的 WinAPI 函数是 ExtTextOut。不过,我想知道是否只绘制一个非彩色文本不是更简单......
猜你喜欢
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 2013-05-17
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多