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

Вниз

Событие OnMouseOver на Label?   Найти похожие ветки 

 
TankMan ©   (2002-10-30 23:22) [0]

Я не помню, может я чего и путаю, но вроде на некоторых компонентах есть такое событие, когда мышка "уходит с поверхности" компонента, (или это я с VB/VC++ путаю), ну вобщем нужно, чтобы когда мышка заходит на Лейбл, Лейбл становится синим цветом, а когда уходит - серым, с синим цветом все понятно - OnMouseMove, а вот как обратно - проблема..
Усугубляется дело еще тем, что этот лейб один из неизвестного колличества динамически создаваемых лейблов... и это прямо я скажу привело меня в тупик.


 
Guellirro   (2002-10-31 00:17) [1]

отлавливай CM_MOUSELEAVE


 
©   (2002-10-31 12:51) [2]

а не факт, что это сработает, TLabel - не потомок TWinControl.
хотя попытаться стоит


 
Pat ©   (2002-10-31 14:33) [3]

>а не факт, что это сработает
Факт...когда-то это работало :-)


 
TankMan ©   (2002-10-31 18:53) [4]

...ээээ... понимаете, как-то не приходилось обрабатывать сообщения.. не могли бы написать примерчик какойньть?


 
©   (2002-10-31 21:58) [5]

в классе в разделе
protected //или еще где-нить
//пишешь
procedure MouLeave(var Msg:TMessage); message CM_MOUSELEAVE;
// и жмешь Ctrl+Shift+C - гененится пустое тело :)
в разделе имплементасьон

Pat © > там люди не могут текст получить с TLabel потому, что нет хендла, а впрочем, приду домой - попробую, интересно стало..



 
Pat ©   (2002-10-31 23:38) [6]

>k © (31.10.02 21:58)
Нужно создавать потомок от TLabel, иначе будет отлавливаться сообщение о покидании мыши формы

type
TMyLab = class(TLabel)
procedure mouseleave(var mes:TMessage);message cm_mouseleave;
end;
. . . . . .
procedure TMyLab.mouseleave(var mes:TMessage);
begin
//Делаем что-нибудь....
end;

В форме, где будет использоваться наша метка, ее придется создавать вручную...MyLab:=TMyLab.Create(); parent:=form; left..top..ну это в двух словах :-))


 
©   (2002-11-01 14:46) [7]

> Pat ©
да, это все верно, мне об это стоило написать.....
более того, чтоб не создавать/удалять/располагать на форме в run-time на базе класса можно зарегистрировать свой компонент с событиями OnMouseLeave, OnMouseEnter...

но если поместить зто

procedure mouseleave(var mes:TMessage);message cm_mouseleave;

в объявление формы, то при пересечении границы лейбла, как туда, так и обратно все равно будет выполнятся обработчик.

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


 
TankMan ©   (2002-11-01 21:45) [8]

Так погодите люди. Мне вобщем без разницы, какой класс будет у меня свой или обычный Label, потому что у меня так и так эти лейблы создаются динамически. Проблема еще в том, что я не знаю, сколько этих лейблов будет, и как мне например обрабатывать событие для определенного лейбла... вообще задача у меня такая - при наведении на лейбл, он становиться красного цвета, когда мышку уводим с лейбла, обратно серого... я понимаю, что с помощью этого обработчикаа можно выполнить, какие либо действия, но вот как выполнить эти действия над самим объектов вызвавшим это событие?


 
Pat ©   (2002-11-01 22:14) [9]

http://www.swissdelphicenter.ch/en/showcode.php?id=1068


 
Pat ©   (2002-11-01 22:24) [10]

Похожий вариант от Юрия Зотова:

TMyImage = class(TImage)
private
FOnMouseEnter: TNotifyEvent;
FOnMouseLeave: TNotifyEvent;
procedure CMMouseEnter(var Msg: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Msg: TMessage); message CM_MOUSELEAVE;
protected
procedure DoMouseEnter; dynamic;
procedure DoMouseLeave; dynamic;
published
property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
end;

procedure TMyImage.CMMouseEnter(var Msg: TMessage);
begin
inheried;
DoMouseEnter
end;

procedure TMyImage.CMMouseLeave(var Msg: TMessage);
begin
inherited;
DoMouseLeave
end;

procedure TMyImage.DoMouseEnter;
begin
if Assigned(FOnMouseEnter) then FOnMouseEnter(Self)
end;

procedure TMyImage.DoMouseLeave;
begin
if Assigned(FOnMouseLeave) then FOnMouseLeave(Self)
end;




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

Текущий архив: 2002.12.16;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
1-51659
Adrian_Copil_Minune
2002-12-04 12:15
2002.12.16
Очередь


1-51792
tytus
2002-12-05 01:36
2002.12.16
memo


3-51602
Начинающий програмер
2002-11-27 16:17
2002.12.16
Програмное добавление


3-51589
-=Sergeante=-
2002-11-22 17:49
2002.12.16
Дискретное значение сумм по месяцам.


14-51898
Novichek
2002-11-24 15:28
2002.12.16
Дельфи и Линокс