|
Модераторы: Poseidon, Snowy, bems, MetalFan |
|
Dimqin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.2.2018 Репутация: нет Всего: нет |
Создаю форму, создаю дочерний компонент. В компоненте есть контролы. По нажатию контрола меняется некое значение.
Далее в родительской форме по изменении значения должно меняться свойство компонента. Т.е. мне необходимо отслеживать значение в дочернем компоненте, чтобы изменить что-то в родительском классе. Есть три пути, как это осуществить: 1. В родительском классе запускать таймер и считывать значение. Громоздко, но имеет право на существование. 2. Создать в родительском классе событие, возникающее при изменении значения в дочернем классе. 3. Т.к. Источником изменения является событие в дочернем компоненте, то перенести событие на уровень выше. Как осуществить алгоритм 2 или 3? Что тут лучше? |
|||
|
||||
Gwire |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Dimqin, я правильно понял, как это выглядит.
Не совсем понятно с чем мы имеем дело, чтобы ответь как его лучше приготовить. А вдруг это не просто рыба, а фуга - а мы тебе сейчас насоветуем Это сообщение отредактировал(а) Gwire - 2.2.2018, 19:20 |
||||
|
|||||
Dimqin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.2.2018 Репутация: нет Всего: нет |
Gwire, всё так.
|
|||
|
||||
Gwire |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Проще реализовать вариант 2.
Вариант 3 осуществить и просто и нет:
Но я бы или допилил с HWND или использовал вар.2. Это сообщение отредактировал(а) Gwire - 5.2.2018, 12:21 |
||||
|
|||||
Dimqin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.2.2018 Репутация: нет Всего: нет |
Gwire, С таймером не так хорошо, т.к. я пишу маленький графический редактор. Предполагаю, что программа будет подтормаживать. Да и саму технологию создания событий и взаимодействия классов хочется освоить, ибо пригодится в дальнейшем.
|
|||
|
||||
Gwire |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
У меня была похожая задача (редактор целого числа в котором можно, колесиком мыши, управлять любым разрядом).
Я для всех событий которые генерят Ctrl1 .. CtrlN (для всех нужных для задачи) назначил процедуры обработки реализованные в ChildComp. Правда пришлось повозится с мыхой (и это отдельная история или Тема). Это сообщение отредактировал(а) Gwire - 5.2.2018, 16:15 |
|||
|
||||
Dimqin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 2.2.2018 Репутация: нет Всего: нет |
Gwire, поразмышлял я на досуге. С созданием в родительском классе события есть сложности. События от объектов TControl гененрятся с некоторой частотой, определяемой системой. Искусственное событие должно тоже быть связано с некоторыми процедурами опроса состояния. Т.е. Надо создать некоторый виртуальный метод виртуального объекта TControl, а аргументом его сделать содержание переменной - как старое значение стало отлично от нового, так сработала "кнопочка"... Короче, надо что-то подсунуть из системных запросов.. Остальные два из вышеупомянутых способов тоже прокатят, ...но хочется красоты и гармонии..
|
|||
|
||||
Gwire |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 216 Регистрация: 7.8.2007 Где: Николаев Репутация: 1 Всего: 4 |
Даже не представляю, что ты пытаешься приготовить, но прочитанное у меня воспалило такой рецепт (может подойдет):
Если все Ctrl1 .. CtrlN создаются в TChildComp.Create, то породи от их классов свои классы и расширь функционал. Например:
А в TChildComp реализовать методы CtrlChangeValue
ПС: Если значение меняются "системой", то в TButtonExt реализую перехват события. Ну там типа:
|
||||||
|
|||||||
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |