프로그램을 일정시간 사용(이벤트 없음) 하지 않으면 자동으로 종료하기 위해
여러고수님들의 Tip을 참고하여 만들었습니다.
1. 전역변수 선언
FLastActive : TDatetime;
2. Ttpe 절아래 프로시져 등록
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
3.메인폼 Create시 프로시져 호출
Application.OnMessage := AppMessage; //이벤트가 없을시 폼을 종료하는데 필요
4. 프로시져 정의
procedure TMainForm.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
case Msg.Message of
WM_KEYFIRST..WM_KEYLAST, WM_MOUSEFIRST..WM_MOUSELAST:FlastActive := Now;
end;
end;
5.타입머로 첵크후 종료하기
인터벌은 1000, 디자인시 Enabled := True;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
if (FlastActive + EncodeTime(0,10,0,0)) < Now then begin
close; //10분간 이벤트없으면 종료
end;
end;
흐미 잘 됩니다. 원하는 시간에 종료가 잘 됩니다.
그러나 문제가 있습니다.
사용자가 마우스를 이리저리 움직이다 폼의 Caption부분(상단)을 어찌어찌하면 프로그램이 실행도 않되고
그냥 죽습니다. 이런 젠장...
그래서 메이폼 Create시 마우스를 가두기로 했습니다.
procedure TMainForm.FormCreate(Sender: TObject);
var Rec : Trect;
begin
Rec := boundsrect;
Rec.Left := Rec.Left+40; // 여기서부터 빠져나가지 말라고..
Rec.Top := Rec.Top + 40;
Rec.Right := Rec.Right-30;
Rec.Bottom := Rec.Bottom -30;
ClipCursor(@Rec);
//이후 여러가지 일을 합니다.
//서버에서 데이터도 읽어오구, 레지스트리도 건드리고...
//폼의 버튼을 Visible := false로 하기도 하고
//이런일 저런일...
Application.OnMessage := AppMessage;
end;
흐미.... 마우스가 풀려버려요... 폼에 패널도 있고 버튼도있고 Label도 있는데 이런것들이 다 보이기도 전에
마우스가 풀려 다시 유저가 이리저리 움직이다가 프로그램이 실행도 않되고 죽어버립니다.
(폼이 완전히 나타난 후에 마우스를 이리저리 움직일 경우엔 프로그램이 당당히 살아 있습니다.)
질문1. 마우스를 폼이 완전히 생생될때까지 폼안에 가두고자 합니다.
고수님들 주절 주절 질문이 길어졌는데 저 이거 해결 안됨 '자동종료' 확 부셔버릴랍니다.
감사합니다.
님은 윈도우즈메세지를 쓰셨는데....
훅은 일단 윈도우즈 메세지 땜시 고생 하지 않아두 되거든요...
타이머와 적당히 섞어서 훅을 쓰시면 이러한 문제들은 없을꺼라고 생각이
드네여.....마우스를 가둬놓을 필요두 없구여...^^
그럼 즐코 하세여....^^;;;