Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Общие вопросы > Создание компонента любого класса в чужом окне |
Автор: Grol 13.3.2008, 09:18 |
Вообщем-то в названии темы отражена вся суть вопроса! |
Автор: Alix 13.3.2008, 09:52 |
Можете привести пример, чего бы Вам хотелось в чужом окне невизуального создать? А то как-то непонятно... |
Автор: MetalFan 13.3.2008, 12:16 |
у невизуального компонента нет родительского окна по определению. разве что компонент-владелец |
Автор: Grol 14.3.2008, 07:54 |
Например, я хочу создать компонент класса TTimer на чужой форме... Возможно ли это сделать? |
Автор: Alix 14.3.2008, 08:13 |
Ну ок, предположим, что можно. Но теперь скажите, чего Вы этим хотите добиться? Зачем таймер помещать на чужую форму? Хотя, вообще таймер не имеет родительского окна, как и сказал MetalFan, так что это невозможно. Если нужно делать по таймеру что-то в другой форме, то поместите таймер на своей. |
Автор: Grol 14.3.2008, 08:32 |
Alix в начале вы говорите можно...а потом нельзя, так все-таки как? Ладно, допустим, мне нужно создать не таймер на чужой форме, а компонент, который будет менять облик формы. И вообще, зачем задатавать лишние вопросы, зачем мне это нужно?...если в этой теме был поставлен конкретный вопрос и на него я хотел бы услышать конкретный ответ! Спасибо всем! |
Автор: Alix 14.3.2008, 08:43 |
Grol, вопросы задаются потому, что часто люди пытаются сделать что-то через зад, а поняв, чего же они хотят добиться, можно подсказать другие пути решения проблемы. |
Автор: Grol 14.3.2008, 10:30 |
Alix вообщем я так понял, что данный вопрос не решаем. Это так? |
Автор: Alix 14.3.2008, 10:38 |
Невизуальные компоненты на чужой форме разместить нельзя. Это так. Потому что они лишь удобная оболочка каких-то функций. Например, TTimer, хотя я его код и не видел, скорее всего работает с функциями WinAPI SetTimer и KillTimer. Сделан же он в виде компонента, который можно кинуть на форму, только затем чтобы сделать это, быстро выставить свойства и написать код обработчика события, а не париться, делая все это вручную с помощью вышеупомянутых функций. |
Автор: Snowy 14.3.2008, 15:55 |
Разместить можно. Работать не будет. |
Автор: Alix 14.3.2008, 15:58 |
Snowy, и таймер? ) |
Автор: Snowy 14.3.2008, 16:08 |
Таймер реализован просто - создаётся окно нулевого размера, единственная задача которого - получать WM_TIMER. Если окно будет принадлежать другому процессу - сообщение будет получать он, а не мы. А его это сообщение ну никак не интересует. Он его просто проигнорирует. |
Автор: Alix 14.3.2008, 16:41 | ||
А не окно ли? По-моему окно как получало, так и будет получать сообщения. Вопрос в том, как этот компонент сделать принадлежащим окну другого процесса. |
Автор: MetalFan 14.3.2008, 20:42 |
пусть лучше автор просветит, в чьем процессе он собрался компонент на форму создавать? |
Автор: Grol 15.3.2008, 13:05 | ||||||
Хорошо я сейчас поясню зачем мне все это нужно на конкретном примере: В своем приложении создаю стандартное окно "О программе" (далее буду называть его FormAbout):
С помощью функции FindWindow узнаю дескриптор FormAbout:
У меня есть компоненты, которые преображают любую форму, BusinessSkinForm. Этот компонент можно создать на любой форме, указав владельца AOwner этого компонента:
И тут, у меня возникает сложность, как дескриптор FormAbout hForm превратить в AOwner класса TComponent. Возможно ли с помощью каких-нибудь методов обратиться к форме FormAbout, как к визуальному компоненту, зная только его дескриптор? ( hForm ---> AOwner ) |
Автор: Rrader 15.3.2008, 13:13 |
Grol, то, что ты задумал, невозможно ![]() |
Автор: Grol 15.3.2008, 13:26 |
Жаль...я считал, что в программировании нет ничего невозможного! |
Автор: bems 17.3.2008, 17:47 | ||
Сделай свою About |