Sometimes it can happen that Delphi executes the initialization block in a "wrong" order. This means that they are not executed in the order as expected from the uses clause.
This happen if no full build is done. If Delphi doesn't need to compile a unit (.dcu) it will not update the order of initialization execution.
To get around this you should do the following:
- Try to make initialization blocks not dependant on others.
- Do a full build ("Build all") to make sure the order gets linked correctly.
Btw: This problem does not only happen in Delphi but in C/C++ as well and has to do with compiler optimizations to get faster turn around time when compiling.