Delphi中设置数字范围的图形界面

6
偶尔需要一个GUI来设置数字范围,但迄今为止我还没有找到任何好用的组件。 我尝试了以下几种方法:
- 2个TTrackbars:1个用于最小值,1个用于最大值 - 2个TTrackbars:1个用于最小值,1个用于范围 - 2个TSpinEdit控件手动输入数字 - 1个TTrackbar控件,带有一个小按钮可以在最小模式和最大模式之间切换。在最小模式下,我设置selStart,在最大模式下,我设置selEnd(ShowSelRange设置为true)。
大多数选项所需的屏幕空间比我想要的要多,并且它们不直观。理想情况下,我希望像Sony ACID中的滚动条一样工作。您可以单击并拖动3个不同的点到最小值、最大值或两者之间。
是否有任何免费的组件可用于设置范围,或者是否可以通过创造性地使用开箱即用的VCL组件来实现类似的功能?
更新:我已修改TMkRangeSlider以满足我的需求,现在它可以完美地工作了。我已将修改后的组件和演示发送给原始作者。

请问您能分享修改后的代码吗? - Reron
@reron:好的,虽然已经过去十年了,但这是我当时使用的文件。将“ShowMidBar”设置为true,并将“ThumbStyle”设置为“rsRectangle”,以使其看起来像上面的屏幕截图。https://gist.github.com/WouterVanNifterick/19bfec13a4935187ca6838e38de92a94 - Wouter van Nifterick
2个回答

5
如何使用Range Slider, by Michael Kochiashvili呢?它是一个免费的、带源代码的工具,适用于Delphi 5,并且附带演示:

alt text

它不能同时移动最小值和最大值,但由于你有源代码,如果你真的需要这个功能,你可以添加它。


很酷,以前从未见过这个。刚刚下载了它,我会试着玩一下。 - Wouter van Nifterick
我采纳了你的建议,使用了TMkRangeSlider并进行了修改。现在它完全符合我的需求。谢谢! - Wouter van Nifterick
@Wouter van Nifterick,请分享修改后的代码。 - Reron
1
@Reron: https://gist.github.com/WouterVanNifterick/19bfec13a4935187ca6838e38de92a94 - Wouter van Nifterick
有人有把这个转换成FMX的机会吗? - undefined

1

使用标准的TScrollBox,技术上可以在拖动其滑块时(OnScroll事件中的ScrollCode=scTrack),手动调整PageSize和Position属性,模拟您在ACID截图中展示的UI效果。但问题是:1)无法自定义绘制TScrollBar以添加拖动线,2)无法直接确定用户按下鼠标时拖动条的哪个部分(两端还是中间)。除非您能想出一些相当可靠的计算方法,以根据当前Position和PageSize与整个客户区矩形的关系来确定拇指左右边缘的像素偏移量,否则最好编写自己的组件,然后您可以使其外观和行为都符合您的需求。


好的,谢谢你的建议。很奇怪Delphi没有类似的东西,因为在各种应用程序中我经常需要设置数字范围... - Wouter van Nifterick
你所描述的UI并不是标准的。这就是为什么TScrollBox在本质上不支持它(因为底层操作系统本身也不本质地支持它)。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接