我有一个包含两个状态面板的TStatusBar.第一个长约100像素.第二个填充状态栏宽度的其余部分.如果我尝试在第二个面板中显示长度超过140个字符的字符串,则会将它们截断为此值.
有什么办法可以克服这个bug吗?
D7,Win XP
编辑:是126个字符.
RRU*_*RUZ 12
@Altar,TStatusBar组件,使用SB_SETTEXTWindows消息绘制文本,这仅限于在WinXP中绘制127个字符.
lParam的
Run Code Online (Sandbox Code Playgroud)Pointer to a null-terminated string that specifies the text to set.如果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)