Форум: "Основная";
Текущий архив: 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]
;
- это я могу написать, но когда эту процедуру нужно вызывать? Нету у label события Onleave???
procedure CMMouseLeave(var msg: TMessage); message СM_MOUSELEAVE;
← →
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.006 c