Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по ООП [D7, XP]


Страницы:   1 2

EG ©   (2006-10-10 21:45:00) 

Здравствуйте, не могли бы Вы мне ответить на такой вопрос:

есть что-то вроде

type
 TClass1 = class (Tobject)
   first: string;
   A: THHHHObject;
  end;

Некоторая функция в некотором месте программы возвращает А.
Вопрос: как, зная А, получить доступ к другим полям экземпляра класса TClass1?

Прим.: A.parent возвращяет не экземпляр класса TClass1, а другой объект.

Заранее благодарен за помощь.


Amoeba   (2006-10-11 11:49:00) [1]


> это перевернет не только архитектуру программы, но и моего
> мировоззрения

Вот и хорошо. Твое мировоззрение следует поставить с головы на ноги.


EG   (2006-10-10 23:05:00) [2]


> Джо ©   (10.10.06 23:02) [31]
>
> > [30] EG   (10.10.06 22:58)
> > Не раз приходило в голову но... КАК?
>
> Вооружившись учебником.

это перевернет не только архитектуру программы, но и моего мировоззрения. но и на том спасибо.


Джо   (2006-10-10 23:02:00) [3]

> [30] EG   (10.10.06 22:58)
> Не раз приходило в голову но... КАК?

Вооружившись учебником.


EG   (2006-10-10 22:58:00) [4]


> Джо ©   (10.10.06 22:52) [28]
>
> Кстати, почему бы не сделать TegActor наследником TActor'а?
>

Не раз приходило в голову но... КАК? Начинает ругаться, что я перекрываю методы, или чего-то в этом духе....

Мне по идее к TActor'у надо добавить-то пару полей и методов...но...:(

Я считал, что мой вариант проще...иерархия по полям прозрачна ....только сверху вниз, а вот вверх - жопа...


EG   (2006-10-10 22:54:00) [5]


> Джо ©   (10.10.06 22:50) [27]


Практически нет.
По-моему так перемудрим еще больше.


Джо   (2006-10-10 22:52:00) [6]

Кстати, почему бы не сделать TegActor наследником TActor'а?


Джо   (2006-10-10 22:50:00) [7]

Что-то, ИМХО, тут перемудрено, ну да ладно.

TMyActor = class (TActor)
private
 FEgActor: TegActor;
public
 property EgActor: TegActor read FEActor;
end;

...

constructor TegActor.Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id:  string);
begin

Model:=TActor(cadencer.Scene.Objects.AddNewChild(TActor));
With Model do
  begin
    ...
    FEgActor := Self;
  end;

IDname:=id;
end;

Идея понятна?


EG   (2006-10-10 22:44:00) [8]

ау, скажите хоть что-нить, а то у меня паника скоро начнется


EG   (2006-10-10 22:40:00) [9]

Возвращается TActor, а мне надо получить объект, чьим полем он является...


Kolan   (2006-10-10 22:36:00) [10]

А нельзя ли сделать "Менеджер" который бы знал о TegActor, о pickedObjectи TVForm. И управлял бы прорисовками по событию?

Или я не понял код...


EG   (2006-10-10 22:32:00) [11]

VForm.Caption:= pickedObject.GetParentComponent.ClassName - байда, не обращайте внимания. Но в этом месте и загвоздка.


EG   (2006-10-10 22:30:00) [12]


> ага. и будет полный HHHH до самого HHHH. и да здравствует
> великий HHHH!
> %-)

С юморком. Это хорошо.

Окей! Выкладываю начисто, так как помочь мне уже некому кроме вас.
Дислокация: Delphi+GLScene.

Код:

type
   TegActor = class (TObject)
     IDname: string;
     Model: TActor;
     Weapons: array of TegWeapon;
     ActiveWeapon: integer;
     constructor Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id:string);
     destructor Free;
     procedure LoadWeapon(cadencer:TGLCadencer;modfn,texfn:string;sc:real);
     procedure ChangeWeapon(number:integer);
     procedure DoIt(action: string; Speed: integer);
     procedure Stand(sender:Tobject);
   end;

И:

constructor TegActor.Create(cadencer:TGLCadencer;modfn,texfn,animfn:string;sc,x,y,z:real;id: string);
begin

 Model:=TActor(cadencer.Scene.Objects.AddNewChild(TActor));
 With Model do
   begin
     LoadFromFile(modfn);
     Scale.Scale(sc);
     Position.X:=x;
     Position.Y:=y;
     Position.Z:=z;
     Material.Texture.Image.LoadFromFile(texfn);
     Material.Texture.Enabled:=true;
     Animations.LoadFromFile(animfn);
     AnimationMode:=aamNone;
     OnEndFrameReached:=Stand;

   end;
 
 IDname:=id;
end;

Этим я хотел расширить класс TActor.
Далее:

procedure TVForm.SceneViewerMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
 var
pickedObject : TGLBaseSceneObject;
begin
pickedObject:=SceneViewer.Buffer.GetPickedObject(x, y);

if pickedObject<>nil then
// if(pickedObject.ClassNameIs('TActor'))then
  VForm.Caption:= pickedObject.GetParentComponent.ClassName
  else  VForm.Caption:='';
if Shift<>[] then
     Camera1.MoveAroundTarget(mdy-y, mdx-x);
mdx:=x; mdy:=y;

end;

В pickedObject возвращается имя объекта под курсором. Надо показать на экране (или изменить) поле IDName у экземпляра TegActor.


Kolan   (2006-10-10 22:28:00) [13]


> HHHH

Зто сокрашенное название класса TЗаборObjectна котором и надо визуальзировать TClass1:)


Ketmar   (2006-10-10 22:21:00) [14]

ага. и будет полный HHHH до самого HHHH. и да здравствует великий HHHH!
%-)


Zeqfreed   (2006-10-10 22:19:00) [15]

> [15] EG   (10.10.06 22:15)

Может все-таки приоткроешь завесу тайны и признаешься что за секретный THHHHObject используешь? Иначе, тебе надо произвести HHHH над HHHH и ещё HHHH с inheritance.


Kolan   (2006-10-10 22:18:00) [16]


> Я новичок и с перекрытием методов, свойств и пр. мне не
> справиться...:(

Ну ....

Давай реальный(классы, что нужно...) пример может есть элементарное решение.


Джо   (2006-10-10 22:17:00) [17]

> [13] EG   (10.10.06 22:12)
>
> > Каким интересно THHHHObject, написанным разработчиками
> Delphi,
> >  ты визуализируешь свой класс.
>
>
> Да любым. THHHHObject - для неконкретности взято.

Похоже, в данном случае, конкретность не помешает.


Leonid Troyanovsky   (2006-10-10 22:17:00) [18]


> Kolan ©   (10.10.06 22:13) [14]

> > Да любым. THHHHObject - для неконкретности взято.

> Так что не помогли мы тебе что-ли...


Сомнения здесь неуместны.

--
Regards, LVT.


EG   (2006-10-10 22:15:00) [19]


> В обработчике события изменяем поля Tclass1.

Переписать хотя бы частично класс THHHHObject не могу.


> Архитектура не верная. Если THHHHObject(дурацкое название)
> визуализирует экзепрляр Tclass1, то он делжен знать о Tclass1,
>  а Tclass1 о нем знать не должен.

Можно поподробнее как это сделать, если я не могу переписать THHHHObject?

Я новичок и с перекрытием методов, свойств и пр. мне не справиться...:(


Kolan   (2006-10-10 22:13:00) [20]


>
> Да любым. THHHHObject - для неконкретности взято.
>

Так что не помогли мы тебе что-ли...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо