Форум: "Компоненты";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
ВнизПерекрытие свойств компонента Найти похожие ветки
← →
Sphinx (2004-08-28 01:42) [0]Возник вот такой вопрос...к примеру (упростим задачу) есть что-то вроде TMoveLabel=class(TLabel)
у которого в событиях OnMouseEnter и OnMouseExit определено что будет производиться подчеркивание текста в Caption.
Можно как-нибудь создать экземпляр MoveLabel, но так чтобы эти события были бы дополнениями описаными в компоненте.
То есть в теле программы я пишу что нужно изменить цвет текста...а помимо цвета остается подчеркивание при наведении, хотя вне компонента оно не описано.
Надеюсь внятно объяснил...а то такой сумбур в голове...не дается вот эта задачка...что поделаешь - новичек :)
← →
афвуд (2004-08-28 11:27) [1]Я всегда когда перекрываю свойства-эвенты, то запоминаю, что лежит там до моего замещения. И всегда вызываю его после отработки моего метода. Описываешь в своём компоненте свойство OldMouseEnter:TNotifyEvent. Заполняешь его тем, что лежит в свойстве OnMouseEnter, компонента до твоего замещения. и в своём методе(чем ты перекрыл этот OnMouseEnter) вызываешь OldMouseEnter(Sender);
← →
Sphinx (2004-08-28 21:32) [2]> афвуд (28.08.04 11:27) [1]
а ларчик просто открывался :) спасибо огромное.
← →
Алхимик © (2004-08-28 22:38) [3]
type
TMoveLabel = class(TLabel)
private
{ Private declarations }
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;
...procedure TMoveLabel.CMMouseEnter(var Message: TMessage);
begin
inherited; // вызываем метод предка
Font.Style := [fsUnderLine];
end;
procedure TMoveLabel.CMMouseLeave(var Message: TMessage);
begin
inherited;
Font.Style := [];
end;
← →
Юрий Зотов © (2004-08-29 09:28) [4]> Sphinx (28.08.04 01:42)
События компонентов - это те же свойства, а свойства спокойно перекрываются (всегда статически).
Но в данном случае Вам и этого делать не нужно, а нужно использовать пример [3]. И уж тем более нельзя делать так, как Вы пишете:
> в событиях OnMouseEnter и OnMouseExit определено что будет
> производиться подчеркивание текста в Caption.
Компонент не имеет права использовать доступные юзеру обработчики событий. Потому что юзер может перекрыть их своими и компонент работать перестанет.
> афвуд (28.08.04 11:27) [1]
> Я всегда когда перекрываю свойства-эвенты, то запоминаю, что
> лежит там до моего замещения.
А скажите, хоть раз там лежало что-то, отличное от nil? И если да, то каким образом оно умудрилось туда попасть? А если нет, то зачем его запоминать?
← →
афвуд (2004-08-30 12:29) [5]
> А скажите, хоть раз там лежало что-то, отличное от nil?
> И если да, то каким образом оно умудрилось туда попасть?
> А если нет, то зачем его запоминать?
Всё верно, если это моя прога.
А если пишу компонент, который работает именно цепляясь за некоторые обработчики других компонентов? Тогда имхо и нужно смотреть а не перекрыл ли юзер(или другие компоненты такого же рода) их уже. А если перекрыл, то необходимо, чтобы всё работало также как юзер и ожидает, т.е. сделать так как описано в [1]. It"s my IMHO :) .
← →
Юрий Зотов © (2004-08-30 13:58) [6]> афвуд (30.08.04 12:29) [5]
> Всё верно, если это моя прога. А если пишу компонент, который
> работает именно цепляясь за некоторые обработчики других
> компонентов?
То не надо писать ТАКИЕ компоненты. НОРМАЛЬНЫЕ компоненты не должны использовать доступные юзеру события. Потому что работа компонента не должна зависеть от того, что там юзер перекрыл или не перекрыл. А при таком подходе, как у Вас, ничто не мешает юзеру перекрыть Ваши обработчики в run-time (то есть, в коде, а не в Инспекторе Объектов) - и настанет большой кирдык такому компоненту.
Так пишут ПРОГРАММЫ, а не компоненты.
← →
афвуд (2004-08-31 11:28) [7]:)
Ну сорри. Я писал компонентики для своей среды разработки приложений. Очень похожую на Дельфи и использующие её компоненты, с таким же редактором форм и т.д. Только свойства там были определённые мной. А все остальные могли управляться компонентами. Согласен - это лишь одиночный случай когда можно было применять метод [1].
Страницы: 1 вся ветка
Форум: "Компоненты";
Текущий архив: 2005.08.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.041 c