【问题标题】:Delphi TStatusBar truncates the text at about 140 charsDelphi TStatusBar 在大约 140 个字符处截断文本
【发布时间】:2010-07-16 20:55:44
【问题描述】:

我有一个包含两个状态面板的 TStatusBar。第一个是大约 100 像素长。第二个填充状态栏宽度的其余部分。如果我尝试在第二个面板中显示超过 140 个字符的字符串,它会将它们截断为这个值。

有什么办法可以克服这个错误?

D7,赢 XP


编辑:是 126 个字符。

【问题讨论】:

  • 这不是在 Windows 7 下运行的 Delphi 2007 的问题。
  • 看看 VCL 源码。它会告诉你为什么会这样。
  • 140 个字符?也许它支持推特?他,他……

标签: delphi


【解决方案1】:

@Altar,TStatusBar 组件,使用SB_SETTEXT Windows 消息绘制文本,在 WinXP 中只能绘制 127 个字符。

l参数

Pointer to a null-terminated string that specifies the text to set.

如果 wParam 是 SBT_OWNERDRAW,这个 参数代表 32 位数据。 父窗口必须解释 数据并绘制文本时 接收 WM_DRAWITEM 消息。 在 Windows XP 及更早版本,文本为 每个部分限制在 127 字符。此限制已 在 Windows Vista 中删除。

作为解决方法,您可以使用OnDrawPanel 事件自己绘制状态栏的文本。

查看此示例,它在TStatusBar 的第二个面板中绘制了一个 200 个字符的文本,不要忘记将面板的属性 Style 设置为 psOwnerDraw

procedure TForm1.StatusBar1DrawPanel(StatusBar: TStatusBar;
  Panel: TStatusPanel; const Rect: TRect);
var
 MyLongText: string;
 i         : Integer;
begin

  //fill an string with 200 chars
  MyLongText:= StringOfChar('-', 199)+'X';

  If Panel = StatusBar1.Panels[1] Then
      With StatusBar1.Canvas Do
        TextOut(Rect.left, Rect.top + 2, MyLongText) ;
End;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多