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

Вниз

Наведение мыши в потомке 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
15-1251491404
Юрий
2009-08-29 00:30
2009.10.25
С днем рождения ! 29 августа 2009 суббота


15-1251457955
TUser
2009-08-28 15:12
2009.10.25
Законы физики нарушаются


2-1251462711
denis_lunev
2009-08-28 16:31
2009.10.25
Сохранение изменений свойств в EDIT


15-1250784466
Пит
2009-08-20 20:07
2009.10.25
Игра меньше тормозит при большем разрешении


2-1251375733
Кирей
2009-08-27 16:22
2009.10.25
редактор отчетов