Jedes
Package kann Units enthalten (contains), andere Units in das
Package einkompilieren und mit requires andere Packages einbinden. Requires greift dabei auf die Units zu, die im anderen
package unter contains aufgelistet sind.
Nun gilt die Regel: Jede
Unit darf nur in einem einzigen Modul einkompiliert sein. Wenn sie in mehreren gebraucht wird, muss ein
Package die
Unit unter contains aufführen, welches die anderen mit requires einbinden.
Konkret heißt das bei dir: Deine
Unit MyBaseWindow musst du entweder in BasePackage oder in SpecialPackage hineinkompilieren; vermutlich wirst du BasePackage wählen. Das heißt, dass du neben der normalen Auflistung in der Uses-Klausel die
Unit in die Contains-Klausel schreibst. In allen anderen Packages, die die
Unit verwenden, schreibst du dann BasePackage in die Requires-Klausel. Auf die Requires-Klausel hast du auch direkt im Projekt-Baum Zugriff.
Das selbe musst du dann auch für das Hauptprogramm tun. Da es dort jedoch keine Requires-Klausel gibt, musst du die Projekt-Optionen bemühen: Bei Packages die Checkbox "Laufzeitpackages verwenden" setzen und dein
Package in das Edit-Feld hinzufügen.
Die selben Regeln gelten auch für alle anderen gemeinsam genutzten Units - auch die Delphi-eigenen. Daher musst du in jedem Fall das
Package RTL einbinden, gegebenenfalls auch
VCL.