Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.11.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.063 c
2-1162827781
EkZot
2006-11-06 18:43
2006.11.26
Запустить программу с ключем


4-1152920860
Ayvan
2006-07-15 03:47
2006.11.26
enabled or not?


15-1162541609
ХОТТАБЫЧ
2006-11-03 11:13
2006.11.26
ГДЕ СКАЧАТЬ?


2-1162924166
ANEM
2006-11-07 21:29
2006.11.26
Прога процедурного типа


2-1162831087
nttp
2006-11-06 19:38
2006.11.26
StringGrid значение из ячеек.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский