Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.28;
Скачать: CL | DM;

Вниз

Перекрытие свойств компонента   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
5-1095560501
Matveyev
2004-09-19 06:21
2005.08.28
Реакция на компиляцию


1-1123168331
Wild User
2005-08-04 19:12
2005.08.28
Ищется Grid


9-1115022922
Monk
2005-05-02 12:35
2005.08.28
Лабиринт


4-1120717532
dmitry501
2005-07-07 10:25
2005.08.28
Использование таймера в сервисе/службе


3-1121409195
DmTT
2005-07-15 10:33
2005.08.28
DBLoolupListBox ..ComboBox