Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
3-92873
GrayHound
2002-11-10 10:34
2002.11.28
Посоветуйте OLE DB провайдер для таблиц xBase


3-92886
Miss
2002-11-11 07:37
2002.11.28
Поиск


6-93176
Дмитрий К.К.
2002-10-01 15:51
2002.11.28
Kazaa


14-93221
McSimm
2002-11-08 16:15
2002.11.28
вот, вспомнилось...


3-92900
Кирилка
2002-11-11 12:06
2002.11.28
Вопрос по SQL запросам





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский