![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте!
Не знаю, может ответ на мой вопрос уже есть, но я не нашел. Я создаю динамически графический контент. Для удобства помещаю созданные элементы в класс. Например Код:
Здесь графические элементы - FView (TRectangle) и FLabel (TText). Кроме них есть еще поля FID: integer и FName: string; Графика бесполезна без интерактива, потому создаю обработчик события FLabel.OnClick. Через обработчик передается только указатель на саму FLabel - (Sender). Как мне в этом обработчике добраться до полей FID и FName объекта, которому принадлежит FLabel? |
#2
|
|||
|
|||
![]() При создании визуального объекта тебе надо сохранить в нем ссылку на класс, содержащий твои данные. Например, если ты используешь стандартные компоненты, то у них есть св-во Tag : Integer. Можно поступить так:
1. Создаем свой список объектов, в котором делаем метод function FindByID(AID : Integer) : TCategory - для поиска объекта по его ID. 2. При создании объекта добавляем его в этот список. 3. При создании визуального компонента в его св-ве Tag сохраняем ID объекта. 4. При клике по визуальному компоненту из св-ва Tag вытаскиваем ID и по этому ID находим нужный объект в списке и уже работаем с ним. |
#3
|
||||
|
||||
![]() Цитата:
И выловить обратно родителя во время события: Parent := TCategory((Sender as TControl).Tag); Если я ничего не напутал ![]() Upd: Не напутал. На форме кнопка и лейбл: Код:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 01.07.2020 в 13:31. |
#4
|
|||
|
|||
![]() Fin, на 64 бита надо смотреть... вроде работает, но как-то что-то смущает, там может все-таки всплыть разница размера указателя и инта (хотя, вроде как должно быть все ок, но лично я уже наступал на грабли, когда код на 32 бита работает, а на 64 - нет, пришлось указывать тип принудительно, то бы работало и там, и там). Именно по этому и предложил делать через доп. список, надежнее.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
dr. F.I.N. (02.07.2020)
|
#5
|
||||
|
||||
![]() Цитата:
Плюсик в карму ![]() Хотя... в D.Rio10.3 (за остальные не ручаюсь) свойство Tag имеет тип NativeInt (64bit) и тип Pointer (64bit). В D7 свойство Tag типа Integer (32bit) и Pointer (32bit). Так что работать будет, но разные типы - есть разные типы. В будущем может все поменяться. Так что - лучше перебдеть, чем недобдеть ![]() Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 02.07.2020 в 13:18. |