| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Создание указателя на компонент |
| Автор: Proxin 25.9.2011, 23:23 |
| Вопрос поставил меня в тупик. Создаю компонент, наследник от TComponent, и один из его методов создаёт никак не связанную с ним форму. При клике на этой форме должно вызываться событие OnSampFormClick моего компонента. Вопрос заключается в следующем - как это реализовать, как дать понять форме, что её "родил" именно мой компонент? Единственный выход, который я вижу - создавать в форме public FPrent:pointer, присвоив ему при создании формы указатель на компонент и в перекрытом методе click формы вызыать TMyCP(fprent^).onsampformclick. собственно, так не получается: если присвоить в tmycp tempfrm.fprent:=@self, то при клике на форму получится acess violaton, а до других способов пока не додумался. Подскажите, пожалуйста. |
| Автор: Proxin 26.9.2011, 00:00 |
| раз вы умный, то подскажите - лучше всего запоминается на примерах. и почему шляпки - глупость? это ж разыменование указателя. по этому вопросу я по сети ничего не нашёл - иначе бы не пришёл сюда. |
| Автор: northener 26.9.2011, 00:14 | ||
Это действительно "разыменование указателя". Но эта шляпка нам досталась от Турбо Паскаля. В Дельфи эта "шляпка" не нужна! Если нужен реальный совет/ответ, приведите реальный пример кода. P.S."Раз вы Умный" На первый раз прощаю. |
| Автор: Proxin 26.9.2011, 01:20 | ||
|
| Автор: northener 26.9.2011, 02:30 |
Бред. Что по-вашему означает fpar^? |
| Автор: bems 26.9.2011, 04:14 | ||||
1. Вместо публичного поля лучше приватное, а устанавливать его, добавив форме конструктор с соответствующим параметром. 2. Все переменные классовых типов и так физически являются указателями (но не нуждаются в явном разыменовании). Поэтому поле объявлять нужно не Pointer а сразу tmycomp. Ну или если циклические ссылки юнитов не позволяют, то просто TComponent 3. Вместо создания собственного поля можно использовать свойство Owner формы (если я правильно понял что форма не должна жить дольше чем создавший её компонент)
Явное разыменование (^) можешь использовать (для классических указателей а не классовых ссылок ессно), тем более что со времен турбопаскаля всё еще остались места где без него не обойтись |
| Автор: Proxin 26.9.2011, 14:43 |
| благодарю. всё заработало. |