Доброе время суток. Суть вопроса в чём: есть класс для работы со сканером - сканирование, сохранение в различных форматах, переконвертирование...
Код | unit scanutils;
uses frmScanInfo; type TScanUtils = class(TObject) ... frmUI: TfrmScanInfo; // форма для изменения настроек сканирования ... end;
|
и, соответственно, класс формы для изменения состояния класса сканирования: Код | unit frmScanInfo;
uses scanutils; type TfrmScanInfo = class(TForm) objParent: TScanUtils; ... public constructor CreateEx(aOwner: TComponent; aDataParent: TScanUtils); begin objParent := aDataParent; end; ... procedure btnScannerChooseClick(Sender: TObject); begin objParent.showScanChooseDlg(); end; ... end;
|
В этой форме я переопределяю конструктор и хочу передать cсылку на класс родителя, так как из формы хочу вызывать методы TScanUtils для установки значения внутренних переменных. В итоге получаю, конечно же, Circular unit reference! Хотелось бы узнать как такую ситуацию разрулить на уровне архитектуры программы, как правильно избежать этой ситуации не на уровне как - нить хаков, а грамотным структурированием... В голову пока только приходит создание третьего файла юнита с определение интерфейса сканера, реализация которого потом будет в scanutils юните. |