Actually, if you're using TPGame, which is what you want to use for working code, then that should be fine. However, you do have to Open input before it will work. You can open it in two ways. Via PG.Input.Open, which will use the handle from PG.DisplayDevice, which has to already be open or if you're using your own window such as a form for example you need to use PG.Input.OpenEx which allows you to pass in a window handle.

TPGTestCase and TPGGraphicalTestCase should be use for quick prototyping as a lot of stuff will already be setup for you which allows to try out your ideas and concepts with worrying about the plumbing. Your production code should use TPGGame.

Doing this:

[code=delphi]type
TGame = class(TPGame);
var
g: TGame;
...
g := TGame.Create;
g.Run;
g.Free
[/code]
is enough to get the SkyBlue screen. To do more you should override the necessary routines such as LoadResources/FreeResources, Init/Done etc. For Game I use Init/Done for set up stuff that is global such as the archive file, configuration and so forth. LoadResources/FreeResources should be use to init your textures, audio, open input etc.

If you look at uGame.pas in examples/pascal (which your using), this is the basic template need for using TPGame. If you use pggdev and create a new Game project this template will be generated automatically for you (same for a test case project).

So for your class derived from TPGame I think all you needed was to make sure you open input then it should work. I would use uGAme.pas as a template because these are all the methods that you need to override to take advantage of it. Again, note that for testcase, most of the important stuff will be setup/shutdown for you, in game you have to do it all manually. Let me know if that worked. I can post a demo based on TPGame to make it more clear if you want, let me know.