Summarization:
(1) This is very likely to be a bug. However, I cannot say for sure whether it is more related to 64bit OS, or VCL, or MFC wrapper. Please check the answers and comments below from Delphi experts.
(2) Workaround for me:
a. The situation is that I have six
key-value pairs
to show in the status bar. The values will be changed in run time.
b. It seems I cannot set text
for more than 10
panels.
c. In this respect, I will use six
calls of set text
for the values, and use two
calls for set text
for the last two keys. Thus, I don't have to exceed the 10
limit.
d. In order to make set text
work, I need provide different text that it already has.
e. Sample code can thus be described as:
// Designtime
stat1.Panels[0].Text := 'Key1'
stat1.Panels[2].Text := 'Key2'
stat1.Panels[4].Text := 'Key3'
stat1.Panels[6].Text := 'Key4'
stat1.Panels[8].Text := 'Key5__'
stat1.Panels[10].Text := 'Key6__'
// runtime
stat1.Panels[1].Text := 'Value1'
stat1.Panels[3].Text := 'Value2'
stat1.Panels[5].Text := 'Value3'
stat1.Panels[6].Text := 'Value4'
stat1.Panels[9].Text := 'Value5'
stat1.Panels[11].Text := 'Value6'
stat1.Panels[8].Text := 'Key5'
stat1.Panels[10].Text := 'Key6'
==================================================================
In my Windows 7 X64, the statusBar does not show text for the panels starting from the 11th correctly.
(1)
New an empty VCL application project without
saving it, if I set the Text for the 11th status panel at design time, the text will not be shown at all at run time. (See the attached pictures.)
(2) If I save it and reopen it, the text will also not be shown in design time.
(3)
If I set the Text at run time, the text will be shown only when the new text is different from the old one. Say the Text for the 11th panel is set to 'try'
at design time:
Self.stat1.Panels[10].Text := 'try'; // 'try' is not shown
self.stat1.Panels[10].Text := 'try_'; // 'try_' is shown
(4) This behavior only happens on my Windows 7 X64, but not on my Windows XP.
(5) I would think the same behavior allpies to all Delphi versions.
(6) It seems the behavior is more related to Windows version than to Delphi. I mean, the same sample application will shown the above behavior on Windows 7 but not on Windows XP.
(7) A sample dfm file is dumped as below:
object Form3: TForm3
Left = 0
Top = 0
Caption = 'Form3'
ClientHeight = 202
ClientWidth = 731
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object stat1: TStatusBar
Left = 0
Top = 183
Width = 731
Height = 19
Panels = <
item
Text = '0'
Width = 50
end
item
Text = '1'
Width = 50
end
item
Text = '2'
Width = 50
end
item
Text = '3'
Width = 50
end
item
Text = '4'
Width = 50
end
item
Text = '5'
Width = 50
end
item
Text = '6'
Width = 50
end
item
Text = '7'
Width = 50
end
item
Text = '8'
Width = 50
end
item
Text = '9'
Width = 50
end
item
Text = '10'
Width = 50
end
item
Text = '11'
Width = 50
end>
ExplicitLeft = 248
ExplicitTop = 152
ExplicitWidth = 0
end
object btn1: TButton
Left = 152
Top = 40
Width = 433
Height = 89
Caption = 'btn1'
TabOrder = 1
OnClick = btn1Click
end
end
(8)
Sample pictures:
Could some one help to comment on the possible reason? Any suggestion is appreciated!