Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

Наведение мыши в потомке TLabel   Найти похожие ветки 

 
Polkin   (2009-08-27 12:47) [0]

День добрый!

Написал потомка:

 TCuteLabel = class (TLabel)
   private
      procedure SelfOnMouseEnter (Sender : TObject);
      procedure SelfOnMouseLeave (Sender : TObject);
   public
     constructor Create (Parent : TWinControl);
 end;


constructor TCuteLabel.Create;
begin
 inherited Create (Parent);
 Self.Parent := Parent;
 Self.Cursor := crHandPoint;
 Self.Font.Color := $C99B93;
 Self.Font.Style := [fsBold];
 Self.OnMouseEnter := SelfOnMouseEnter;
 Self.OnMouseLeave := SelfOnMouseLeave;
end;

procedure TCuteLabel.SelfOnMouseEnter;
begin
 Self.Font.Style := Self.Font.Style + [fsUnderLine];
end;

procedure TCuteLabel.SelfOnMouseLeave;
begin
 Self.Font.Style := Self.Font.Style - [fsUnderLine];
end;


А при наведении мышки полосочка под лейблом то не появляется... Почему?


 
Медвежонок Пятачок ©   (2009-08-27 12:53) [1]

потому что лабел в уже в установленном пакете, а события дорисованы после.
при сборке приложения работает старая версия лэйбла из пакета без этой фичи.


 
Медвежонок Пятачок ©   (2009-08-27 12:57) [2]

Либо (если дело не в этом) обработчики установленные в конструкторе сбрасываются в Лоадед на нил.


 
Медвежонок Пятачок ©   (2009-08-27 13:00) [3]

а вообще это жестоко - использовать паблишед свойства предназначенные для пользователей компонента в своих корыстных целях.


 
Leonid Troyanovsky ©   (2009-08-27 13:23) [4]


> Polkin   (27.08.09 12:47)  

> Написал потомка:

>  Self.OnMouseEnter := SelfOnMouseEnter;
>  Self.OnMouseLeave := SelfOnMouseLeave;

Во-ще-то, для потомка обычно перекрывавают (override)
соответствующие методы. Но, в данном случае, это
не обычные методы, а обработчики сообщений:

{private}
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

И выглядят примерно так:

procedure TCuteLabel.CMMouseEnter(var Message: TMessage);
begin
  inherited;
  Self.Font.Style := Self.Font.Style + [fsUnderLine];
end;

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2009-08-27 13:25) [5]


> Leonid Troyanovsky ©   (27.08.09 13:23) [4]

>   Self.Font.Style := Self.Font.Style + [fsUnderLine];

Мда.. и Self обычно опускают, бо дело происходит в собс-ном методе.

--
Regards, LVT.


 
clickmaker ©   (2009-08-27 14:00) [6]

> Self.Parent := Parent;

в чем тайный смысл?


 
Polkin   (2009-08-27 14:08) [7]


> Leonid Troyanovsky ©   (27.08.09 13:23) [4]

Эээхххх.......все равно не работает......наверн связано с тем что весь этот каламбур происходит в dll.


> Медвежонок Пятачок ©   (27.08.09 13:00) [3]

Можно потом НотифиЕвентами заделать


> Leonid Troyanovsky ©   (27.08.09 13:25) [5]

Так я пробегаюсь глазами по всему Label"у во всплывающей подсказке ;)


> clickmaker ©   (27.08.09 14:00) [6]

Без этого на форме у меня Label не появляецо


 
Leonid Troyanovsky ©   (2009-08-27 14:10) [8]


> clickmaker ©   (27.08.09 14:00) [6]

> в чем тайный смысл?

Если внимательно присмотреться, то можно найти еще пару несуразиц:

constructor Create (Parent : TWinControl);
inherited Create (Parent);

Скорее всего, путаница в понятиях Owner vs Parent.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2009-08-27 14:13) [9]


> Polkin   (27.08.09 14:08) [7]

> Эээхххх.......все равно не работает......наверн связано
> с тем что весь этот каламбур происходит в dll.

Уж связан наверняка.
А зачем каламбур в длл? Т.е. зачем dll?

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2009-08-27 14:18) [10]


> Polkin   (27.08.09 14:08) [7]

> Без этого на форме у меня Label не появляецо

Есть конструктор CreateParented,
но, все это лишнее (а в особенности длл).

--
Regards, LVT.


 
Polkin   (2009-08-27 14:26) [11]


> Leonid Troyanovsky ©   (27.08.09 14:10) [8]


> Leonid Troyanovsky ©   (27.08.09 14:18) [10]

ХЗ - всю жизнь так создавал, в будущем исправлюсь )


> Leonid Troyanovsky ©   (27.08.09 14:13) [9]

Ибо плагин )


 
Медвежонок Пятачок ©   (2009-08-27 14:28) [12]

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(Format("OnMouseEnter: %p; OnMouseLeave: %p",[@Label1.OnMouseEnter,@Label1.OnMouseLeave]))
end;


 
Leonid Troyanovsky ©   (2009-08-27 14:33) [13]


> Polkin   (27.08.09 14:26) [11]

> Ибо плагин )

Фигня это, а не плагин.
Либо делать все без VCL, либо с каким-либо COM.

--
Regards, LVT.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.043 c
2-1251440566
kiki
2009-08-28 10:22
2009.10.25
Как сделать рандом значения от -20 до +20?


1-1220781512
Guest
2008-09-07 13:58
2009.10.25
Нужна помощь для связки с 1С.


2-1250844434
cyber-pilot
2009-08-21 12:47
2009.10.25
Изменение объекта


1-1221634382
Sashka
2008-09-17 10:53
2009.10.25
Последовательность идентификации и устранения ошибки


2-1251099283
abhtr
2009-08-24 11:34
2009.10.25
CreateProcess





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский