Главная страница
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.01 c
1-92970
kofman
2002-11-15 23:08
2002.11.28
Как развернуть свое окно на весь экран если BorderStyle= bsNone?


3-92869
Youri
2002-11-09 16:48
2002.11.28
Update failed при ApplyUpdates!


1-93002
kazulja
2002-11-18 05:42
2002.11.28
Speech 5.1


3-92909
Georg
2002-11-11 01:01
2002.11.28
BDE


3-92920
Ali2002
2002-11-11 17:14
2002.11.28
Как создать БД для нескольких пользователей