Q&A

  • 메신저등에서 자리비움 표시하는것 말입니다.
메신저를 보면 대개 일정시간 키입력이나 마우스 입력이 없으면 자동적으로

자리비움 표시를 해주는데요 어떤식으로 구현하면될까요?

메신저 창이 활성화 되지 않았을때도 키입력이 있는지 없는지를 알아내야하는데

어떻게 하는건지를잘 모르겠네요.. ( 워낙에 초보다 보니.. ^^;;)

아시는 분은 좀 알려주세요.. ^^

1  COMMENTS
  • Profile
    조규춘 2001.07.02 05:11
    cyong.. wrote:

    > 메신저를 보면 대개 일정시간 키입력이나 마우스 입력이 없으면 자동적으로

    > 자리비움 표시를 해주는데요 어떤식으로 구현하면될까요?

    > 메신저 창이 활성화 되지 않았을때도 키입력이 있는지 없는지를 알아내야하는데

    > 어떻게 하는건지를잘 모르겠네요.. ( 워낙에 초보다 보니.. ^^;;)

    > 아시는 분은 좀 알려주세요.. ^^





    여러가지 방법들이 있을수 있지만..



    가장 간단한 방법으로는 클라이언트에서 타이머 두개를 놓는거지요.~



    딸랑 타이머 이야기 하니깐 이상하실 텐데 만들수 있는 구조는



    화면보호기의 원리랑 똑같습니다.



    보통 화면보호기가 작동하고있는 도중에 사용자에 의한 키나



    마우스의 이동이 발생되면 화면보호기는 바루 종료를 하고 말지요~



    그리하여 다음에서 이러한 사실을 이용해서..





    unit Unit1;



    interface



    uses

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

    Dialogs, ExtCtrls;



    type

    TForm1 = class(TForm)

    Timer1: TTimer;

    Timer2: TTimer;



    procedure Key_Mouse_Detect(var Msg: TMsg; var Handled:Boolean);

    procedure Timer1Timer(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure Timer2Timer(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;

    i : integer;



    implementation



    {$R *.dfm}



    { TForm1 }



    procedure TForm1.Key_Mouse_Detect(var Msg: TMsg; var Handled: Boolean);

    var

    firstmousePos : TPoint;

    begin

    // 마우스의 이동을 감지한다.

    if Msg.message = wm_Mousemove then

    begin

    // 마우스가 10 픽셀 이상의 이동이 있다면 타이머의 작동을 중지한다.

    if (Abs(loword (Msg.lParam)- firstmousePos.X ) > 10) or

    (Abs(Hiword (Msg.lParam)- firstmousePos.Y ) > 10) then

    begin

    timer1.Enabled := False;

    end;

    end

    else

    begin

    case Msg.message of

    WM_KEYDOWN : timer1.Enabled := False; // 키보드가 눌려졌을때

    WM_KEYUP : timer1.Enabled := False; // 키보다가 눌렸다가 올라갔을때

    WM_LBUTTONDOWN : timer1.Enabled := False; // 마우스의 왼쪽버튼이 눌렸을때

    WM_RBUTTONDOWN : timer1.Enabled := False; // 마우스의 오른쪽버튼이 눌렸을때

    WM_SYSKEYDOWN : timer1.Enabled := False; // 알트키나 컨트롤키같은게 눌렸을때

    WM_SYSKEYUP : timer1.Enabled := False; // 알트키나 컨트롤키같은게 눌렸다가 올라갔을