相对于滚动条的绘画

Painting relative to scrollbars

我正在制作一些我自己使用的组件,我正在尝试制作一个“riff 生成器”来制作 midi 格式的曲调。因此,我正在编写钢琴卷轴编辑器(例如在 fl studio 等中)。

我遇到的问题是相对于滚动条位置的绘制。我现在已经试了两天了,但我似乎不知道该怎么做。我已经添加了用于设置滚动位置的变量和程序,但我不明白我如何在滚动时绘制 up/down 和横向。

我添加了目前已有的代码,我正在使用 Erik Bilsen (www.bilsen.com/gdiplus) 的 GDI+ 单元进行绘图。

如果有人可以查看我的代码,并帮助我正确绘制图纸,那就太棒了!完成后我会将这个和其他组件作为开源发布,这样其他人也可以使用这些组件。

组件代码:https://pastebin.com/562yfDvu

FScrollPosX : Integer;
FScrollPosY : Integer;
FScrollMaxX : Integer;
FScrollMaxY : Integer;
FOldScrollX : Integer;
FOldScrollY : Integer;

一些典型的计算

滚动条范围

Given Virtual extent (VirtExt) in pixels
Given Viewport extent (VPExt) in pixels

Scrollbar range = VirtExt - VPExt (to leave the last part visible in the viewport)

具有给定滚动位置的 ViewPort 中的对象位置

Given Object.pos (ObjPos) (in virtual space)
Given Sroll position (ScrPos)

Position in viewport: ObjPos - ScrPos

对象可见性过滤器

Visible if (OPos >= ScrPos) and (OPos < ScrPos+VPExt)