Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Обращение к классу   Найти похожие ветки 

 
webpauk   (2006-05-18 13:49) [0]

 TUser = class
 private
   fLabel: array of TLabel;
 public
   constructor Create;
   destructor Destroy; override;
   procedure DoSomething;
 end;


есть такой класс. А как из отдельно взятого fLabel обратиться к TUser.DoSomething?


 
MBo ©   (2006-05-18 13:55) [1]

Ыуда


 
webpauk   (2006-05-18 13:56) [2]

Удалено модератором


 
Сергей М. ©   (2006-05-18 13:57) [3]


> webpauk   (18.05.06 13:56) [2]


В смысле 30 серебреников готовь в кач-ве оплаты консультации))


 
webpauk   (2006-05-18 13:58) [4]


> Сергей М. ©   (18.05.06 13:57) [3]

:-(
нету


 
Плохиш ©   (2006-05-18 13:59) [5]


> А как из отдельно взятого fLabel обратиться к TUser.DoSomething?

Например так "Ну ты ... в натуре ... чувак ... я к тебю общаюсь ... ну ты понЯл..."

PS. Что так до сих пор не научился правильно вопросы формулировать?


 
webpauk   (2006-05-18 14:01) [6]

вопрос такой:
как из конкретного Tlabel, расположенного на форме обратиться к методам класса из которого родился Tlabel?


 
MBo ©   (2006-05-18 14:01) [7]

Ыуда => Self (в методах класса)

Замечательная транслитерация получилась ;)))


 
Сергей М. ©   (2006-05-18 14:02) [8]


> webpauk   (18.05.06 13:49)


Сам то понял что спросил ?


 
webpauk   (2006-05-18 14:04) [9]


> MBo ©   (18.05.06 14:01) [7]

Self.ClassParent = Tobject


 
MBo ©   (2006-05-18 14:06) [10]

Пардон, невнимательно прочитал вопрос, так что про Self - не в струю, наверно.

Автор, поясни вопрос поподробнее.


 
webpauk   (2006-05-18 14:11) [11]

кароче, сделал я TmyLabel(TLabel), где и прописал в Public declarations: ClassCreated: Pointer;
а в constructor Tuser.Create определил ClassCreated:=Self;
и теперь TmyLabel(fLabel.ClassPointer).ClassName показывает Tuser.
Вот так вот.


 
Сергей М. ©   (2006-05-18 14:13) [12]


> webpauk   (18.05.06 14:11) [11]


И при этом ты сходил в гости к соседу через Китай)


 
webpauk   (2006-05-18 14:14) [13]


> Сергей М. ©   (18.05.06 14:13) [12]

подскажи варик попроще


 
webpauk   (2006-05-18 14:14) [14]

и вообще - главное: работает!


 
Сергей М. ©   (2006-05-18 14:15) [15]

К тому же пургу ты гонишь - при fLabel: array of TLabel строчка fLabel.ClassPointer не может быть скомпилирована, ибо бессмысленна.


 
Сергей М. ©   (2006-05-18 14:16) [16]


> варик


Это, пардон, что такое ?)


 
webpauk   (2006-05-18 14:16) [17]


> Сергей М. ©   (18.05.06 14:15) [15]

fLabel[I].ClassPointer


 
webpauk   (2006-05-18 14:17) [18]


> Сергей М. ©   (18.05.06 14:16) [16]

variant


 
Сергей М. ©   (2006-05-18 14:17) [19]


> webpauk   (18.05.06 14:16) [17]

см. TObject.Classtype


 
Плохиш ©   (2006-05-18 14:19) [20]


> webpauk   (18.05.06 14:11) [11]

Я, честно сказать, так и не понял, что "великому гению" надо. Но телепатор подсказывает, что "великий гений" пытается сделать свой Owner.


 
webpauk   (2006-05-18 14:19) [21]

Flabel[I].classtype=Tlabel


 
webpauk   (2006-05-18 14:21) [22]


> Плохиш ©   (18.05.06 14:19) [20]

точно
потому как Owner такого fLabel[I]=Form1 (или компонент, на котором оно находится)


 
MBo ©   (2006-05-18 14:26) [23]

возможно, такой пример поможет:

в TUser.Create
fLabel[0]:= TLabel.Create(...)// если они внутри создаются
fLabel[0].Tag := Integer(Self)

...

TUser(fLabel[0].Tag).DoSomething


 
webpauk   (2006-05-18 14:29) [24]


> MBo ©   (18.05.06 14:26) [23]

не поможет
Tag используется


 
Сергей М. ©   (2006-05-18 14:35) [25]


> webpauk   (18.05.06 14:19) [21]


Врешь ведь ...

Проверяй :

type
 TMyObject = class(TObject)
 end;

procedure TTestForm.Button3Click(Sender: TObject);
var
 Obj: TObject;
begin
 Obj := TMyObject.Create;
 ShowMessage(Obj.ClassName); //Увидишь именно "TMyObject", а не "TObject", несмотря на то что Obj: TObject
end;


 
webpauk   (2006-05-18 14:35) [26]


> MBo ©   (18.05.06 14:26) [23]

вопрос имел целью определить есть ли какие либо свойства Tlabel(Tobject), которые позволяют обратиться напрямую, без использования вспомогательных свойств Tlabel, к классу-создателю


 
Сергей М. ©   (2006-05-18 15:03) [27]


> к классу-создателю


Галиматья


 
Плохиш ©   (2006-05-18 15:11) [28]


> webpauk   (18.05.06 14:21) [22]
>
> > Плохиш ©   (18.05.06 14:19) [20]
>
> точно
> потому как Owner такого fLabel[I]=Form1 (или компонент,
> на котором оно находится)

Чушь полная и не прекрытая и отсутствие знаний.

constructor TUser.Create;
begin
 ...
 fLabel[i] := TLabel.Create(self);
 ...
end;


 
Сергей М. ©   (2006-05-18 15:14) [29]


> webpauk   (18.05.06 14:35) [26]


Ты разницу между "класс-создатель" и "объект-владелец" осюсяешь ?


 
webpauk   (2006-05-18 15:48) [30]


> Сергей М. ©   (18.05.06 15:03) [27]

суть то ты хоть понял? не в определениях дело


 
Джо ©   (2006-05-18 15:50) [31]

> [30] webpauk   (18.05.06 15:48)
>
> > Сергей М. ©   (18.05.06 15:03) [27]
>
> суть то ты хоть понял? не в определениях дело

Как это не в них? Если на автомобильном форуме Феррари будут называть Жигулем, а Жигуль — самокатом Хонда, как думаешь, смогут до чего-нибудь толкового договориться?


 
Сергей М. ©   (2006-05-18 15:52) [32]


> webpauk   (18.05.06 15:48) [30]


> суть то ты хоть понял?


Как ты изложил суть, так я ее и понял.


> не в определениях дело


Да неужели ?

Ты там, кажется, в [22] про Owner что-то пробухтел ?)
Ну так вот изволь для начала объяснить свое видение связи терминов "создатель" и "владелец" ..


 
Сергей М. ©   (2006-05-18 15:54) [33]


> webpauk   (18.05.06 15:48) [30]


И надеююсь, что ты не облажаешься, хотя бы потому что разместил свой вопрос в "Общие", а не в "Начинающие" (куда, imho, тебе дорога давно уже протоптана)


 
webpauk   (2006-05-18 15:59) [34]

Удалено модератором


 
Сергей М. ©   (2006-05-18 16:01) [35]

Удалено модератором


 
Плохиш ©   (2006-05-18 16:03) [36]


> webpauk   (18.05.06 15:59) [34]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html

> Сергей М. ©   (18.05.06 16:01) [35]

Спокойствие, только спокойствие.


 
webpauk   (2006-05-18 16:06) [37]


> Плохиш ©   (18.05.06 16:03) [36]

спасибо
но, чтобы правильно сформулировать вопрос, надо знать хотя бы часть ответа на него


 
webpauk   (2006-05-18 16:06) [38]

Удалено модератором


 
Сергей М. ©   (2006-05-18 16:07) [39]


> webpauk   (18.05.06 15:59) [34]


К тому же дин.массив твой в этом плане нафих не нужен, ибо достаточно было наследовать TUser от TComponent и создавать все свои "новомодные" Label"ы с параметром Owner, равным ссылке на этот самый твой компонент-владелец.

p.s.

Еще раз - изобретатели велосипедов здесь живут в "Начинающие")


 
webpauk   (2006-05-18 16:09) [40]

Удалено модератором


 
Плохиш ©   (2006-05-18 16:10) [41]


> webpauk   (18.05.06 16:06) [37]
> надо знать хотя бы часть ответа на него

Ты так давно находишься на этом форуме, что если я пошлю тебя книжки читать, то это может быть расценено как оскорбление, поэтому я молчу.


 
webpauk   (2006-05-18 16:10) [42]


> Еще раз - изобретатели велосипедов здесь живут в "Начинающие")

а ты не наделен даром изобретать велосипеды?
иногда легче его придумать, чем искать ненужные шестеренки


 
Сергей М. ©   (2006-05-18 16:10) [43]

Удалено модератором


 
webpauk   (2006-05-18 16:12) [44]

Удалено модератором


 
webpauk   (2006-05-18 16:14) [45]

Удалено модератором


 
Сергей М. ©   (2006-05-18 16:15) [46]

Удалено модератором


 
webpauk   (2006-05-18 16:18) [47]

Удалено модератором


 
webpauk   (2006-05-18 16:19) [48]

Удалено модератором


 
Сергей М. ©   (2006-05-18 16:19) [49]

Удалено модератором


 
saxon   (2006-05-18 16:19) [50]


> webpauk   (18.05.06 14:11) [11]
> кароче, сделал я TmyLabel(TLabel), где и прописал в Public
> declarations: ClassCreated: Pointer;

А почему ClassCreated: Pointer; а не ClassCreated: TObject; например?


 
Сергей М. ©   (2006-05-18 16:28) [51]


> я Програмист, может и корявенький,


Есть повод для стремления к "некорявенькости"


 
Джо ©   (2006-05-18 16:28) [52]

> [50] saxon   (18.05.06 16:19)
>
> > webpauk   (18.05.06 14:11) [11]
> > кароче, сделал я TmyLabel(TLabel), где и прописал в Public
>
> > declarations: ClassCreated: Pointer;
>
> А почему ClassCreated: Pointer; а не ClassCreated: TObject;
> например?

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


 
webpauk   (2006-05-18 16:30) [53]


> saxon   (18.05.06 16:19) [50]

не вижу разницы


 
saxon   (2006-05-18 16:31) [54]


> webpauk   (18.05.06 16:30) [53]
> > saxon   (18.05.06 16:19) [50]
>
> не вижу разницы

Тогда еще больше не понятно.


 
webpauk   (2006-05-18 16:31) [55]

Удалено модератором


 
Игорь Шевченко ©   (2006-05-18 16:32) [56]

Правила читать. До полного и окончательного просветления. Для разборок на сайте сделан чат.


 
webpauk   (2006-05-18 16:32) [57]

Удалено модератором


 
Джо ©   (2006-05-18 16:33) [58]

> [53] webpauk   (18.05.06 16:30)
>
> > saxon   (18.05.06 16:19) [50]
>
> не вижу разницы

Это плохо. А гонору...


 
webpauk   (2006-05-18 16:34) [59]

Удалено модератором


 
webpauk   (2006-05-18 16:35) [60]


> Джо ©   (18.05.06 16:33) [58]

разница не между Tobject и Pointer, а разница в результате


 
Джо ©   (2006-05-18 16:37) [61]

> [59] webpauk   (18.05.06 16:34)
>
> > saxon   (18.05.06 16:31) [54]
>
> суть не изменилась!!!
> результат тот же!!!

Нет, не тот же. В случае с Pointer — это всего-лишь закладывание мины замедленного действия. Ничем в задаче не мотивированное. Уместность использования массива вместо TObjectList так же под большим вопросом, кстати, отсюда и получается тот самый велосипед. Из-за которого возникают надуманные проблемы.


 
Сергей М. ©   (2006-05-18 16:38) [62]

Господи, прости ты олуха твоего, Webpauk"а, ибо не ведает он что творит !

TMySuperPuperLabel = class(TLabel)
...
TUser = class(TComponent)
....
TMySuperPuperLabel.Create(SomeExisingObjectOfTUserClass)


 
webpauk   (2006-05-18 16:42) [63]


> Сергей М. ©   (18.05.06 16:38) [62]

TMySuperPuperLabel = class(TLabel)
...
TUser = class(TComponent)
private
 fLabels: array of TMySuperPuperLabel ;
end;
TGroupUser = class(TComponent)
private
 fLabels: array of TMySuperPuperLabel ;
end;

....
??? TMySuperPuperLabel.Create(SomeExisingObjectOfTUserClass)


 
webpauk   (2006-05-18 16:43) [64]

виноват
TGroupUser = class(TComponent)
private
 flabel: TMySuperPuperLabel;
fLabels: array of Tuser;
end;


 
saxon   (2006-05-18 16:46) [65]

2 webpauk
Можно узнать смысл этого массива?


 
webpauk   (2006-05-18 16:48) [66]

вообще то это локальный чат
Группы объединяют контакты.
Представление групп и еонтактов через Tlabel


 
webpauk   (2006-05-18 16:51) [67]

а из обращения к группе (TLabel) получить доступ к контактам можно только через класс , в котором создается этот Tlabel


 
Плохиш ©   (2006-05-18 16:55) [68]


> webpauk   (18.05.06 16:48) [66]
> вообще то это локальный чат
> Группы объединяют контакты.
> Представление групп и еонтактов через Tlabel

Стоит про TTreeView почитать.


 
webpauk   (2006-05-18 17:00) [69]


> Плохиш ©   (18.05.06 16:55) [68]

а на.. мне TTreeView надо, когда я хочу именно так


 
webpauk   (2006-05-18 17:00) [70]


> Плохиш ©   (18.05.06 16:55) [68]

и вообще - это вопрос вкуса


 
Сергей М. ©   (2006-05-18 17:11) [71]


> ??? TMySuperPuperLabel.Create(SomeExisingObjectOfTUserClass)
>


Уже ближе к теме (хоть и упоминание тобой какого-то там чата не имеет к сабжу ни малейшего отношения) ..

Ну так что здесь не понятно ?


 
webpauk   (2006-05-18 17:31) [72]


> Сергей М. ©   (18.05.06 17:11) [71]

SomeExisingObjectOfTUserClass - это то что за херь?
мне надо обратиться от TMySuperPuperLabel, расположенной на форме к любому свойству класса Tuser, а создать TMySuperPuperLabel.Create(Self) внутри класса Tuser - заведомо совершить ошибку.


 
Сергей М. ©   (2006-05-18 17:37) [73]

Умываю руки.
Буратинам - читать букварь !


 
Сергей М. ©   (2006-05-18 17:39) [74]


> webpauk   (18.05.06 17:31) [72]


Тебе не стыдно, а ? Не читать исх.тексты, которы у тебя перед носом, а ?


 
Сергей М. ©   (2006-05-18 17:44) [75]


> webpauk


Только не говори, мол, я там ничего не понимаю - разговор с тобой в этом случае  в теме "Общее" тут же закончен.

И если ты ничерта не понимаешь в происходящем при вызове тобой конструктора тоно или иного объекта - давно уже добро пожаловать в "Начинающие" ... И без этого сраного гонора что ты сейчас демонстрируешь ...


 
webpauk   (2006-05-18 17:50) [76]


> Сергей М. ©   (18.05.06 17:39) [74]

да не стыдно мне

 TGroup = class;
 TUser = class
 private
   fLabel: TIPLabel;
   fStatus: Boolean;
   fDeleted: Boolean;
   fParent: TGroup;
 public
   constructor Create;
   destructor Destroy; override;
 end;


Покажи как правильно создать fLabel, чтобы, например, Form1.TipLabel(Popup1.PopupComponent).fParent.DoSomething;


 
webpauk   (2006-05-18 17:51) [77]

виноват, чуть-чуть не так


 
webpauk   (2006-05-18 17:54) [78]

 TGroup = class
 private
   fGroupName: String;
   fLabel: TIPLabel;
   fActive: Boolean;
   Items: array of TUser;
 public
   constructor Create;
   destructor Destroy; override;
   procedure DoSomthing;
 end;


Form1.TipLabel(Popup1.PopupComponent).???.DoSomthing


 
webpauk   (2006-05-18 17:56) [79]


> Сергей М. ©   (18.05.06 17:39) [74]

разъясни мне, тёмному, как обратиться к методам класса через Form1.fLabel


 
saxon   (2006-05-18 18:01) [80]


> Form1.TipLabel(Popup1.PopupComponent).???.DoSomthing

Кроме Form1, больше ничего не понял :)

Что тут TipLabel - судя по семантике это функция (тогда что она возвращает)?
Popup1?
тем более Popup1.PopupComponent?


 
webpauk   (2006-05-18 18:05) [81]

Form1.FLabel.Popup=Popup1
обратиться к свойствам Flabel из Popup.MenuItem1: Tlabel(Popup1.PopupComponent).в моем случае class TipLabel (Tlabel) - TipLabel(Popup1.PopupComponent).


 
webpauk   (2006-05-18 18:07) [82]

а как обратиться к методам класса Tgroup через TipLabel?


 
Сергей М. ©   (2006-05-19 09:23) [83]


> как обратиться к методам класса Tgroup через TipLabel?
>


В данной реализации - никак.

Сделай TGroup наследником TComponent и указывай TGroup-объект в качестве Owner"a для всех объектов TIPLabel, относящихся к данному TGroup-объекту.

Тогда обращение будет выглядеть след.образом

TGroup(fLabel.Owner).DoSomething


 
webpauk   (2006-05-19 09:41) [84]


> Сергей М. ©   (19.05.06 09:23) [83]

спасибо
вот это - позитив.


 
webpauk   (2006-05-19 09:44) [85]

Tgroup=class(TComponent) ~ fLabel.ClassCreated:=Self (ClassCreated: Tobject)


 
Сергей М. ©   (2006-05-19 10:20) [86]


> webpauk   (19.05.06 09:44) [85]


Опять ты за свое ?)

Не нужно тебе никаких ClassCreated !

Тебе нужно узнать какому объекту класса TUser "принадлежит" тот или иной объект класса TIPLabel ? Вот для того св-во Owner и существует !

SomeUserObject := TUser.Create(..); //TUser = class(TComponent) !!
..
SomeIPLabelObject := TIPLabel.Create(SomeUserObject); //отныне владельцем только что созданного объекта класса TIPLabel становится ранее созданный объект класса TUser, ссылку на который ты передал параметром SomeUserObject !!

Все !

Теперь в любой момент обращение вида

TUser(SomeIPLabelObject.Owner).DoSomething

приведет к вызову метода DoSomething именно того объекта, который является владельцем объекта SomeIPLabelObject !


 
webpauk   (2006-05-19 10:23) [87]

да я понял...
даже с первого раза...

но если TUser = class, а не TUser = class(TComponent) , то решением будет мой вариант


 
Сергей М. ©   (2006-05-19 11:35) [88]


> webpauk   (19.05.06 10:23) [87]


Ну если тебе хочется изобрести велосипед, то на здоровье)
Но при этом следовало хотя бы устранить путаницу в смысловом контексте выбранных тобой имен идентификаторов.


 
webpauk   (2006-05-19 11:47) [89]


> Сергей М. ©   (19.05.06 11:35) [88]

дык Tuser не наследник Tcomponent. Tuser = class


 
Сергей М. ©   (2006-05-19 11:51) [90]


> webpauk   (19.05.06 11:47) [89]


Дык сделай его наследником Tcomponent ?

Что мешает-то ?


 
webpauk   (2006-05-19 12:21) [91]


> Сергей М. ©   (19.05.06 11:51) [90]

уже...
только какой же он, блин, наследник?
так - ни то, ни сё :)


 
Сергей М. ©   (2006-05-19 13:07) [92]


> webpauk   (19.05.06 12:21) [91]


> какой же он, блин, наследник?


Как это какой ?!

Точно такой же полноправный наследник ..



Страницы: 1 2 3 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.68 MB
Время: 0.048 c
2-1149622490
Mr tray
2006-06-06 23:34
2006.06.25
Что за символ #10?


1-1147859129
Damager
2006-05-17 13:45
2006.06.25
Интерфейс программ


3-1145967623
Express
2006-04-25 16:20
2006.06.25
TDBGrid - номер текущей записи и всего записей в таблице


15-1149056419
Piero
2006-05-31 10:20
2006.06.25
обновление программы


2-1149766116
alkin
2006-06-08 15:28
2006.06.25
Подскажите пожалуйста, как можно получить все цвета 256-цветной