Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 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.051 c
1-1123164593
Русланка
2005-08-04 18:09
2005.08.28
А как в DBComboBox программно установить какую либо строку


3-1121182830
xoot
2005-07-12 19:40
2005.08.28
Установка базы данных


14-1122051595
SoftX
2005-07-22 20:59
2005.08.28
Аниме=эротика?


14-1122963567
MeF Dei Corvi
2005-08-02 10:19
2005.08.28
Шрифты в WinXP


3-1121412047
msguns
2005-07-15 11:20
2005.08.28
Запрос на объединение строк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский