【发布时间】:2010-12-04 17:46:39
【问题描述】:
我正在使用 Delphi7,我想要一个带有分隔项的 ComboBox(就像在弹出菜单中一样)。
我已经在 Mozilla Sunbird(我知道,它不是 Delphi ......)中看到了这个完美的实现方式:
分隔项是一条简单的灰线 绘制在项目的中心
如果您将鼠标悬停在分隔符上 鼠标,选择不 出现
如果用户点击分隔符, 它也没有被选中并且 组合框没有关闭。
没有。 1 可以使用 DrawItem 来实现。没有二号我也能活下去,因为我对此一无所知。
对于 3 号,我正在寻求您的帮助。我发现在关闭后立即将 CBN_CLOSEUP 消息发送到组合框。
我考虑过挂钩窗口进程,如果 CBN_CLOSEUP 被发送到某个组合框,然后反击它。但我不确定这是否是最好的解决方案,或者是否还有其他更优雅的方法?
无论解决方案是什么,我都想要一个标准的 ComboBox,它可以正确支持 WinXP/Vista/7 主题。
谢谢!
编辑:有关工作组件,请参阅此线程:
Can you help translating this very small C++ component to Delphi?
【问题讨论】:
-
您要求提供标准组合框,但您还要求提供具有分隔符的组合框。这些是互斥的请求。 Mozilla 的组合框可以做到这一点,因为它不是操作系统提供的控件; Mozilla 为其所有控件提供了所有自己的代码,因此它可以在所有受支持的平台上一致地工作。
-
Mozilla 的小部件一直是我的烦恼之源。它们以完全错误的方式实现一致性,跨平台保持一致,但用户倾向于在单个平台上运行。您真正想要的一致性是与本机平台的一致性,而他们做不到。除了Qt还有什么可以实现跨平台原生的widget吗?
-
Mozilla 的增强组合框非常适合 Win 环境,并通过组合框分隔符添加了一个绝妙的想法。但我同意你的观点,Windows 的 iTunes/Safari 非常糟糕且令人困惑(尽管它的目标显然是让从 Win PC 到 Mac 的转换更容易)......
-
我只是讨厌他们不使用原生平台 UX 元素做事。你见过 Firefox 4 的新菜单习语吗?太糟糕了。
标签: delphi combobox delphi-7 separator