IMHO, it is not advisible to pass a property as a parameter for inc or dec funciton because an object property may has its own setter which may perform other operation in conjunction with the change of the property value.
Thus, the workaround method can be used only if you are sure that the property has a simple setter e.g. property XX: integer read FXX write XX.
The purpose of inc/dec procedure is optimisation and cleaner coding. In this particular case, Tag := tag+1 seems to be cleaner/more readable than the workaround and with no noticeable difference in terms of execution speed.
Nevertheless I have to say that the workaround method is creative and an eye-opener.