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