Indermove
@Indermove
C#/.NET back-end разработчик

Как передать в Unit1 объект, который находится в Unit3, избегая ошибки: Circular unit reference to ‘Unit3′?

Добрый день, товарищи. Появился следующий вопрос:
Есть класс TCell, который для удобства вынесен в отдельный Unit

Type
    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. Заранее спасибо за ответы и комментарии. Буду благодарен хотя бы за рекомендацию по поводу того, как загуглить.
  • Вопрос задан
  • 439 просмотров
Решения вопроса 1
@zedxxx
Потому что нужно абстрагироваться в написании кода. Перепишите свою функцию вот так:
procedure TCell.SetColorRed(ACanvas: TCanvas);
begin
    ACanvas.Brush.Color := clRed;
end;

и вызывайте соответственно:

VCell.SetColorRed(Form3.Image1.Canvas);

Тогда ваш юнит ничего не будет знать о форме и, соответственно, её можно будет убрать из uses и разорвать циклическую зависимость.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Плохо помню Delphi, попробуйте перенести в одном из модулей конфликтный uses из interface в implementation. Как раз вот кстати в этом модуле, куски кода которого у вас приведены.
Ответ написан
@kalapanga
Как Circular unit reference лечить Вам уже написали, но, по-моему, тут "что-то в консерватории поменять нужно". Не должно в методах класса быть обращения к каким-то "левым" (не относящимся к этому классу) формам и т.п. Такой метод должен быть не у Вашего класса, а у формы - Form3.SetColorRed.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы