我有一个流程面板,我根据他们是否选择显示所有项目,在运行时添加额外的项目。这一切都很好;扩展由工具栏按钮控制。
问题是我们希望用户能够将鼠标移到“+”符号上以展开该部分。
最初我看了TSpeedButton(OnMouseEnter),但即使它是“平面”,焦点矩形仍然显示,因此字形不居中。这个解决方案的主要问题是它的外观。
然后我看着制作TImage的后代。这有点“非常规”,但它有效。在OnMouseEnter或OnClick中,它会切换一个内部布尔“Expanded”标志,然后从资源加载适当的图片。我不喜欢这样的非常规解决方案。
我需要将它添加到几个不同的屏幕,所以我可能会谨慎地为此构建一个组件。我有JVCL,但我没有看到任何合适的副手。
谢谢你的意见/帮助!
我一直很喜欢ModelMaker Code Explorer使用的方法。
例如,当您添加新方法时,会显示折叠的一些很少使用的内容(下图中的“选项和指令”)。
(来源:17slon.com)
当您将鼠标悬停在文本上时,您会注意到它实际上是一个平面按钮。 (除非它不是 - 我相信格里特在这里做了一些自定义的绘画魔术)。
(来源:17slon.com)
单击此按钮时,将出现一个面板。按钮仍在那里,但有一个新的图像。您可以单击它以关闭面板。
(来源:17slon.com)
会话之间保留此切换按钮的状态。 IOW,即使你重新启动Delphi,下一个tima你调用'Add Method','Options and Directives'面板将与你最后一次离开时完全一样。
我不喜欢这样的非常规解决方案。
在过去的几年里,我对非传统的UI解决方案产生了一些怀疑 - 这就是你在这里创造的东西。为什么不使用用户实际需要点击的按钮?这似乎在我使用的软件中更常见,无论是MS Office还是编程实用程序。另外,我会让按钮变得更大:在屏幕截图中,它看起来像是一个小小的东西,你必须使用鼠标光标。哦,好吧,如果我告诉你你还没有要求,为什么不给它“>>”作为标题而不是“+”?如果你给它一个带有助记符的文本标题,它实际上是键盘可访问的。所有这些都应该使您的UI更好,更直观。我猜。
我为没有回答你的问题而道歉,但我希望你花2分钟时间思考你的用户是否真的更喜欢这个解决方案:-)
祝好运!
实际上,我认为在这种情况下使用TImage非常传统。我看到很多人建议使用TImage,当TButton或其任何同事对开发人员试图做的任何事情都没有适当的控制权时。
你试过TBitBtn吗?我认为,当你摆脱文本时,它会集中与你相关的任何图像。我刚刚检查了Delphi 6,我已经安装在这台机器上,它有MouseMove事件。