I'm trying to make a small game based on the canvas in Delphi. Basically, I'd like to make a fairly large bitmap ( 3000x3000, for example ), then load it into the canvas, and being able to scroll right/left/up/down just like an ordinary image viewer, however I can't seem to find what I'm looking for. Any ideas?
Load the image to an off-screen TBitmap
object. Then, OnPaint
, or whenever is suitable in your particular application, use BitBlt
or Canvas.Draw
to draw a rectangular subimage of the TBitmap
onto the canvas. The subpart should start at (X, Y)
on the TBitmap
and have a width and height equal to ClientWidth
and ClientHeight
of the form, respectively.
Now, respond to keyboard events. Write a FormKeyDown
event handler, and listen to Key = VK_LEFT
, Key = VK_RIGHT
, Key = VK_UP
, and Key = VK_DOWN
(use a case
statement). When you detect such a key being pressed, increase/decrease X
or Y
, as appropriate, and paint the scene again using this starting point.
You can also respond to the MouseDown
, MouseMove
, and MouseUp
events to scroll using the mouse. Either you can use the middle one only (MouseMove
): You can check if the cursor is near an edge of the form, and if so, scroll in this direction smoothly (using a TTimer
, for instance). Alternatively, you can set a FMouseDown
flag to true
in MouseDown
, and reset it to false
in MouseUp
. Then, in MouseMove
, scroll the bitmap by a delta X-XOld
in the x direction if FMouseDown
is true
, and a delta Y-YOld
in the y direction. (Here, X
and Y
are parameters of the MouseMove
event handler; (X, Y)
is the current position of the cursor.) The MouseMove
procedure should end with
XOld := X;
YOld := Y;
no matter if FMouseDown
is on or off.