[VCL] 求助: 滚动条 设计问题
参数有:
PelsCount : 可用于滑动的总长度;
FMax , FMin : 最大和最小范围值.(滚动条滚动之后改变 FPosition 的值在 FMax 和 FMin 中间)
我试过用这样的计算方法,但不正确:
CenterHeight := PelsCount - PelsCount div 20 * (FMax - FMin).
请有心人帮忙帮忙我!重谢了!
2楼: 我觉得你说的不是很清除,FMax , FMin 应该是限制滚动的范围的,如果是这样的话
还要确定CenterHeight的计算原则才可以计算 如进销存库存设计
3楼: 谢谢你的回复.我表达能力差是真的.:)
CenterHeight 就是最终要得到的 滑动条 长度.FMin 和 FMax 是值范围.整个滚动条的滚动只为了在这两个数值中间定位数值.唉,看你 IE 右边的滚动条就知道了.它中间那个滑动条是动态的.恰到好处的设计.要求得到的结果差不多是这样:
当 FMin = 0, FMax = 1,PelsCount = 200 的时候, CenterHeight 应该 = 185;
当 FMin = 0, FMax = 10,PelsCount = 200 的时候, CenterHeight 应该 = 150;
当 FMin = 0, FMax = 20,PelsCount = 200 的时候, CenterHeight 应该 = 130;
......
4楼: 我觉得公式应该是:
CenterHeight * (1 + Step * Pass) = PelsCount;
其中 Step就是一共要卷动的次数,也就是 FMax - FMin;
而Pass 就是每卷动一次增加的长度 比例,这个 按你需要自己定,也可以 和Step形成关联。
所以 CenterHeight := PelsCount div (1 + (FMax - FMin) * FPass);
5楼: 谢谢兄弟回复.但这公式还是有缺点.
6楼: 如果是整除问题,在 FMax = FPosistion 调整一下算法应该可以了。
或者以像素作单位,那么公式就是:
CenterHeight + Step * PassPixs = PelsCount;
=> CenterHeight := PelsCount - Step * PassPixs;
记账软件版7楼: 具体做这个应该从两方面考虑
1:就是你提到的滚动条中间的滑钮的长度,也就是CenterHeight
应该差不多是
当前显示内容的内容/总内容=CenterHeight/滚动条的长度
2:就是滚动条中间的滑钮的显示位置,其实就是把FPosistion 换算一下
至于FMax和FMin只是为了限制滚动的范围
从上面的思路你再考虑考虑吧,会有答案的
8楼: 不知兄弟是否误会了.最终想求的数值,是在每一次 FMax 或者 Min 改变之后 滑动条(滚动条中间那个)应该分配多少的长度.
求助啊!大汗中...
9楼: caiaj 兄弟理解我的意思.但你的想法结合到 TMemo 一起去了.
这个滚动条是用在很多地方的.要求的效果就象系统的滚动条那样.就是如下效果差不多:
当 FMin = 0, FMax = 1,PelsCount = 200 的时候, CenterHeight 应该 = 190;
当 FMin = 0, FMax = 10,PelsCount = 200 的时候, CenterHeight 应该 = 160;
当 FMin = 0, FMax = 20,PelsCount = 200 的时候, CenterHeight 应该 = 145;
当 FMin = 0, FMax = 50,PelsCount = 200 的时候, CenterHeight 应该 = 130;
10楼: 你的举例肯定有问题,我告诉你的思路没有问题
你看看TScrollBar的属性就知道了,不知你是否因为不好看就不用,要自己写一个
如果没什么问题的话TScrollBar和IE的是相同的
11楼: 谢谢.看过 TScrollBar 了.CenterHeight 和 FPosition 全部通过 API 实现的.头大!
难道我们自己无法计算这公式?
12楼: 给分了. caiaj 兄给的信息.让我寻找到了结果.
最终计算公式如下;
FTrack.Height := GetALLPelsCount * FPageCount div (FMaxValue - FMinValue);
可移动象素总和 PageCount 参数 范围值参数 如金蝶财务软件迷你版