One solution is to re-declare any such functions using pointers instead of var parameters, but there is an easier solution. Just add the dereferenced null pointer to the correct type, for example, for the ChangeDisplaySettings example, use the following parameters: reset the display mode for the default registry settings:
ChangeDisplaySettings(TDeviceMode(nil^), 0);
or
ChangeDisplaySettings(PDeviceMode(nil)^, 0);
Thus, you pass the var parameter, which, as it turned out, is located at memory address zero - the compiler is happy, and you can pass the nil pointer to the API procedure!
Edit: From David Hefferman's comment, it seems that standard practice is more like re-declaring such routines. Personally, I prefer to use standard declarations, if I can, in my personal units, but for professional work purposes, I suggest that developers follow standard methods.
source share