【问题标题】:Delphi XE5 Firemonkey mobile custom listboxDelphi XE5 Firemonkey 移动自定义列表框
【发布时间】:2013-12-25 10:58:33
【问题描述】:

虽然我正在尝试像 embarcadero 提供的示例那样制作自定义列表框,但它看起来不错,但对于移动应用程序,我需要制作自定义列表框项目,但是当我右键单击表单上的任何控件时,我没有得到编辑自定义样式的选项。我需要我的移动应用程序来制作一些自定义的列表框项目,以在每个项目中显示 2 个图像和 2 个文本。有什么建议吗?

【问题讨论】:

    标签: delphi firemonkey delphi-xe5


    【解决方案1】:

    您不能在 FM 移动应用程序中使用“编辑自定义/默认样式”。

    我发现绕过,您可以将任何 VCL 样式加载到位图样式设计器中并将其保存为 FireMonkey 样式。我确实喜欢过几次,在某些控件中有一些奇怪的行为。但如果您的应用中只需要 2 或 3 种控件类型,您可以尝试成功。

    在 VCL 样式中,您可以在另一个控件中添加 2 个 TText 和 2 个 TImage 组件。

    对于 Android 应用程序中的默认设置,您只能使用浅色和深色默认样式,但我转换为 Android 样式也包含在 IDE 蓝色和绿色 Metropolis 样式中,看起来工作正常。

    【讨论】:

    • 一切正常吗?因为即使在桌面应用程序中,当我尝试编辑自定义项目时,有时也会出现错误......我认为这是我这边的问题,但看起来 embarcadero 发布了一个没有 alpha 和 beta 测试的垃圾应用程序......
    • 你说得对,我在工作中使用 XE5……对我来说,这是一种体验……每天打开和关闭 IDE 10 次 :) 但如果我必须这样做……我必须这样做……
    【解决方案2】:

    随心所欲地将控件拖放到列表框项目中,就像使用任何其他控件一样。举个简单的例子,你可以这样做:

    ListBox.items.add(''); // blank Text which normally acts as title
    BoxItem := ListBox.ListItems[ListBox.Items.Count-1];
    NewTitle := TText.create(nil);
    NewTitle.Text := 'New Orange Title';
    newTitle.color := TAlphaColors.Orange;
    NewTitle.parent := BoxItem;
    NewTitle.Align := TAlignLayout.Client;
    

    【讨论】:

      【解决方案3】:

      Jordan Web 的答案很好用。我冒昧地扩展了他的例子:

      随心所欲地将控件拖放到列表框项中,就像使用任何其他控件一样。举个简单的例子,你可以这样做:

      ListBox.items.add(''); // blank Text which normally acts as title
      BoxItem := ListBox.ListItems[ListBox.Items.Count-1];
      NewTitle := TText.create(nil);
      NewTitle.Text := 'New Orange Title';
      newTitle.color := TAlphaColors.Orange;
      NewTitle.parent := BoxItem;
      NewTitle.Align := TAlignLayout.Client;
      

      到:

      一个图像和两个文本对象的示例

        procedure TForm10.Button1Click(Sender: TObject);
        var newtitle : Ttext;
            boxitem : tlistboxitem;
            newimage : timage;
            tw : single;
        begin
          ListBox1.items.add('');
          BoxItem := ListBox1.ListItems[ListBox1.Items.Count-1];
      
          newimage := timage.create(nil);
          newimage.width := 24;
          newimage.height := 24;
          newimage.bitmap := Image1.Bitmap;
          Newimage.Align := TAlignLayout.Left;
          newimage.parent := BoxItem;
          Newimage.HitTest := false;  // otherwise you can't select the listitem
      
          tw := (ListBox1.Width - newimage.Width)/2;
          NewTitle := TText.create(nil);
          newtitle.TextSettings.Font.Style := [TFontStyle.fsBold];
          NewTitle.Width := tw;   //Set width to avoid partial text
          Newtitle.Margins.Left := 5;
          NewTitle.Text := 'New Orange Title ' + ListBox1.Items.Count.ToString ;
          NewTitle.TextSettings.HorzAlign := TTextAlign.Leading;
          newTitle.color := TAlphaColors.Orange;
          NewTitle.parent := BoxItem;
          NewTitle.Align := TAlignLayout.Left;
          NewTitle.HitTest := false;  //otherwise you can't select the listitem
          boxitem.TagString := NewTitle.Text;  //the required string when clicking the listitem
      
          NewTitle := TText.create(nil);
          NewTitle.Width := tw;
          NewTitle.Text := 'New Green SubTitle ' + ListBox1.Items.Count.ToString;
          NewTitle.TextSettings.HorzAlign := TTextAlign.Leading;
          newTitle.color := TAlphaColors.Green;
          NewTitle.parent := BoxItem;
          NewTitle.Align := TAlignLayout.right;
          NewTitle.HitTest := false;
        end;
      
      
        procedure TForm10.ListBox1Change(Sender: TObject);
        begin
          label1.Text := listbox1.Selected.TagString;
        end;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-22
        • 1970-01-01
        • 2014-10-18
        • 2014-09-26
        相关资源
        最近更新 更多