![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по ООП [D7, XP]
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 - для неконкретности взято.
>
Так что не помогли мы тебе что-ли...