当前位置:主页>仓库管理软件> 列表

[VCL] 求助: 滚动条 设计问题

记账软件版1楼: 小弟正在制作一个 滚动条 控件.现在要写一个子程序来计算滚动条中间的滑动条的适当长度,程序在执行过程中它的滑动条的大小是动态改变的.大家用滚动条多了,应该知道它是怎么回事.可惜我思考了 1 天时间依然没有头绪.

参数有:

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 参数 范围值参数 如金蝶财务软件迷你版