【问题标题】:Why is the ampersand missing in Firemonkey combo?为什么 Firemonkey 组合中缺少 & 符号?
【发布时间】:2015-05-14 14:32:34
【问题描述】:

当您创建一个 Delphi 项目并添加一个组合框并设置 ComboBox1.Items.Add('Zebra & Zulu') 时,它会在您下拉列表时显示“Zebra & Zulu”。完美。

当您创建 Firemonkey 项目并添加组合框或组合编辑并设置 ComboBox1.Items.Add('Zebra & Zulu')ComboEdit1.Items.Add('Zebra & Zulu ') 当您下拉列表时,它会显示“Zebra Zulu”(不显示 & 符号)。但是,当您使用组合编辑选择它时,文本字段部分会显示“Zebra & Zulu”。很奇怪。

现在有一个解决方法(有点),但对我来说这是值得怀疑的。添加第二个&符号,下拉列表显示&符号。但是,添加第二个 & 符号会显示在组合编辑文本字段部分。不好。

我的问题是你能强制这些组合控件下拉列表显示 & 符号吗?为什么 & 符号一开始就不见了?

【问题讨论】:

    标签: delphi combobox firemonkey


    【解决方案1】:

    这似乎是 VCL 的加速键处理可能遗留下来的内置行为。似乎没有办法使用样式或选项来修改此行为:

    procedure TTextControl.DoChanged;
    var
      TextStr: string;
    begin
      if Assigned(FITextSettings) then
        FITextSettings.TextSettings.BeginUpdate;
      try
        if Assigned(FITextSettings) then
          FITextSettings.TextSettings.Assign(ResultingTextSettings);
        TextStr := DelAmp(Text);  // **!  Here deleting ampersands unconditionally
    
        if Assigned(FTextObject) then
        begin
          UpdateTextObject(FTextObject, TextStr);
    
       // ... etc - method continues
    

    一种解决方法是使用 unicode 全角 & 符号:

     ComboBox1.Items.Add('Zebra & Zulu');
    

    由于多种原因,显然没有吸引力。

    根据上面的代码,这自然会影响所有 FMX TTextControls - 例如,即使是TLabel,在分配时也不会显示与号:

     Label1.Text := 'Zebra & Zulu';
    

    即使是在 VCL 应用程序中,出于兴趣,这个:

      Label1.Caption := 'Zebra & Zulu';
    

    将呈现为

    斑马_祖鲁

    虽然 VCL TComboBox 正确地呈现带有单个 & 符号的项目...


    这是一个开放的 QC,尽管它并不急于解决:

    http://qc.embarcadero.com/wc/qcmain.aspx?d=122564

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2015-05-31
    • 2011-08-06
    • 2021-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多