Как передать в Unit1 объект, который находится в Unit3, избегая ошибки: Circular unit reference to ‘Unit3′? Добрый день, товарищи. Появился следующий вопрос:
Есть класс TCell, который для удобства вынесен в отдельный UnitType
TCell = class
Public
X1, Y1: Integer; // Координата первой точки
X2, Y2: Integer; // Координата второй точки
Width_cell: Integer; // Ширина клетки
Status: Integer; // Статус клеточки
// Пользовательский конструктор
Constructor CreateUserCell(my_X1, my_Y1, my_X2, my_Y2: Integer);
Procedure SetColorRed(); // Установить красный цвет
End;
Под Implementation вот такой код:procedure TCell.SetColorRed;
begin
Form3.Image1.Canvas.Brush.Color := clRed;
end;
Компилятор жалуется на то что я использую Form3 в другом Unit. Вот такая ошибка возникает: Circular unit reference to ‘Unit3′ Вопрос, как передать объект из Unit3 в другой Unit. Заранее спасибо за ответы и комментарии. Буду благодарен хотя бы за рекомендацию по поводу того, как загуглить.

21 Авг 2019 в 07:07
205 +1
0
Ответы
1

Для передачи объекта из Unit3 в другой Unit, вам необходимо использовать Dependency Injection или паттерн Observer.

Dependency Injection позволяет передавать зависимости в класс через конструктор или метод, что позволяет избежать циклических зависимостей. Например, вы можете передать форму Form3 в конструктор класса TCell:

TCell = class
private
Form: TForm3;
public
constructor Create(UserForm: TForm3);
procedure SetColorRed;
end;
constructor TCell.Create(UserForm: TForm3);
begin
Form := UserForm;
end;
procedure TCell.SetColorRed;
begin
Form.Image1.Canvas.Brush.Color := clRed;
end;

Таким образом, вы передаете объект Form3 в класс TCell при его создании и можете использовать его в методе SetColorRed без циклических зависимостей.

Также вы можете использовать паттерн Observer, где класс TCell будет наблюдателем за изменениями в объекте из Unit3.

Надеюсь, что это поможет вам решить проблему с Circular unit reference и передать объект из Unit3 в другой Unit.

20 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир