Q&A

  • 콤포넌트위에 마우스가 올라왔는지를 알수 있나요?
콤포넌트의 MouseMove이벤트말고 콤포넌트위에 마우스가 올라왔을때

일어나는 이벤트가 있나요?

판넬이나 ToolButton에는 그런 이벤트가 없던데..

고수님들의 조언을 부탁드립니다. 꾸뻑



아 마우스가 콤포넌트 밖으로 나갔을때도 알고싶어요

1  COMMENTS
  • Profile
    파도랑 2001.12.11 00:56
    CMMouseEnter, CMMouseLeave메시지를 가로채서 사용하시면 됩니다.



    필요한 컴포넌트 하나를 만들어 쓰시면 좋겠죠...



    참고로 아래 소스는 웹브라우져에서 글자에 마우스를 가져갔을 때

    밑줄이 그어지는 것 같은 효과를 내는 레이블 소스입니다...



    다른 컴포넌트들도 마찬가지로 쓰시면 됩니다.





    unit NewLabel;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TNewLabel = class(TLabel)

    private

    OldFontColor: TColor;

    OldFontStyle: TFontStyles;



    protected

    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;

    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    public

    constructor Create(AOwner: TComponent); override;

    published

    { Published declarations }

    end;



    procedure Register;



    implementation



    procedure Register;

    begin

    RegisterComponents('Sample', [TNewLabel]);

    end;



    { TNewLabel }



    procedure TNewLabel.CMMouseEnter(var Message: TMessage);

    begin

    if Enabled then

    begin

    OldFontColor := Font.Color;

    OldFontStyle := Font.Style;

    Font.Color := clBlue;

    Font.Style := Font.Style+[fsUnderline];

    end;

    end;



    procedure TNewLabel.CMMouseLeave(var Message: TMessage);

    begin

    if Enabled then

    begin

    Font.Color := OldFontColor;

    Font.Style := OldFontStyle;

    end;

    end;



    constructor TNewLabel.Create(AOwner: TComponent);

    begin

    inherited;



    Transparent := True;

    end;



    end.