Not a fancy solution, but have you considered using a List?
You can load all your types ( or only the required ones) with a simple loop.
lPrjList := TList<TProjectType>.Create;
lPrjList.AddRange([ ptMain, ptExternal, ptDivision, ptBranch ]);
You can set the "list" with the types you need and pass it as required.
Anyway, you no longer would require to check your code for "case" or keep track of "projecttype" changes. Just let the "process" add the required project type in the list and a routine would deal with what's inside.
If you need some extra boost, you could link each projectType to a specific method to get called ( or a Class, or an interface ) by using a dictionary (or another more suitable data structure).
Anyway, my $0.02