Q&A

  • 암호 form을 어떻게 넣어야......
제가 만든 작은 프로그램에서는 맨 처음 시작할 때, splash form이 뜨고, 그 다음 Datamodule이 올라오고, 그 다음 main form이 나타납니다.

project option에는 DataModule와 Main Form이 Auto-create forms로 되어 있습니다.



그런데 main form이 나타나기 전에 암호 form이 뜨고,

암호 form에서 취소를 누르면 프로그램이 전부 종료되도록 할려고 하는데, 안되고 있습니다. 정말 속이 타내요.

방법이 없을 까요.

초보라 좀 자세한 code를 부탁드립니다.

2  COMMENTS
  • Profile
    유도삼 2000.01.14 04:02
    조영욱 wrote:

    > 제가 만든 작은 프로그램에서는 맨 처음 시작할 때, 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.

  • Profile
    GOLD2000 2000.03.11 04:09
    답변:어떤폼을 시작하기 전에 다른폼을 띄울때는 on create event에서 다른 폼을 띄우면 됩니다.



    유도삼 wrote:

    > 조영욱 wrote:

    > > 제가 만든 작은 프로그램에서는 맨 처음 시작할 때, 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.