Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
Вниз
Если поле класса - класс, как из него обратиться к хозяину Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c