【问题标题】:Custom draw ComboBox to reduce size of arrow [C++ Builder XE/2]自定义绘制组合框以减小箭头的大小 [C++ Builder XE/2]
【发布时间】:2012-09-07 22:10:59
【问题描述】:

我有一串(水平的)下拉组合框。考虑到其中的数据太小,下拉箭头占用了大量空间,使整个东西看起来很丑。

所以我想知道让“箭头”仅在鼠标悬停或类似情况下打开。但我不希望其他人看到它并让他们的眼睛流血。我知道,我知道,UI 标准是有原因的,但这对我来说似乎是个例外。我假设如果有人想要更改数据,他们至少会将鼠标悬停在它上面,如果不点击它。

目标是 C++ Builder XE2,但 Visual C++ 目标示例也很好。我不期望一个完整的工作示例,只是朝着正确的方向推动(当然,除非有一个完全工作的组件已经在等待拖放,在这种情况下没有必要重新发明)

【问题讨论】:

  • 你能发一张你认为“丑陋”的截图吗?

标签: custom-controls c++builder builder vcl


【解决方案1】:

您无法控制下拉箭头。它是由操作系统而不是 VCL 管理的底层 ComboBox 窗口的一部分。

我建议您使用TEdit 而不是TComboBox,然后创建一个单独的TForm,上面有TListBox。当用户将鼠标悬停在TEdit 上或单击它时,您可以显示TForm 并更新其TListBox 以包含相关项。如果用户单击TListBox 中的某个项目,您可以将该字符串值分配给当前TEdit。这让您可以更好地控制TListBox 显示屏的外观,让您可以更好地控制其屏幕定位,甚至可以通过TForm.AlphaBlend 属性添加一些特殊效果,例如淡入/淡出等.

【讨论】:

  • 谢谢,我想到了类似的东西,我会放在下面。为什么是 TForm?动态创建对象非常简单,并且没有尝试排列整个表单的复杂性?
【解决方案2】:

使用 TLabel 而不是 TEdit(因为用户永远不需要直接编辑它),当用户将鼠标悬停在标签上时,它会在完全相同的位置显示一个 TComboBox,因此很明显您可以单击它。一旦鼠标离开该区域,TComboBox 就会隐藏,只显示标签。

或者,有一个 TEdit,我在自己身上显示箭头,并在单击时显示一个 TListBox(与上面发布的答案非常相似,但没有表单)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多