delphi - 在 Windows 7 X64 中,状态栏无法正确显示从第 11 位开始的面板文本

标签 delphi windows-7 statusbar common-controls

总结:
(1) 这很可能是一个错误。但是,我不能确定它是否与 64 位操作系统、VCL 或 MFC 包装器更相关。请查看下面Delphi专家的回答和评论。
(2) 我的解决方法:
A。情况是我有六个个键值要显示在状态栏中。这些值将在运行时更改。
b.看来我无法为超过 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应用程序项目而不保存,如果我在设计时设置第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) 示例图片:
Designtime
rumtime

有人可以帮忙评论一下可能的原因吗?如有任何建议,我们将不胜感激!

最佳答案

在设计时它不会显示超过第 10 个:

enter image description here

但在运行时看起来像这样:

enter image description here

.dfm 文件中设置的所有属性。

至于为什么会这样我也不知道。但由于它在运行时表现良好,我认为不会造成任何严重的问题。

<小时/>

根据 Warren 的要求,这是我的 .dfm:

object Form3: TForm3
  Left = 0
  Top = 0
  Caption = 'Form3'
  ClientHeight = 105
  ClientWidth = 635
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object StatusBar1: TStatusBar
    Left = 0
    Top = 86
    Width = 635
    Height = 19
    Panels = <
      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
      item
        Text = '12'
        Width = 50
      end
      item
        Text = '13'
        Width = 50
      end>
  end
end

关于delphi - 在 Windows 7 X64 中,状态栏无法正确显示从第 11 位开始的面板文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325137/

相关文章:

ios - 是否可以更改所有 View Controller 的状态栏颜色?

android - 折叠工具栏布局状态栏问题

ios - 在 Swift 3 中更改状态栏背景颜色

delphi - 对角画笔样式给我黑色区域

delphi - 阻止运行主窗体的OnActivate事件

windows - 操作系统/Windows 内部视频

python - 将 "django-admin.py"路径添加到 Windows 7 上的命令行

c++ - 将 C++ 内联汇编函数转换为 delphi 内联汇编函数

string - 在Delphi中使用转义序列取消转义字符串

phpunit 只显示帮助/使用信息,没有测试结果