Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-51580
hostage2002
2002-11-26 15:54
2002.12.16
Записать OLE в поле SQL Server а


14-51968
TTCustomDelphiMaster
2002-11-22 23:06
2002.12.16
Водка & Пиво


14-51939
Ru
2002-11-22 16:39
2002.12.16
Конец света


8-51841
faf
2002-09-01 10:50
2002.12.16
Как, сделать, спектроанализатор?


14-51954
Sergey_Suhoy
2002-11-26 10:28
2002.12.16
Сохранение ветки реестра в текстовый файл.





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