Q&A

  • violation error
안녕하셔여 항상 많은 도움만 받고 있는 용이에여

다름이 아니라

frmlogin 폼에서 버튼을 눌렀을 때 frmmain을 호출하거든여

procedure TfrmLogin.btnLoginClick(Sender: TObject);

begin

User_ID := edtId.text; //전역변수로 선언된 아이디

User_PWD := edtPw.text; //전역변수로 선언된 패스워드



if frmMain = nil then

frmMain := TfrmMain.Create(Application);

frmlogin.free;

frmMain.Showmodal;

end;



procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action := caFree;

frmLogin := nil;

end;



근데 여기서 생성된 frmmain을 닫으면 바로 그 왠수같은 "access violation at address

00010105 .write of address 00000000"이 떠 버립니다...

메모리에서 완전하게 삭제된거 같지도 않구여...몇개 글을 읽어 봤는데 잘 이해도 안가고 해 봐도 안되고 고수님들 도와 주세여....ㅠㅠ

2  COMMENTS
  • Profile
    조규춘 2000.10.24 11:07
    용이 wrote:

    > 안녕하셔여 항상 많은 도움만 받고 있는 용이에여

    > 다름이 아니라

    > frmlogin 폼에서 버튼을 눌렀을 때 frmmain을 호출하거든여

    > procedure TfrmLogin.btnLoginClick(Sender: TObject);

    > begin

    > User_ID := edtId.text; //전역변수로 선언된 아이디

    > User_PWD := edtPw.text; //전역변수로 선언된 패스워드

    >

    > if frmMain = nil then

    > frmMain := TfrmMain.Create(Application);

    > frmlogin.free;

    > frmMain.Showmodal;

    > end;

    >

    > procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > Action := caFree;

    > frmLogin := nil;

    > end;

    >

    > 근데 여기서 생성된 frmmain을 닫으면 바로 그 왠수같은 "access violation at address

    > 00010105 .write of address 00000000"이 떠 버립니다...

    > 메모리에서 완전하게 삭제된거 같지도 않구여...몇개 글을 읽어 봤는데 잘 이해도 안가고 해 봐도 안되고 고수님들 도와 주세여....ㅠㅠ





    하이염...



    아래의 이경문님 역쉬 우리 델세상 동호회의 회원님들중 자랑하구픈 회원님이십니다.^^

    (물론 최용일님이나 다른분들두 다 존경하구... ^^)



    그런데... 다른 것두 있다구 이야기 하구 시퍼서 글 남겨유...



    사용자 Login 정보를 받을수 있는 것을 만드는 것은 어떨까 하는 군요~



    사용예는 다음과 같습니다.



    물론, 아래의 예제는 db를 안써두 쓸수 있답니다. ^^



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, DBLogDlg;

    // =====================================================================

    // 유닛절에 DBLogDlg를 추가 해야 합니다.

    // 그에 따른 해설은 다음과 같군요

    // TLoginDialog is a login dialog box that can be used

    // to provide login security within an application.

    // =====================================================================





    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    dlgLogin: TLoginDialog;

    begin

    dlgLogin := TLoginDialog.Create(Application);

    dlgLogin.Caption := '로그인화면';

    dlgLogin.DatabaseName.Caption := '데이타베이스명';

    dlgLogin.ShowModal;

    if dlgLogin.ModalResult = mrOk then

    begin

    // OK 클릭시 처리

    // 그 대화상자에서 사용자가 친 내용을 가져올수 있습니다.

    ShowMessage(dlgLogin.UserName.Text); // 유저명

    ShowMessage(dlgLogin.PassWord.Text); // 패스워드

    end;

    end;



    end.





    델세상(http://www.freechal.com/delphiworld)의 조규춘이였습니다.



  • Profile
    이경문 2000.10.24 04:58
    처음 메인폼을 띄우기 전에 로그인을 띄우시는 목적을 가지신 것 같네요.

    일단 frmLogin.Free를 수행하면 frmLogIn에 대한 영역이 메모리로부터 지워지겠지요.

    그 상태에서 frmMain.ShowModal을 부를 수 있을 까요?

    그런 형태로 사용하지 마시고 frmMain의 OhShow 이벤트에서



    procedure TfrmMain.FormShow(Sender: TObject);

    begin

    frmLogin := TfrmLogin.Create(nil);

    frmLogin.ShowModal;

    frmLogin.Free;

    frmLogin := nil;

    end;



    같은 형식으로 작성해 보세요.

    물론 Project Options 에서 frmLogin은 Available Forms로 설정해야 겠지요.

    그럼...



    용이 wrote:

    > 안녕하셔여 항상 많은 도움만 받고 있는 용이에여

    > 다름이 아니라

    > frmlogin 폼에서 버튼을 눌렀을 때 frmmain을 호출하거든여

    > procedure TfrmLogin.btnLoginClick(Sender: TObject);

    > begin

    > User_ID := edtId.text; //전역변수로 선언된 아이디

    > User_PWD := edtPw.text; //전역변수로 선언된 패스워드

    >

    > if frmMain = nil then

    > frmMain := TfrmMain.Create(Application);

    > frmlogin.free;

    > frmMain.Showmodal;

    > end;

    >

    > procedure TfrmLogin.FormClose(Sender: TObject; var Action: TCloseAction);

    > begin

    > Action := caFree;

    > frmLogin := nil;

    > end;

    >

    > 근데 여기서 생성된 frmmain을 닫으면 바로 그 왠수같은 "access violation at address

    > 00010105 .write of address 00000000"이 떠 버립니다...

    > 메모리에서 완전하게 삭제된거 같지도 않구여...몇개 글을 읽어 봤는데 잘 이해도 안가고 해 봐도 안되고 고수님들 도와 주세여....ㅠㅠ