Q&A

  • 실행중인 어플리케이션을 강제종료하려면 어떻게 하죠..
먼저 소스를 보면.

program Form1;



uses

Forms,

UUnit1 in 'UUnit1.pas' {Form1},

ULogin in 'UUnit2.pas' {Form2};



{$R *.RES}



begin

Application.Initialize;

Application.CreateForm(TForm2, Form2);

Application.CreateForm(TForm1, Form1);

Application.Run;

end.



이렇게 실행되는데,

TForm1가 실행되기전에, TForm2을 실행 시켜서, 아이디 패스워드 체크등,

사용자 입력에 따라 TForm1의 실행여부를 결정하려 합니다.



TForm1, TForm2내부는 별다른게 없고, 일단 그 실행여부를 결정하려는데,

TForm2의 입력에 따라 TFrom1를 Close를 해도,

즉, TForm2에서 사용자의 입력에 따라,



if Edit2.Text = [wrong password] then

form1.Close;



이렇게 close를 해도,



Application.CreateForm(TForm1, Form1);



가 실행되어 TForm2가 실행됩니다.

어떻게 TForm1에서 TForm2의 실행을 막을 수 있을까요...

4  COMMENTS
  • Profile
    최용일 2001.06.01 00:31
    안녕하세요. 최용일입니다...



    이러한 방법은 별루 좋은 방법이 아니구요... 스플래쉬폼에서 자주사용하는 것처럼 모들형식으로 호출하세요...



    패스워드가맞다면 폼2의 ModalResult에 mrOk를 넣어주고, 틀리다면 mrCancel을 넣어주시면 됩니다...



    프로젝트소스

    var

    CorrectPassword: Boolean;

    begin

    Form2 := TForm2.Create(nil);

    CorrectPassword := Form2.ShowModal;

    Form2.Free;

    if CorrectPassword = mrOK then // 패스워드가 맞다면... 폼1을 연다...

    begin // 맞지 않다면 프로그램 그냥 종료...

    Application.Initialize;

    Application.CreateForm(TForm1, Form1);

    Application.Run;

    end;

    end.



    폼2

    if Edit2.Text = [wrong password] then

    ModalResult := mrCancel

    else

    ModalResult := mrOk;



    ^^ 항상 즐코하세요...



    초보 wrote:

    > 먼저 소스를 보면.

    > program Form1;

    >

    > uses

    > Forms,

    > UUnit1 in 'UUnit1.pas' {Form1},

    > ULogin in 'UUnit2.pas' {Form2};

    >

    > {$R *.RES}

    >

    > begin

    > Application.Initialize;

    > Application.CreateForm(TForm2, Form2);

    > Application.CreateForm(TForm1, Form1);

    > Application.Run;

    > end.

    >

    > 이렇게 실행되는데,

    > TForm1가 실행되기전에, TForm2을 실행 시켜서, 아이디 패스워드 체크등,

    > 사용자 입력에 따라 TForm1의 실행여부를 결정하려 합니다.

    >

    > TForm1, TForm2내부는 별다른게 없고, 일단 그 실행여부를 결정하려는데,

    > TForm2의 입력에 따라 TFrom1를 Close를 해도,

    > 즉, TForm2에서 사용자의 입력에 따라,

    >

    > if Edit2.Text = [wrong password] then

    > form1.Close;

    >

    > 이렇게 close를 해도,

    >

    > Application.CreateForm(TForm1, Form1);

    >

    > 가 실행되어 TForm2가 실행됩니다.

    > 어떻게 TForm1에서 TForm2의 실행을 막을 수 있을까요...

  • Profile
    초보 2001.06.01 18:57
    최용일 wrote:

    > 안녕하세요. 최용일입니다...

    >

    > 이러한 방법은 별루 좋은 방법이 아니구요... 스플래쉬폼에서 자주사용하는 것처럼 모들형식으로 호출하세요...

    >

    > 패스워드가맞다면 폼2의 ModalResult에 mrOk를 넣어주고, 틀리다면 mrCancel을 넣어주시면 됩니다...

    >

    > 프로젝트소스

    > var

    > CorrectPassword: Boolean;

    > begin

    > Form2 := TForm2.Create(nil);

    > CorrectPassword := Form2.ShowModal;



    여기서, Boolean과 Integer Type이 맞지 않는다고 에러가 발생하고요..



    > Form2.Free;

    > if CorrectPassword = mrOK then // 패스워드가 맞다면... 폼1을 연다...



    여기서는, mrOK가 선언되지 않았다는 에러가 발생하네요..



    > begin // 맞지 않다면 프로그램 그냥 종료...

    > Application.Initialize;

    > Application.CreateForm(TForm1, Form1);

    > Application.Run;

    > end;

    > end.

    >

    > 폼2

    > if Edit2.Text = [wrong password] then

    > ModalResult := mrCancel

    > else

    > ModalResult := mrOk;

    >

    > ^^ 항상 즐코하세요...

    >



    답변 감사해요, 그런데, 위와 같은 에러가 나네요..

    그래서 나름대로 매뉴얼을 보니, ShowModal은 정수값이고, 그걸 사용할 수 있다고 되어 있는데, 그렇다면, mrOK, mrCancel 같은 것도 정수값으로 되어 있다는 건가요?



    그리고 이 정수값이 선언 되지 않았다는 걸 해결하려면 어떻게 해야되나요...

    쩝, 마냥 어렵기만 하네요.. 부탁해요..





  • Profile
    최용일 2001.06.01 20:19
    읔~ 제가 실수했군요....



    var

    CorrectPassword: Integer;



    그리고 프로젝트소스의 uses절에 Controls유닛을 추가해주세요...



    초보 wrote:

    > 최용일 wrote:

    > > 안녕하세요. 최용일입니다...

    > >

    > > 이러한 방법은 별루 좋은 방법이 아니구요... 스플래쉬폼에서 자주사용하는 것처럼 모들형식으로 호출하세요...

    > >

    > > 패스워드가맞다면 폼2의 ModalResult에 mrOk를 넣어주고, 틀리다면 mrCancel을 넣어주시면 됩니다...

    > >

    > > 프로젝트소스

    > > var

    > > CorrectPassword: Boolean;

    > > begin

    > > Form2 := TForm2.Create(nil);

    > > CorrectPassword := Form2.ShowModal;

    >

    > 여기서, Boolean과 Integer Type이 맞지 않는다고 에러가 발생하고요..

    >

    > > Form2.Free;

    > > if CorrectPassword = mrOK then // 패스워드가 맞다면... 폼1을 연다...

    >

    > 여기서는, mrOK가 선언되지 않았다는 에러가 발생하네요..

    >

    > > begin // 맞지 않다면 프로그램 그냥 종료...

    > > Application.Initialize;

    > > Application.CreateForm(TForm1, Form1);

    > > Application.Run;

    > > end;

    > > end.

    > >

    > > 폼2

    > > if Edit2.Text = [wrong password] then

    > > ModalResult := mrCancel

    > > else

    > > ModalResult := mrOk;

    > >

    > > ^^ 항상 즐코하세요...

    > >

    >

    > 답변 감사해요, 그런데, 위와 같은 에러가 나네요..

    > 그래서 나름대로 매뉴얼을 보니, ShowModal은 정수값이고, 그걸 사용할 수 있다고 되어 있는데, 그렇다면, mrOK, mrCancel 같은 것도 정수값으로 되어 있다는 건가요?

    >

    > 그리고 이 정수값이 선언 되지 않았다는 걸 해결하려면 어떻게 해야되나요...

    > 쩝, 마냥 어렵기만 하네요.. 부탁해요..

    >

    >

  • Profile
    이현철 2001.06.01 00:27
    첫번째 방법으로는 Form1 의 left 를 -3000 해서 숨긴다음에

    Form1.create 에서 판단한후 Form2.show를 하는 방법이 있구요( 꽁수)



    다음은 Form1 에서 판단한후 판단 여부에 따라서 Form2 를 생성하거나 하시면 됩니다.

    여기서 중요한것은 Form2를 AutoCreate 하면 안되고, 폼을 동적으로 생성하셔야

    합니다.