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