Q&A

  • 컨트롤의 힌트 속성에 관한 질문
일반적으로 컨트롤을 폼에 올리고 컨트롤의 힌트속성에
값을 주고 실행을 시키면 컨트롤에 포커스가 갈때
힌트가 보여주잖아요..

제 질문은 일반적으로 힌트는 약 2-3초만 보여주는데
이것을 포커스가 있는 동안에는 계속해서 보여줄수는 없는지요?

전 지금 현재 체크박스를 가지고 테스트하고 있습니다..

고수님들의 의견 부탁합니다.
1  COMMENTS
  • Profile
    구창민 2002.11.16 23:57
    안녕하세여~ 불멸의 화상 구창민입니다. ^_^

    음.. 우선 첫번째 방법으론 Application.OnShowHint 를 가로채서

    Hint 의 HideTimeOut 시간을 한정없이 늘려버리시면

    간단히 해결 될거 같구여.

    두번째 방법으론, 자신만의 힌트를 만들어서 쓰는것도 좋은 방법이겠지요.

    첫번째 방법은 아래처럼 아주 간단히 해결 하실수 있습니다.

    procedure TForm1.DoOnShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo);
    begin
      HintInfo.HideTimeout := 10000;
      {
      HintInfo.HintPos       //힌트의 위치.
      HintInfo.HintColor;    //힌트의 색깔
      HintInfo.HintMaxWidth; //워드랩 되는 넓이.
      등등...
      }
    end;


    procedure FormCreate(...
    begin
      Application.OnShowHint := DoOnShowHint;
    end;



    또한 두번째 방법을 한번 간소하게 구현해보았는데 ^_^

    응용하셔서 사용하세여.

    먼저 Control 의 ShowHint 속성을 끄고 하세여.


    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        procedure WndProc(var Message: TMessage); override;
      public
        { Public declarations }
        HintWindow : THintWindow;
        procedure MakeHintWindow(Sender: TObject; Msg: Integer);
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.DFM}

    procedure TForm1.WndProc(var Message: TMessage);
    begin
      if Message.LParam = Longint(Button1) then
        MakeHintWindow(Button1, Message.Msg);
      inherited WndProc(Message);
    end;

    procedure TForm1.MakeHintWindow(Sender: TObject; Msg: Integer);
    var
      Mp : TPoint;
      R  : TRect;
    begin
    if Sender is TButton then
    begin
       if (Msg = CM_MOUSEENTER) then // 마우스가 들어올때
       begin
         GetCursorPos(Mp);
         R := Rect(Mp.x, Mp.y, Mp.x+200, Mp.y+30);
         HintWindow.ActivateHint(R, '안녕하세요 저는 불멸의 화상 구창민입니다.');
       end;

       if (Msg = CM_MOUSELEAVE) then  // 마우스가 떠날때
       begin
         if HintWindow <> nil then HintWindow.ReleaseHandle;
       end;
    end;
    end;


    procedure TForm1.FormCreate(Sender: TObject);
    begin
      HintWindow := THintWindow.Create(Application);
      HintWindow.Color := clInfoBk;
      HintWindow.Canvas.Font.Name := '굴림';
      HintWindow.Canvas.Font.Size := 10;
    end;

    end.