Форум: "Основная";
Текущий архив: 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