개념 : 프로그램 전역으로 뮤텍스를 생성해서 이후에 다시 뮤텍스를 생성하면 에러가 발생하는 것을 이용해서 프로그램을 한번만 실행되게 제어한다.

소스 :

어플리케이션의 메인 유닛에서 다음과 같이 작업한다.
windows유닛 추가

var
  Mutex : THandle;
begin

  Mutex := CreateMutex(nil, True, 'NoDuplicate');
  //GetLastError : 이미 이 프로그램의 뮤텍스가 존재하면 183 리턴
  if (Mutex <> 0 ) and (GetLastError = 0) then
  begin
    //프로그램 처음 시작되는 경우 코드
    Application.CreateForm(TSendMemoForm, SendMemoForm);
    Application.Run;
    if Mutex <> 0 then CloseHandle(Mutex);
  end
  else
  begin
    //이미 프로그램이 실행되있는데 다시 실행하는 경우.
    Application.MessageBox('프로그램이 이미 실행 중입니다.','경고',MB_OK);
  end;
Posted by Gu Youn
,
1. 설명
종료할 프로그램의 Handle을 얻고 그것을 이용해서 프로세스ID를 얻어서 프로그램을 종료 시킨다.

2. 소스
var
ProcessHandle: THandle;

ProcessId: Integer;

Wnd: HWND;

begin

Wnd := FindWindow('KMUtilWndClass',nil);

// 윈도우 핸들로 부터 프로세스 ID를 얻습니다.

GetWindowThreadProcessId(Wnd, @ProcessId);

// 얻어진 ID로 부터 프로세스 핸들을 얻습니다.

ProcessHandle := OpenProcess(PROCESS_TERMINATE, False, ProcessId);



// 죽여 버립니다...

TerminateProcess(ProcessHandle, 4);
Posted by Gu Youn
,
1. 설명
메인폼 이전에 출력할 폼을 먼저 모달로 보여준후 모달 폼에서 mrOk, mrCancel에 따라서 그 이후 메인폼 보여줄지 말지를 결정한다.

2. 소스
    Loginform := TLoginForm.Create(Application);

   try
     if LoginForm.ShowModal = mrCancel then
       Exit;
   finally
     LoginForm.Free;
   end;

   Application.CreateForm(TKomarooForm, KomarooForm);
   Application.CreateForm(TSendMemoForm, SendMemoForm);
   Application.Run;


Posted by Gu Youn
,
1. ActiveX Type Library의 IActiveFormXEvents에 추가하고자 하는 이벤트 이름으로 메소드(method)를 추가한다.
에를 들어 OnTestEvent를 추가한 경우 ActiveFormProj1_TLB.pas 파일에 자동으로 다음과 같은 항목이 추가된다.

    procedure OnTestEvent; dispid 209;
    FOnTestEvent: TNotifyEvent;
    property OnTestEvent: TNotifyEvent read FOnTestEvent write FOnTestEvent;

2. ActiveFormImpl1.pas에 Event Triger 함수를 작성한다.
procedure TrigerOnTestEvent(Sender: TObject);

procedure TActiveFormX.TrigerOnTestEvent(Sender: TObject);
begin
   if FEvents <> nil then FEvents.OnTestEvent;
end;

3. 이벤트 발생 시켜야 할 시점에 TgigerOnTestEvent함수를 호출하면 이벤트가 발생하게 된다.

4. html에서 이벤트 핸들러 작성하는 방법
<script language="vbscript">
  sub Form1_OnTestEvent()
    //이벤트발생할떄 처리할 내용 구현
  End Sub
</script>
Posted by Gu Youn
,
프로그램 오류 처리 방법을 설명한다.

Use 에 SysUtils 추가 하고
아래처럼 작성한다. 상세한 내용은 Help 참고
검색 키워드 : Try...except,

1. try...finally
try
  //에러 없을때 하고 싶은 것들
finally
  //리소스 해제 등 꼭 처리해줘야 하는 것들
end;

2. try...except
try
 //에러 없을때 하고 싶은 것들
except on e : Exception do
 //에러 처리
else
 //except로 처리 되지 않은 exception 처리
end;
Posted by Gu Youn
,