Главная страница
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
3-92935
sau
2002-11-12 08:19
2002.11.28
Делаю запрос к таблице IBX


14-93254
Fredericco
2002-11-11 13:22
2002.11.28
Кто участвовал в переписи населения 2002 откликнитесь!


4-93309
Игорь Шевченко
2002-10-16 09:50
2002.11.28
Ищу информацию по недокументируемой функции GDI32.PolyPatBlt


1-93143
VJar
2002-11-18 01:22
2002.11.28
Memo Scrollbars


3-92849
Zeeke
2002-11-09 01:37
2002.11.28
Помогите!