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

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

Parent [D6, WinXP]


webpauk ©   (2004-09-16 15:45:00) 

есть


TPopup = class

TmainMenuItem = class
public
  Popup: Tpopup
end;

Titem = class
public
  Popup: Tpopup
end;


как определить кому принадлежит Popup, когда его создают в разных классах?


Gero   (2004-09-16 19:45:00) [1]


> Parent: ^TmainMenuItem ;

Parent: TMainMenuItem;

> Popup.Parent:=@Self;

Popup.Parent := Self;

> procedure Length;

function Length: Integer;

> procedure TPopup.Length;
> begin
>  Length:=Parent.Width;
> end;

function TPopup.Length: Integer;
begin
 Result := Parent.Width;
end;

Это так, по мелочам. А вобще конструкция организована не лучшим образом.


webpauk   (2004-09-16 18:18:00) [2]

Ну предположим
type
TmainMenuItem = class;

TPopup = class
private
 Parent: ^TmainMenuItem ;
 procedure Length;
end;

TmainMenuItem = class
public
 Width: Integer;
 procedure AddPopup(Popup: Tpopup);
end;

procedure TmainMenuItem .AddPopup(Popup: Tpopup);
begin
  Width:=100;
  Popup:=TPopup.Create;
  Popup.Parent:=@Self;
end;

procedure TPopup.Length;
begin
 Length:=Parent.Width; //?! - ничего не выходит
end;


Amoeba   (2004-09-16 18:07:00) [3]

Прежде всего, созданный экземпляр класса должен иметь указатель на "создателя". А где он у тебя?

LMD! Нет больше слов, одни буквы остались...


webpauk   (2004-09-16 18:01:00) [4]

Тогда подскажите как из созданного экземпляра класса обратиться к свойствам создателя


Amoeba   (2004-09-16 17:39:00) [5]


> Skier ©   (16.09.04 17:33) [12]
> [10]-[11] очень на орех смахивает.

Обеими руками "за"!

LMD!


Amoeba   (2004-09-16 17:37:00) [6]


> webpauk   (16.09.04 17:28) [11]
> Оба класса TmainMenuItem, Titem создаются не как потомки,
> а объявляются как class

И чего ты еще хочешь получить со своими классами? Естественно, при таком проектировании, как у тебя, они не могут "знать", кому они "принадлежат", тем более, что они могут в принципе "принадлежать" одновременно более чем одному "владельцу". Так что при такой постановке задача решения не имеет. Пределывай свои классы. А как - думай сам. Тебе виднее.


Skier   (2004-09-16 17:33:00) [7]

[10]-[11] очень на орех смахивает.


webpauk   (2004-09-16 17:28:00) [8]

Оба класса TmainMenuItem, Titem создаются не как потомки, а объявляются как class


webpauk   (2004-09-16 17:20:00) [9]

Tpopup может быть потомком
TmainMenuItem, Titem


Amoeba   (2004-09-16 17:16:00) [10]

Для начала нужно иметь указатель на него.
Потомками каких классов являются классы, приведенные тобой?


webpauk   (2004-09-16 17:12:00) [11]

тогда как обратиться к свойствам родителя?


Skier   (2004-09-16 16:03:00) [12]

>webpauk   (16.09.04 15:59) [6]
Не то нашел.


webpauk   (2004-09-16 15:59:00) [13]

Вроде нашел:
if Self.ClassParent=TmainMenuItem then
if Self.ClassParent=Titem then


афвуд   (2004-09-16 15:54:00) [14]


> кому принадлежит Popup


А какой смысл ты вкладываешь в эти слова?


webpauk   (2004-09-16 15:53:00) [15]

private
  Owner:?
end;


webpauk   (2004-09-16 15:52:00) [16]

а подробней?!
У TPopup какое-то свойство должно быть?
пишется на WinApi


Skier   (2004-09-16 15:50:00) [17]

>webpauk   (16.09.04 15:45)  

> как определить кому принадлежит Popup

Может Owner, а не Parent ?


olookin   (2004-09-16 15:46:00) [18]

какой-нибудь ClassName(Parent as TControl)?


Наверх

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