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

Вниз

Если поле класса - класс, как из него обратиться к хозяину   Найти похожие ветки 

 
Tano ©   (2002-11-19 02:27) [0]

Господа мастера!
Не подскажите, можно ли без особых ухищрений сделать такое:

TSmallClass = class
_X :Integer; //буфферная переменная
function _GetX :Integer; //методы работы с буфферной переменной
procedure _PutX(Value :Integer); //методы работы с буфферной переменной

property X :Integer read _GetX write _PutX;
end;

TBigClass = class
_XArray :array[1..n] of Integer;
_SmallClass :TMySmallClass;

constructor Create;
function AccessX(IndexX :Integer) :TMySmallClass;
end;

//такой вид функции позволит передать любые данные в TSmallClass перед вызовом его методов
function TBigClass.AccessX(IndexX :Integer) :TMySmallClass;
begin
_SmallClass._X:=_XArray[IndexX];
Result:=SmallClass;
end;

Пытаюсь реализовать обращение из TMySmallClass к методам TMyBigClass.
Хотелось бы реализовать обращение вида BigClass.AccessX(i).X в обе стороны.
Если передавать в TSmallClass указатель на какие-то данные в TBigClass, то можно изменять эти данные, но мне хотелось бы вызвать именно методы TBigClass из TSmallClass.
Пробовал поля TSmallClass объявлять процедурами и функциями, а в TBigClass.Create присваивать им адреса методов TBigClass, но компилятор не позволяет такого.
Please help, if possible!


 
Almaz ©   (2002-11-19 03:14) [1]

Если я правильно понял проблему, то посмотрите следующий код, возможно он даст вам ответ на ваш вопрос:

type
TBigClass = class;

TSmallClass = class
FOwner: TBigClass; // Ссылка на влядельца
constructor Create(AOwner: TBigClass);
procedure SmallProc;
// ...
end;

TBigClass = class
FSmall: TSmallClass; // Ссылкаа на SmallClass
constructor Create;
procedure BigProc1;
procedure BigProc2;
// ...
end;

implementation


constructor TSmallClass.Create(AOwner: TBigClass);
begin
inherited Create;
FOwner := AOwner;
end;

procedure TSmallClass.SmallProc;
begin
FOwner.BigProc2;
ShowMessage("SmallProc");
end;

constructor TBigClass.Create;
begin
FSmall := TSmallClass.Create(Self);
end;

procedure TBigClass.BigProc1;
begin
FSmall.SmallProc;
end;

procedure TBigClass.BigProc2;
begin
ShowMessage("BigProc2");
end;


Удачи.


 
Tano ©   (2002-11-19 03:20) [2]

Здорово! То что надо! Большое спасибо!



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

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

Наверх




Память: 0.47 MB
Время: 0.016 c
6-93166
kofman
2002-10-02 00:19
2002.11.28
Как через NMHTTP работать с firewall`ом?


3-92852
RomZm
2002-11-13 00:10
2002.11.28
QReport по одной строке...


1-93054
ИгорьК
2002-11-18 15:59
2002.11.28
не могу изменить положение формы


8-93149
Alex
2002-08-05 17:46
2002.11.28
Графика


3-92841
Senator
2002-11-12 15:52
2002.11.28
SQLClientDataSet