Рисование относительно полос прокрутки - PullRequest
1 голос
/ 12 июля 2020

Я делаю некоторые компоненты для себя, пытаюсь сделать «генератор риффов» для создания мелодий в формате midi. Поэтому я пишу редактор pianoroll (например, в fl studio et c).

Screenshot of component

The problem im having is drawing relative to the scrollbar positions. I am trying it for two days now, but i cant seem to figure out how to do this. I already added variables and procedures for setting the scroll positions, but i dont understand how i can draw up/down and sideways when i scroll.

I added the code i have so far, i am using the GDI+ unit from Erik Bilsen (www.bilsen.com/gdiplus) для рисования.

Если кто может посмотреть в моем коде, и помогите мне получить правильный рисунок, который был бы потрясающим! Я выпущу этот и другие компоненты с открытым исходным кодом, когда закончу sh, чтобы другие люди тоже могли использовать эти компоненты.

Код компонента: https://pastebin.com/562yfDvu

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

1 Ответ

3 голосов
/ 13 июля 2020

Некоторые типичные вычисления

Диапазон полосы прокрутки

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)
...