i don't know encapsulate so i don't use it.
Encapsulation means restricting the visibility and dependencies of your code.
Mostly it is done in unit scope. Units use other units and see their definitions + published data.
i have many units and i use them in main unit and all units must be in my project.
... but do those units also use the main unit? That would be bad design.
A circular dependency is always a "serious" thing. It means 2 units are tightly intertwined together and cannot be used separately.
Object Pascal limits circular dependencies. Two units cannot refer to each other through their interface sections. At first it looks like a bad thing but actually it forces you to improve your code. If you break circular dependencies also through the implementation section, your code typically improves more.
Sometimes however pieces of code are logically so intertwined that it is OK to keep them in one unit.
oh my god. i have many global variables(integer byte string array .....) in main unit and in other units.?!?!?
Sometimes it is a sign of sloppy coding. Reduce dependencies using:
* Abstract base classes which act as interfaces
* Events
Fundamentally good SW design rolls around dependency management. Just look at design patterns. They have arrows which represent dependencies of various kind. The arrows always point to one direction. There are no circular dependencies in design patterns.