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

时间:2010-07-16 20:55:44

标签: delphi

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

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

D7,Win XP


编辑:是126个字符。

1 个答案:

答案 0 :(得分:12)

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

  

lParam的

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;