Вопрос прокрутки холста / растрового изображения - PullRequest
1 голос
/ 14 сентября 2010

Я пытаюсь сделать небольшую игру на основе холста в Delphi. По сути, я хотел бы сделать довольно большое растровое изображение (например, 3000x3000), затем загрузить его на холст и иметь возможность прокручивать вправо / влево / вверх / вниз, как обычный просмотрщик изображений, однако я не могу кажется, найти то, что я ищу. Есть идеи?

1 Ответ

3 голосов
/ 14 сентября 2010

Загрузить изображение в объект вне экрана TBitmap. Затем, OnPaint, или когда это подходит для вашего конкретного приложения, используйте BitBlt или Canvas.Draw, чтобы нарисовать прямоугольный образ TBitmap на холсте. Подраздел должен начинаться с (X, Y) на TBitmap и иметь ширину и высоту, равные ClientWidth и ClientHeight формы соответственно.

Теперь отвечайте на события клавиатуры. Напишите обработчик событий FormKeyDown и прослушайте Key = VK_LEFT, Key = VK_RIGHT, Key = VK_UP и Key = VK_DOWN (используйте оператор case). Когда вы обнаружите нажатие такой клавиши, увеличьте / уменьшите X или Y, в зависимости от ситуации, и раскрасьте сцену снова, используя эту начальную точку.

Вы также можете реагировать на события MouseDown, MouseMove и MouseUp для прокрутки с помощью мыши. Либо вы можете использовать только средний (MouseMove): вы можете проверить, находится ли курсор рядом с краем формы, и, если это так, плавно прокрутить в этом направлении (например, с помощью TTimer). Кроме того, вы можете установить флаг FMouseDown на true в MouseDown и сбросить его на false в MouseUp. Затем в MouseMove прокрутите растровое изображение с помощью дельты X-XOld в направлении x, если FMouseDown равно true, и дельты Y-YOld в направлении y. (Здесь X и Y - параметры обработчика события MouseMove; (X, Y) - текущая позиция курсора.) Процедура MouseMove должна заканчиваться

XOld := X;
YOld := Y;

независимо от того, включен FMouseDown или выключен.

...