Главная страница
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.014 c
3-92941
Alexandr1
2002-11-06 10:11
2002.11.28
Фильтрация по дате (месяцу)


3-92925
vaa
2002-11-11 19:46
2002.11.28
cache


3-92840
KSergey
2002-11-12 16:13
2002.11.28
Узнать: конец или начало DataSet а


4-93291
Alexander
2002-10-17 14:24
2002.11.28
Вопрос по директивам условной компиляции:


1-93118
Adam
2002-11-17 18:25
2002.11.28
Библиотека kernel32.dll