Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.01 c
2-1149606488
media
2006-06-06 19:08
2006.06.25
DSpack


1-1147967851
agaga
2006-05-18 19:57
2006.06.25
Запретить растягивать картинку


15-1148781301
pargo
2006-05-28 05:55
2006.06.25
Естественный отбор


10-1121170006
SergP.
2005-07-12 16:06
2006.06.25
Работа с COM-объектом (EXCEL, WORD) из консольного приложения


2-1149490302
novice
2006-06-05 10:51
2006.06.25
Контроль работы приложения на уд. компе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский