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

Вниз

Событие CM_MOUSELEAVE...   Найти похожие ветки 

 
urich ©   (2002-06-04 15:48) [0]

Есть на форме обычная метка - label1. Хочется менять цвет шрифта при наведении и при уходе мыши с компонента. Я начинающий, поэтому может мой вопрос покажится многим глупым, но может кто-нибудь снизайдет до меня и подскажет как это реализовать... Спасибо...


 
MBo ©   (2002-06-04 15:56) [1]

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


 
urich ©   (2002-06-04 16:05) [2]

Не, я для такого ДУБОВАт... И не хочу брать чужие компоненты, хочется самому разобраться: откуда идет сообщение, где его ловить, как его обработать... Не подскажите? а?


 
urich ©   (2002-06-04 16:10) [3]

;
procedure CMMouseLeave(var msg: TMessage); message СM_MOUSELEAVE;
- это я могу написать, но когда эту процедуру нужно вызывать? Нету у label события Onleave???


 
MBo ©   (2002-06-04 16:12) [4]

то-то и оно, что нету (на самом деле скрыто) - придется свой компонент писать, вводя это событие.


 
Dima-k17 ©   (2002-06-04 16:13) [5]

На событии OnMouseMove пишешь:

label1.font.color:=clred;

на событии OnMouseLeave:

label1.font.color:=clblack;

С уважением Dima-k17.


 
Dima-k17 ©   (2002-06-04 16:14) [6]

Народ, в Delphi6 все это есть, и ничего там не надо писать.


 
MBo ©   (2002-06-04 16:15) [7]

>в Delphi6 все это есть
у меня 5, вот я и не знал ;(


 
urich ©   (2002-06-04 16:16) [8]

to Dima-k17: Либо я этого события не вижу, либо его нет...
to MBo: Т.е. если я понял правильно, нужно написать компонент-наследник от LABEL, и каким-то макаром добавить ему это событие? Так?


 
MBo ©   (2002-06-04 16:19) [9]

>urich
Ну если все-таки нет в 6-ке этого event, то надо делать наследника, все в ссылке есть.


 
urich ©   (2002-06-04 16:19) [10]

Пардон, данную проблемму решаю в D4...


 
urich ©   (2002-06-04 16:21) [11]

Как у Вас, мастеров, все просто - "писать наследника" - опять на полдня гемороя... Но все равно - СПАСИБО. Порядочный сайт, хочу Вам сказать. Молодцы.


 
Игорь Шевченко ©   (2002-06-04 16:26) [12]

Писать наследника - геморроя на 10 минут.


 
MBo ©   (2002-06-04 16:29) [13]

>urich
заменить в примере из ссылки image на label и будет счастье ;)


 
urich ©   (2002-06-04 16:31) [14]

Про наследника: я должен создать модуль, например MyLabel.pas, в котором должен описать TMyLabel= class(TLable), Потом в protection добавить procedure CMMouseLeave(var Msg: TMessage);message cm_MouseLeave;Так? Если так, то как мне это все потом вызвать из своей проги?


 
Игорь Шевченко ©   (2002-06-04 16:48) [15]

10 мин.

unit MouseSensitiveLabel;

interface
uses
Windows, Messages, Classes, Controls, StdCtrls;

type
TMouseSensitiveLabel = class(TLabel)
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter (var Message : TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave (var Message : TMessage); message CM_MOUSELEAVE;
procedure SetOnMouseEnter(const Value: TNotifyEvent);
procedure SetOnMouseLeave(const Value: TNotifyEvent);
protected
procedure DoMouseEnter; dynamic;
procedure DoMouseLeave; dynamic;
public
property OnMouseEnter : TNotifyEvent read FOnMouseEnter write SetOnMouseEnter;
property OnMouseLeave : TNotifyEvent read FOnMouseLeave write SetOnMouseLeave;
end;

implementation

{ TMouseSensitiveLabel }

procedure TMouseSensitiveLabel.CMMouseEnter(var Message: TMessage);
begin
DoMouseEnter();
end;

procedure TMouseSensitiveLabel.CMMouseLeave(var Message: TMessage);
begin
DoMouseLeave();
end;

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

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

procedure TMouseSensitiveLabel.SetOnMouseEnter(const Value: TNotifyEvent);
begin
FOnMouseEnter := Value;
end;

procedure TMouseSensitiveLabel.SetOnMouseLeave(const Value: TNotifyEvent);
begin
FOnMouseLeave := Value;
end;

end.

main.pas

procedure TfMain.FormCreate(Sender: TObject);
begin
FLabel := TMouseSensitiveLabel.Create(Self);
with FLabel do begin
Parent := Self;
BoundsRect := LabelPlace.BoundsRect;
Caption := LabelPlace.Caption;
ParentColor := true;
ParentFont := true;
OnMouseEnter := LabelMouseEnter;
OnMouseLeave := LabelMouseLeave;
end;
end;

procedure TfMain.LabelMouseEnter(Sender: TObject);
begin
FLabel.Font.Color := clBlue;
end;

procedure TfMain.LabelMouseLeave(Sender: TObject);
begin
FLabel.Font.Color := clBlack;
end;



 
urich ©   (2002-06-04 16:58) [16]

Для ИГОРЯ: Спасибо, сейчас попробую


 
urich ©   (2002-06-04 17:08) [17]

A kak нужно объявлять Flabel и где?


 
urich ©   (2002-06-04 17:09) [18]

И как описывать в main "LabelMouseEnter" ?


 
Игорь Шевченко ©   (2002-06-04 17:11) [19]

type
TfMain = class(TForm)
LabelPlace: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FLabel : TMouseSensitiveLabel;
procedure LabelMouseEnter (Sender : TObject);
procedure LabelMouseLeave (Sender : TObject);
public
{ Public declarations }
end;



 
urich ©   (2002-06-04 17:14) [20]

для Игорь Шевченко : Вау!!! СУПЕР!!! СПАСИБО ОГРОМНОЕ!!! ВСЕ ПОЛУЧИЛОСЬ !!!
СПАСИБО !!! СПАСИБО !!! СПАСИБО !!!
СПАСИБО !!! СПАСИБО !!! СПАСИБО !!!
СПАСИБО !!! СПАСИБО !!! СПАСИБО !!!


 
urich ©   (2002-06-04 17:18) [21]

А из этого можно сделать VCL?


 
Игорь Шевченко ©   (2002-06-04 17:24) [22]

Да ради бога, никто не мешает. Можно даже авторских прав не указывать :-)


 
urich ©   (2002-06-04 17:34) [23]

А как сделать VCL?


 
Игорь Шевченко ©   (2002-06-04 17:38) [24]

К терапевту... :-)


 
Игорь Шевченко ©   (2002-06-04 18:07) [25]

unit MouseSensitiveLabel;

interface
uses
Windows, Messages, Classes, Controls, StdCtrls;

type
TMouseSensitiveLabel = class(TLabel)
private
FOnMouseLeave: TNotifyEvent;
FOnMouseEnter: TNotifyEvent;
procedure CMMouseEnter (var Message : TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave (var Message : 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 Register;

implementation

{ TMouseSensitiveLabel }

procedure TMouseSensitiveLabel.CMMouseEnter(var Message: TMessage);
begin
DoMouseEnter();
end;

procedure TMouseSensitiveLabel.CMMouseLeave(var Message: TMessage);
begin
DoMouseLeave();
end;

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

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

procedure Register;
begin
RegisterComponents ("Igor Schevchenko", [TMouseSensitiveLabel]);
end;

end.


 
EternalWonderer   (2002-06-04 18:24) [26]

А можно проще:
меняем цвет по Label1OnMouseMove,
а обратно - по Panel1OnMouseMove,
где Label1 лежит на Panel1.


 
urich ©   (2002-06-05 10:04) [27]

Всем спасибо!!!


 
Song ©   (2002-06-05 10:08) [28]

Ну Вы ребят напридумывали... :o

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Label1.Font.Color:=ClRed;
end;

procedure TForm1.Label1MouseLeave(Sender: TObject);
begin
Label1.Font.Color:=ClWindowText;
end;


 
Игорь Шевченко ©   (2002-06-05 10:21) [29]

Song © (05.06.02 10:08)

Это в Delphi 6


 
SPeller ©   (2002-06-05 11:01) [30]

Для любых Дельфи:

procedure TForm1.Label1MouseMove(...);
begin
With Label1 do
if Tag=0 then begin
Tag:=1;
Font.Color:=clRed;
end;

procedure TForm1.FormMouseMove(...);
begin
With Label1 do
if Tag=1 then begin
Tag:=0;
Font.Color:=clWindowText;
end;


 
SPeller ©   (2002-06-05 11:03) [31]

Упс.. косячок....

procedure TForm1.Label1MouseMove(...);
begin
With Label1 do
if Tag=0 then begin
Tag:=1;
Font.Color:=clRed;
end;
end;

procedure TForm1.FormMouseMove(...);
begin
With Label1 do
if Tag=1 then begin
Tag:=0;
Font.Color:=clWindowText;
end;
end;


 
Игорь Шевченко ©   (2002-06-05 11:07) [32]

SPeller © (05.06.02 11:03)

А что будет, если Label на панели, а панель еще на одной панели и так далее ? :-)))
Form1.OnMouseMove не сработает :-)))


 
Vladymir   (2002-06-07 01:32) [33]

Игорь Шевченко © (05.06.02 11:07)

А KeyPreview поставить :)))


 
Игорь Шевченко ©   (2002-06-07 09:34) [34]

Vladymir (07.06.02 01:32)

На mouse...keypreview...Изврат :-)

KeyPreview property Specifies whether the form should receive keyboard events before the active control.




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

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

Наверх




Память: 0.55 MB
Время: 0.012 c
1-65061
QWest
2002-06-10 09:57
2002.06.20
Уважаемые мастера...


1-65161
qwen
2002-06-07 01:01
2002.06.20
А вот как правильно?!


14-65210
Sam08
2002-05-17 15:18
2002.06.20
Эй Ну кто из вас наладил продажу своей программы в сети


4-65281
anacronix
2002-04-20 18:23
2002.06.20
Ввод текста в Edit1 в любом регистре


4-65298
Dorosh
2002-04-17 09:20
2002.06.20
MessageBox modal