This is probably the last iteration as I can't think of anything else to add - can you?
Version 1.23 has the following changes.
Each Sprite has an IsVisible property, default True. This is complementary to the IsActive property. An inactive Sprite is not drawn, does not move and does not take part in collisions. An active invisible Sprite acts normally except that it is not drawn.
Each Sprite has an IsContained property. If True the Sprite will collide with the game window boundary, if false it won't.
GameWindow now has SpriteOnScreen(index) and SpriteOnScreenID(id) methods that return True if the specified Sprite is positioned in the game window or False if it is not. This refers to the Sprites' position, not its' visibility.
GameWindow now has a SpriteReplace(Sprite, index) method.
More internal tidying up that should not be visible.
To efficiently provide an explicit z-order for individual sprites is difficult as the code needs to have high performance as it is run many times per second. However there is already an implicit z-order as sprites added later are always drawn after earlier sprites. To keep a Sprites' place in the drawing order you could use the new SpriteReplace method.