To everything that's been said here already, I would add that it is of course easy enough to redefine ParamStr() and ParamCount() so that they refer e.g. the content of a StringList which is populated first by defaults and then by using System.ParamStr() and System.ParamCount().
OP has not, to his discredit, told us whether he's using Lazarus or straight FPC, or (as a lesser concern) whether it's Windows, Linux etc. /If/ he's using Lazarus then there's undoubtedly ways of overriding the Application object which provides a thin wrapper around ParamStr() etc., but quite frankly I don't think that would be worth the effort.
I've done this sort of thing in the past where I wanted to pull a sequence of options (used in the unix sense) and then refer to the parameters that followed them sequentially.
MarkMLl