Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Polkin ©   (2009-08-27 12:47:00) 

День добрый!

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

 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;


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


Leonid Troyanovsky   (2009-08-27 14:33:00) [1]


> Polkin   (27.08.09 14:26) [11]

> Ибо плагин )

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

--
Regards, LVT.


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

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


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


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


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

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


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

Ибо плагин )


Leonid Troyanovsky   (2009-08-27 14:18:00) [4]


> Polkin   (27.08.09 14:08) [7]

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

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

--
Regards, LVT.


Leonid Troyanovsky   (2009-08-27 14:13:00) [5]


> Polkin   (27.08.09 14:08) [7]

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

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

--
Regards, LVT.


Leonid Troyanovsky   (2009-08-27 14:10:00) [6]


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

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

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

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

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

--
Regards, LVT.


Polkin   (2009-08-27 14:08:00) [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 не появляецо


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

> Self.Parent := Parent;

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


Leonid Troyanovsky   (2009-08-27 13:25:00) [9]


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

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

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

--
Regards, LVT.


Leonid Troyanovsky   (2009-08-27 13:23:00) [10]


> 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.


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

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


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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо