제가 만든 작은 프로그램에서는 맨 처음 시작할 때, splash form이 뜨고, 그 다음 Datamodule이 올라오고, 그 다음 main form이 나타납니다.
project option에는 DataModule와 Main Form이 Auto-create forms로 되어 있습니다.
그런데 main form이 나타나기 전에 암호 form이 뜨고,
암호 form에서 취소를 누르면 프로그램이 전부 종료되도록 할려고 하는데, 안되고 있습니다. 정말 속이 타내요.
방법이 없을 까요.
초보라 좀 자세한 code를 부탁드립니다.
> 제가 만든 작은 프로그램에서는 맨 처음 시작할 때, splash form이 뜨고, 그 다음 Datamodule이 올라오고, 그 다음 main form이 나타납니다.
> project option에는 DataModule와 Main Form이 Auto-create forms로 되어 있습니다.
>
> 그런데 main form이 나타나기 전에 암호 form이 뜨고,
> 암호 form에서 취소를 누르면 프로그램이 전부 종료되도록 할려고 하는데, 안되고 있습니다. 정말 속이 타내요.
> 방법이 없을 까요.
> 초보라 좀 자세한 code를 부탁드립니다.
여러가지 방법이 있겠지만 저의 경우는 프로젝트 파일을 적절하게 수정하여 사용하고
있습니다. 참고가 됐으면 합니다.
아래는 프로젝트 파일의 소스입니다.
function AlreadyRun(Title: String): Boolean;
var
PrevInstHandle: THandle;
begin
Result := False;
PrevInstHandle := FindWindow('TApplication', PChar(Title));
if PrevInstHandle = 0 then Exit;
Application.MessageBox('프로그램이 이미 실행 되어 있습니다.', '확인', MB_OK + MB_ICONSTOP);
if IsIconic(PrevInstHandle) then
ShowWindow(PrevInstHandle, SW_RESTORE)
else
BringWindowToTop(PrevInstHandle);
Result := True;
end;
function InvalidResolution: Boolean;
begin
Result := False;
if Screen.Width >= 1024 then Exit;
Application.MessageBox('해상도를 1024*768이상으로 설정하십시오.', '확인', MB_OK + MB_ICONSTOP);
Result := True;
end;
function IsDefaultPrinter: Boolean;
var
FDevice, FDriver, FPort: PChar;
CurrentPrinterName: String;
FHandle: THandle;
begin
GetMem(FDevice, 255);
GetMem(FDriver, 255);
GetMem(FPort, 255);
try
try
Printer.GetPrinter(FDevice, FDriver, FPort, FHandle);
CurrentPrinterName := FDevice;
if CurrentPrinterName <> '' then Result := True
else Result := False;
except
Result := False;
end;
finally
if FDevice <> nil then FreeMem(FDevice, 255);
if FDriver <> nil then FreeMem(FDriver, 255);
if FPort <> nil then FreeMem(FPort, 255);
end;
if not Result then Application.MessageBox('기본프린터를 설정하십시오.', '확인', MB_OK + MB_ICONSTOP);
end;
function CheckUser: Boolean; //사용자 확인 폼을 호출하여 Boolean값을 리턴한다.
begin
Result := False;
try
frmPassWord := TfrmPassWord.Create(Application);
if frmPassWord.ShowModal = mrOk then Result := True;
finally
frmPassWord.Free;
end;
end;
begin
if AlreadyRun('Q') then Halt; //프로그램이 기 실행됐는지 검사
if InvalidResolution then Halt; //해상도 검사
if not IsDefaultPrinter then Halt; //기본 프린터가 있는지 검사
Application.Initialize;
Application.Title := 'Q';
Application.CreateForm(TfrmDataModule, frmDataModule); //DataModule Create
if CheckUser then begin //사용자 확인 - 사용자 인증이 되면
frmSplash := TfrmSplash.Create(Application); //Splash 실행
frmSplash.Show;
frmSplash.Update;
Application.CreateForm(TfrmMain, frmMain); //Auto Form Create
Application.CreateForm(TfrmExcept, frmExcept);
Application.CreateForm(TfrmEdit, frmEdit);
Application.CreateForm(TfrmCompound, frmCompound);
Application.CreateForm(TfrmSelect, frmSelect);
frmSplash.Hide;
frmSplash.Free;
Application.Run;
end;
end.