Q&A

  • 스피드버튼 이미지 Enable & Disable 하기 - 죄송 질문 수정 -
안녕하세여 꾸벅~~~ 왕처버여여~~~ ^^





마우스커서가 스피드버튼 위에 있을때랑 없을때 스피드버튼의 이미지를 Enable & Disable을 넣어야 하는데 어떻게 해야 할쥐 모르갔떠여~~



제가 한 방법은 오브젝트 인터페이스에 있는 버튼콤포넌트의 Properties에다가 Disable을 그래픽에다가 넣어주구 Enable 은 이벤트의 마우스 뮤부에다가 넣었습니다. 그랬더니 바뀌기는 바뀌는데 마우스가 컴포넌트 밖을 떠나면 Enable의 그림이 있떠여 마우스가 떠나묜 Disable로 바뀌어야 하는데 그래서 제가 생각한것이 if문으로 마우스 커서가 스피드버튼에 있을때 Disable로 없을때는 Enable로 하는 것을 생각했는데 스피드버튼에는 포커스가 없떠군여 어떻게 하쩌 꼭 답변 부탁드립니다.



2  COMMENTS
  • Profile
    최석기 2000.08.31 19:53
    막내야..



    다시 답변한다..

    어차피 하는 방법은 똑같잖어..



    참고해라..



    unit Unit1;



    interface



    uses

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

    Buttons;



    type

    TForm1 = class(TForm)

    SpeedButton1: TSpeedButton;

    procedure FormCreate(Sender: TObject);

    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    private

    { Private declarations }

    DisabledImage, EnabledImage: TBitMap;

    procedure WndProc(var Message: TMessage); override;

    public

    { Public declarations }

    procedure ChangeSet(Sender: TObject; Msg: Integer);

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    { TForm1 }



    procedure TForm1.ChangeSet(Sender: TObject; Msg: Integer);

    begin

    // 마우스가 Label위에 있을때

    if Sender is TSpeedButton then begin

    if (Msg = CM_MOUSELEAVE) then

    (Sender as TSpeedButton).Glyph.Assign(DisabledImage);

    //(Sender as TSpeedButton).Enabled := false; // 마우스가 떠날때

    if (Msg = CM_MOUSEENTER) then

    (Sender as TSpeedButton).Glyph.Assign(EnabledImage);

    //(Sender as TSpeedButton).Enabled := true; // 마우스가 들어올때

    end;

    end;



    procedure TForm1.WndProc(var Message: TMessage);

    begin

    // 콤포넌트에 마우스가 있으면(over) 폰트의 색상을 바꾼다

    if Message.LParam = Longint(SpeedButton1) then

    ChangeSet(SpeedButton1,Message.Msg);

    inherited;

    end;



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    EnabledImage := TBitmap.Create;

    DisabledImage := TBitmap.Create;

    EnabledImage.LoadFromFile('c:login_on.BMP');

    DisabledImage.LoadFromFile('c:login_off.BMP');

    SpeedButton1.Glyph.Assign(EnabledImage);

    end;



    procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

    begin

    EnabledImage.Free;

    DisabledImage.Free;

    CanClose := true;

    end;



    end.





    왕초보 wrote:

    > 안녕하세여 꾸벅~~~ 왕처버여여~~~ ^^

    >

    >

    > 마우스커서가 스피드버튼 위에 있을때랑 없을때 스피드버튼의 이미지를 Enable & Disable을 넣어야 하는데 어떻게 해야 할쥐 모르갔떠여~~

    >

    > 제가 한 방법은 오브젝트 인터페이스에 있는 버튼콤포넌트의 Properties에다가 Disable을 그래픽에다가 넣어주구 Enable 은 이벤트의 마우스 뮤부에다가 넣었습니다. 그랬더니 바뀌기는 바뀌는데 마우스가 컴포넌트 밖을 떠나면 Enable의 그림이 있떠여 마우스가 떠나묜 Disable로 바뀌어야 하는데 그래서 제가 생각한것이 if문으로 마우스 커서가 스피드버튼에 있을때 Disable로 없을때는 Enable로 하는 것을 생각했는데 스피드버튼에는 포커스가 없떠군여 어떻게 하쩌 꼭 답변 부탁드립니다.

    >

  • Profile
    최석기 2000.08.31 19:21
    안녕하세요..

    델파이세상...



    이거 말할 필요 없겠네.. 울 회원이넹.. 막네..



    이거 울 Q&A에도 답했던건데 여기도 함 더 쓰지..



    참고 하셔..



    Label을 Hot Track 시키는 방법으로 만들어 본건데 테스트 해보니까 잘 돼네..



    뭐 더 좋은 방법두 있겠쥐..



    그냥 참고 하셔~~







    unit Unit1;



    interface



    uses

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

    Buttons;



    type

    TForm1 = class(TForm)

    SpeedButton1: TSpeedButton;

    private

    { Private declarations }

    procedure WndProc(var Message: TMessage); override;

    public

    { Public declarations }

    procedure ChangeSet(Sender: TObject; Msg: Integer);

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    { TForm1 }



    procedure TForm1.ChangeSet(Sender: TObject; Msg: Integer);

    begin

    // 마우스가 Label위에 있을때

    if Sender is TSpeedButton then begin

    if (Msg = CM_MOUSELEAVE) then

    (Sender as TSpeedButton).Enabled := false; // 마우스가 떠날때

    if (Msg = CM_MOUSEENTER) then

    (Sender as TSpeedButton).Enabled := true; // 마우스가 들어올때

    end;

    end;



    procedure TForm1.WndProc(var Message: TMessage);

    begin

    // 콤포넌트에 마우스가 있으면(over) 폰트의 색상을 바꾼다

    if Message.LParam = Longint(SpeedButton1) then

    ChangeSet(SpeedButton1,Message.Msg);

    inherited;

    end;



    end.







    왕초보 wrote:

    > 안녕하세여 꾸벅~~~ 왕처버여여~~~ ^^

    >

    >

    > 마우스커서가 스피드버튼 위에 있을때랑 없을때 Enable & Disable을 넣어야 하는데 어떻게 해야 할쥐 모르갔떠여~~

    >

    > 제가 한 방법은 오브젝트 인터페이스에 있는 버튼콤포넌트의 Properties에다가 Disable을 그래픽에다가 넣어주구 Enable 은 이벤트의 마우스 뮤부에다가 넣었습니다. 그랬더니 바뀌기는 바뀌는데 마우스가 컴포넌트 밖을 떠나면 Enable의 그림이 있떠여 마우스가 떠나묜 Disable로 바뀌어야 하는데 그래서 제가 생각한것이 if문으로 마우스 커서가 스피드버튼에 있을때 Disable로 없을때는 Enable로 하는 것을 생각했는데 스피드버튼에는 포커스가 없떠군여 어떻게 하쩌 꼭 답변 부탁드립니다.

    >