Если я сталкиваюсь с этой проблемой,
- Сначала я пытаюсь наследовать от компонента или его предка CustomXXX и посмотреть, решит ли это проблему.Если этого не произойдет,
- Я углубляюсь, то есть пытаюсь перехватить входящие сообщения. Это можно сделать динамически.Если это оказывается слишком глубоким, потому что код, который должен быть построен на этом, является слишком обширным, или если мне все еще нужно получить доступ к элементам, к которым у меня нет доступа,
- Я пытаюсь взломать.Один из способов - скопировать компонент и зависимый код в новое устройство с другим именем, переименовать компонент и изменить то, что нужно изменить.
- Иногда мне нужно только переделать один или два метода, чтобы сделать мойновое поведение возможно.
Никогда не забывайте давать устройству другое имя и компоненту тоже другое имя (возможно, унаследованное от исходного компонента или одного из его предков, поэтому они остаются в той же иерархии). никогда не изменяйте исходные коды, а затем перекомпилируйте VCL.Это кошмар обслуживания.
Я не фанат промежуточных классов, то есть классов, которые получают то же имя, но другое поведение, чем исходные классы, наследуя от оригинала.Их функциональность зависит от порядка включения в пункт использования, и это мне кажется довольно странным.Я не могу рекомендовать это.
Но то, что я делаю, сильно зависит от проблемы.Я не думаю, что можно (или нужно) давать общий совет, который охватывает все ситуации.
Но мой главный совет: не изменяйте исходные единицы ,всегда вводите новый код в новый блок и используйте новое имя класса .Таким образом, оригинальная и измененная версии могут мирно сосуществовать, в том числе в IDE.