![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Невизуальный компонент [D5]
Oleg_Gashev © (2002-08-28 01:14:00)Здравствуйте!
Создаю невизуальный компонент. На execute компонент должен вывести диалог. Для расположения диалога создал property Left и Top. Появилась интерестная деталь. Когда я бросаю на форму этот компонент и изменяю значения Left и Top, ярлык компонента двигается по форме в design time в зависимости от значений Left и Top. Вот и возник вопрос, как избавиться от этого эффекта.
С уважением, Олег.
Набережных С. (2002-08-29 14:17:00) [1]
> Юрий Зотов © (29.08.02 01:07)
Мой пост относился к Oleg_Gashev © (28.08.02 21:53),
конкретно к замечанию "Я ведь переопределяю свойства." Приношу извинения за допущенную неоднозначность.
А что касаемо DefineProperties, то, перечитав еще раз Oleg_Gashev © (28.08.02 01:14), можно заметить, что к вопросу этот метод не имеет ни малейшего отношения:
"Когда я бросаю на форму этот компонент и изменяю значения Left и Top, ярлык компонента двигается по форме в design time в зависимости от значений Left и Top. "
По поводу-же сохранения Left и Top в DFM - спасибо, но я в курсе :).
Юрий Зотов (2002-08-29 01:07:00) [2]> MrBeer
Так "cоздайте свойства с другими именами" - это ответ на вопрос "kak izbavitsja ot effekta", или нет? А фраза "это неявные свойства TComponent" объясняет причину, или нет?
> pravda otvet na vopros eto ne dayot
Смотря кому.
> Набережных С. (28.08.02 22:14)
> Что-то не верится.
И не надо верить. Надо проверить. Можно посмотреть исходники TComponent и все станет ясно. Еще способ - бросить на форму любой невизуальный компонент, просмотреть форму в виде текста и убедиться в том, что у этого компонента сохраняются свойства Left и Top, хотя их, вроде бы, у компонента нет. Это и есть работа DefineProperties по сохранению этих двух неявных свойств. Открыв форму на следующий день, мы увидим компонент на прежнем месте - вот зачем это нужно.
Oleg_Gashev (2002-08-28 22:18:00) [3]Спасибо всем. Ветку считаю закрытой.
Набережных С. (2002-08-28 22:14:00) [4]Что-то не верится.
vuk (2002-08-28 22:03:00) [5]Delphi "свой" код никуда не добавляет. У TComponent в методе DefineProperties определяются два "виртуальных" свойства, которые нужны для того, чтобы у невизуального компонента сохранялось его положение на форме. В файл формы они пишутся как Left и Top, а загружаются в свойство DesignInfo. В Вашем случае получается следующее: вы объявляете(явно) два свойства и их значения нормально читаются(насколько я понял), но при этом они также влияют на значение DesignInfo.
Oleg_Gashev (2002-08-28 21:53:00) [6]Найти обходной путь не проблема. Достаточно добавить два метода: SetPosition, GetPosition. Проблема стала выглядеть интерестнее, когда я предопределил property Left и Top. Они работают с property Left и Top самой формы, которая должна выскачить на Execute. Эффект все равно был. Просто не понятно почему Delphi добавляет в мой обработчик свой код. Я ведь переопределяю свойства. Не логично вроде.
vuk (2002-08-28 21:42:00) [7]Путь не обходной, а правильный.
MrBeer (2002-08-28 21:17:00) [8]>Старый паскалист
vopros bil kak izbavitsja ot effekta a ne naiti obhodnoi put".
Старый паскалист (2002-08-28 20:51:00) [9]Переименуй св-ва в
DialogLeft и DialogRight
(или как нибудь ещё)
MrBeer (2002-08-28 20:30:00) [10]> Юрий Зотов
otvet ochevidnii, pravda otvet na vopros eto ne dayot.
Юрий Зотов (2002-08-28 09:52:00) [11]Все правильно. Вы меняете кординаты самого компонента - вот он и двигается. А надо менять не их, а координаты диалогового окна, которое компонент должен динамически создать, показать и убить в своем Execute.
Left и Top не нужно трогать. Это неявные свойства TComponent и невизуальным компонентам они необходимы для поддержки design-time. Создайте свойства с другими именами и завяжите их на координаты окна, а не компонента.