Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.26;
Скачать: CL | DM;

Вниз

Перекрестные ссылки в компонентах   Найти похожие ветки 

 
atruhin ©   (2006-10-11 14:34) [0]

Такая проблемма: есть классы TA, TB
нужно сделать
TA = class
 property MyProp : TB
....

TB = class
 function GetA : TA;

Можно ли это осуществить не помещая классы в один модуль. Классы достаточно большие и мешать их в "кучу" не хочу.


 
Сергей М. ©   (2006-10-11 14:48) [1]

декларации обоих классов при этом должны фигурировать в интерфейсных секциях соотв.модулей ?


 
atruhin ©   (2006-10-11 15:13) [2]

Да это компоненты.


 
icWasya ©   (2006-10-11 15:24) [3]

Прямо нельзя, но если очень хочется...


Unit A;
interface
type
 TCustomA=class(TComponent)
  ....
 protected
  function GetB:TComponent;
 ...
end.



Unit B;
interface
type
 TCustomB=class(TComponent)
  ....
 protected
  function GetA:TComponent;
 ...
end.



UnitAB
interface

type
 TA=class;
 TB=class;
 TA=class(TCustomA)
 public
  function GetB:TB;
 end;
 TB=class(TCustomA)
 public
  function GetA:TA;
end;

implementation
function TA.GetB:TB;
begin
 Result:=TB(inherited GetB);
end;
function TB.GetA:TA;
begin
 Result:=TA(inherited GetA);
end;
 
end.


 
zorik ©   (2006-10-11 15:28) [4]

type
 TB = class;

 TA = class
   FB: TB;
   property B: TB read FB write FB;
   constructor Create(AOwner: TB); reintroduce; virtual;

 TB class
   FB: TA;
   property A: TA read FA write FA
   constructor Create(AOwner: TA); reintroduce; virtual;

constructor TA.Create;
begin
 inherited Create(AOwner);
 FB := AOwner;
end;

constructor TB.Create;
begin
 inherited Create(AOwner);
 FA := AOwner;
end;

   
Что-то, наподобе этого. Правда в две стороны перекрестные я не делал. У меня внутренний клас, ссылался на того что его создал


 
Сергей М. ©   (2006-10-11 16:32) [5]


> atruhin ©   (11.10.06 15:13) [2]


ПлакалЪ ..


 
atruhin ©   (2006-10-11 18:24) [6]

Ну не так написал. Я имел ввиду, что 1 компонент имеет свойство published ссылающееся на второй, а второй public функцию предоставлющую первый компонент.


 
guav ©   (2006-10-11 18:32) [7]

> [6] atruhin ©   (11.10.06 18:24)

вопрос был должны ли они быть в интерфейсных секциях разных модулей. Если один из них можно поместить в implrmrntation или их можно поместить в один модуль - то решается.


 
atruhin ©   (2006-10-11 18:38) [8]

> Если один из них можно поместить в implrmrntation

Ну да дак я и объясняю, что нельзя и почему.
> или их можно поместить в один модуль

Об этом я писал в вопросе, классы довольно большие, не охота смешивать.
Вообще вполне устраивает вариант [3] icWasya ©   (11.10.06 15:24)
Так что вопрос можно считать закрытым.


 
Loginov Dmitry ©   (2006-10-12 07:53) [9]

atruhin ©   (11.10.06 14:34)
Классы достаточно большие и мешать их в "кучу" не хочу


А "большие" - это сколько тысяч строчек?


 
evvcom ©   (2006-10-12 11:56) [10]

> [9] Loginov Dmitry ©   (12.10.06 07:53)

0,1 :)

> [6] atruhin ©   (11.10.06 18:24)

Ты так и не понял почему Сергей в [5]
> ПлакалЪ ..

Компоненты - это наследники класса TComponent.


 
atruhin ©   (2006-10-12 13:46) [11]

> [10] evvcom ©   (12.10.06 11:56)
> Компоненты - это наследники класса TComponent.

Я о них и говорю. У них соответствующие публикуемые свойства, т.е.
> [1] Сергей М. ©   (11.10.06 14:48)
> декларации обоих классов при этом должны фигурировать в
> интерфейсных секциях

я ответил ДА.

> А "большие" - это сколько тысяч строчек?

Да не сильно большие, вмести немного меньше 3 тыс, просто они разные. Там система хранения данных. Примерно, по логике, как TDatabase, TTable - TTable имеет публикуемое свойство TDatabase, а TDatabase должен возвращать настроенный TTable в рантайме.


 
evvcom ©   (2006-10-12 14:24) [12]

> [11] atruhin ©   (12.10.06 13:46)
> > Компоненты - это наследники класса TComponent.
> Я о них и говорю.

По твоему

> [0] atruhin ©   (11.10.06 14:34)
> TA = class
> property MyProp : TB
> ....
>
> TB = class
> function GetA : TA;

Это компоненты?

> Да не сильно большие, вмести немного меньше 3 тыс

И чего тогда их делить? Если они так много должны знать друг о друге?

> Примерно, по логике, как TDatabase, TTable - TTable имеет
> публикуемое свойство TDatabase, а TDatabase должен возвращать
> настроенный TTable в рантайме.

TDatabase, TTable в одном модуле DBTables.



Страницы: 1 вся ветка

Текущий архив: 2006.11.26;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.048 c
15-1162971575
SergP
2006-11-08 10:39
2006.11.26
Как распечатать документ .PDF?


6-1152182640
KLAUS
2006-07-06 14:44
2006.11.26
Ошибка в Webbrowser1


2-1162924917
serko
2006-11-07 21:41
2006.11.26
Всплывающяя подсказка в XP


2-1162829970
breeze
2006-11-06 19:19
2006.11.26
Протоколирование моментов измененния в реестре


11-1139138056
denis111
2006-02-05 14:14
2006.11.26
Цвет шрифта формы KOLForm1 не меняется в object inspector