我有一个包含两个状态面板的TStatusBar。第一个长约100像素。第二个填充状态栏宽度的其余部分。如果我尝试在第二个面板中显示长度超过140个字符的字符串,则会将它们截断为此值。
有什么方法可以克服这个错误吗?
D7,Win XP
编辑:是126个字符。
答案 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;