Delphi TStatusBar在大约140个字符处截断文本

WeG*_*ars 1 delphi

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

有什么办法可以克服这个bug吗?

D7,Win XP


编辑:是126个字符.

RRU*_*RUZ 12

@Altar,TStatusBar组件,使用SB_SETTEXTWindows消息绘制文本,这仅限于在WinXP中绘制127个字符.

lParam的

Pointer to a null-terminated string that specifies the text to set.
Run Code Online (Sandbox Code Playgroud)

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

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

看到这个示例,在第二个面板中绘制一个200字符文本TStatusBar,不要忘记设置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;
Run Code Online (Sandbox Code Playgroud)