Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизСобытие OnMouseOver на Label? Найти похожие ветки
← →
TankMan (2002-10-30 23:22) [0]Я не помню, может я чего и путаю, но вроде на некоторых компонентах есть такое событие, когда мышка "уходит с поверхности" компонента, (или это я с VB/VC++ путаю), ну вобщем нужно, чтобы когда мышка заходит на Лейбл, Лейбл становится синим цветом, а когда уходит - серым, с синим цветом все понятно - OnMouseMove, а вот как обратно - проблема..
Усугубляется дело еще тем, что этот лейб один из неизвестного колличества динамически создаваемых лейблов... и это прямо я скажу привело меня в тупик.
← →
Guellirro (2002-10-31 00:17) [1]отлавливай CM_MOUSELEAVE
← →
k (2002-10-31 12:51) [2]а не факт, что это сработает, TLabel - не потомок TWinControl.
хотя попытаться стоит
← →
Pat (2002-10-31 14:33) [3]>а не факт, что это сработает
Факт...когда-то это работало :-)
← →
TankMan (2002-10-31 18:53) [4]...ээээ... понимаете, как-то не приходилось обрабатывать сообщения.. не могли бы написать примерчик какойньть?
← →
k (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..ну это в двух словах :-))
← →
k (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c