Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.20;
Скачать: [xml.tar.bz2];

Вниз

Событие 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.005 c
3-64984
vasilly
2002-05-28 10:10
2002.06.20
проблема с BLOB через БДЕ только для MS SQL, для других баз нет


14-65244
mvg_first
2002-05-16 18:02
2002.06.20
Как написать грамотное техдание на разработку софта?


3-64923
oss
2002-05-24 10:53
2002.06.20
Midas,ADO


1-65123
Reticent
2002-06-05 17:27
2002.06.20
ListView.TopItem


3-64904
Bardel
2002-05-25 12:46
2002.06.20
Открытие базы данных MSAcces в Delphi





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