It's possible in the GDI to change the mapping mode to what you want. See the following link for info about that, although it's unlikely to help in DelphiX: http://www.efg2.com/Lab/Library/UseNet/1999/0805.txt It may be possible to use GDI functions with the dx surface (see the GetDC and ReleaseDC functions that are undoubtedly hidden somewhere in the dx surface), in which case the above code may help -- but that will be slow since the GDI isn't built for speed.

Note that it's possible to use a subtraction to turn the y axis upside-down. For example, if you had a screen ranging from [0..319] then under the standard computer axis system, 0 in the y axis is the top. However, if you think about the y value of (319 - y) then it will always be what you need mathematically. In general, if you have a known maximum value then just do (max - y) and you're all set.

However, it does depend on whether you want the drawing to be flipped as well: for example, drawing an image at (0, 0) being the screen bottom left, starting as the image's bottom-left corner instead of its top-left corner. If you need that then you'd want to draw the image at a slightly different location, at (max - y - image.height).

Have you considered using OpenGL? OpenGL follows the conventional "y axis is up". If you don't need 3d then you can use an orthographic projection (i.e., no perspective squashing) using glOrtho, and that'll leave you with a few gl functions to wrap up (drawing lines with glBegin/glEnd, loading images, et cetera). It could definitely be handy for you, although I'm not sure of your target hardware or other issues.

I'm probably overlooking something obvious and simple because I'm in a rush. Anyway, hope this helps.