The most common reason the Cryst32.ocx will not register is that it is missing one or more dependencies. To register the crystl32.ocx make sure the following dependencies are present on your machine, then the OCX will register.
Please note: while all of these files need to be present in order to successfully register the OCX, some files are system files and should not be distributed.
Another item to check is that the version number of each dll on the client matches what is on your development machine (or at least matches what is on another client machine where the app does work). I recommend using EXTREME CAUTION when moving dlls between a machine with one OS to another with a different one. Regardless of the machines' OS, if you choose to copy dlls, please make sure to back up the old ones in case something goes awry.
Please note that although the crystl32.ocx file can reside anywhere on your machine (as it is a registered file), its dependencies must reside in the system path.
Finally, I would suggest downloading the Dependendency Walker utility from the following link to help troubleshoot your issue:
You can point this utility to Crystl32.ocx on the client machine to determine which of its dependencies the OCX is having issues with. Working files show up in green or cyan, while non-working files show up in yellow, orange, or red. I am sure that you will find this utility extremely helpful.
To manually register the OCX after you have ensured that all the dependencies are present, you will need to select Start | Run and type in something like this: