Обобщение:
(1) Скорее всего, это ошибка. Однако я не могу точно сказать, связано ли это больше с 64-битной ОС, или с VCL, или с MFC-оболочкой. Ознакомьтесь с приведенными ниже ответами и комментариями экспертов Delphi.
(2) Обходной путь для меня:
a. Ситуация такова, что у меня есть six
ключ-значение pairs
для отображения в строке состояния. Значения будут изменены во время выполнения.
б. Кажется, я не могу set text
использовать более 10
панелей.
c. В этом отношении я буду использовать six
вызовы set text
для значений и two
вызовы set text
для последних двух ключей. Таким образом, мне не нужно превышать лимит 10
.
d. Чтобы set text
заработало, мне нужно предоставить другой текст, который уже есть.
e. Таким образом, пример кода можно описать как:
// 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'
==================================================================
В моей Windows 7 X64 статусбар не показывает правильно текст для панелей, начиная с 11-го числа.
(1) Создайте пустой проект приложения VCL without
, сохранив его, если я установлю текст для 11-й панели состояния во время разработки, текст вообще не будет отображаться во время выполнения. (Смотрите прикрепленные картинки.)
(2) Если я сохраню его и снова открою, текст также не будет отображаться во время разработки.
(3) Если я установлю текст во время выполнения, текст будет отображаться только тогда, когда новый текст отличается от старого. Скажем, текст для 11-й панели установлен на 'try'
во время разработки:
Self.stat1.Panels[10].Text := 'try'; // 'try' is not shown
self.stat1.Panels[10].Text := 'try_'; // 'try_' is shown
(4) Такое поведение происходит только в моей Windows 7 X64, но не в моей Windows XP.
(5) Я думаю, что такое же поведение характерно для всех версий Delphi.
(6) Похоже, что поведение больше связано с версией Windows, чем с Delphi. Я имею в виду, что одно и то же приложение-образец будет демонстрировать описанное выше поведение в Windows 7, но не в Windows XP.
(7) Образец файла dfm выгружается, как показано ниже:
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) Примеры изображений:
Может ли кто-нибудь помочь прокомментировать возможную причину? Любое предложение приветствуется!