Q&A

  • pgm 시작시 login 창뛰우기 질문요
델파인 로그인 구성에서 문의 사항 입니다



program HDesk;

uses
  Forms,
  main in 'main.pas' {Umain},
  ucode in 'ucode.pas' {Form2},
  mod_dbcon in 'mod_dbcon.pas' {DM: TDataModule},
  login in 'login.pas' {ulogin};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TUmain, Umain);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TDM, DM);
  Application.CreateForm(Tulogin, ulogin);
  ulogin := tuLogin.Create(Application);
  uLogin.ShowModal;
  
                      << 이부분 화면 login 이면  에플리케이션실행

  Application.Run;
end.


로그인 창에서 디비 확인 후
창닫기 구현좀  


unit login;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, ExtCtrls, jpeg;

type
  Tulogin = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    Label1: TLabel;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  ulogin: Tulogin;
implementation

{$R *.dfm}


procedure Tulogin.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if key = #13 then ActiveControl := Edit2;
end;

procedure Tulogin.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
     if key = #13 then Button1Click(NIL);
end;

procedure Tulogin.Button1Click(Sender: TObject);
var id:string;
    pass:string;
    str:string;
begin
    id := edit1.Text;
    pass := edit2.Text;
    str := 'select * from tc_user where user_id = ''%s''  '
         + ' and user_pass = ''%s'' ';
    str := Format(str,[Trim(Edit1.Text),Trim(Edit2.Text)]);
     with adoquery1 do
     begin
        close;
        sql.Clear;
        sql.Add (str);

     end;

   try
     ADOQuery1.open;
   except
     ShowMessage('Query Open : Error'+str);
   end;

//    showmessage(Inttostr(ADOQuery1.RecordCount));
     if not ADOQuery1.Eof then
       // label2.Caption :='완료'
                        <<<< 아디패스 확인이느 했는데 어찌 할지 ㅡ.ㅡ
                        <<,,  창을닫고 메안폼을 불러야 하는데
        
     else
       //정규사용자가 아님
       label1.Caption :='사용자 ID 및 비밀번호를 확이하여 주새요';
ulogin.Free ;
ulogin := nil;    <<< 로그인창이 닫히질 않습니다
end;

end.
2  COMMENTS
  • Profile
    송영석 2008.04.02 22:57

    // 이곳에는
    program HDesk;

    Application.Initialize;
      Application.CreateForm(TUmain, Umain);
      Application.CreateForm(TForm2, Form2);
      Application.CreateForm(TDM, DM);
      Application.CreateForm(Tulogin, ulogin);
      
      Application.ShowMainForm := false; // 메인폼을 표시하지 않는다
      
      ulogin := tuLogin.Create(Application);
      try
        uLogin.ShowModal;
      
        // 로그인 성공시
        if uLogin.ModalResult = mrOk then begin
          Application.ShowMainForm := true; // 메인폼을 표시
          Application.Run; // 프로그램 실행
        end else begin
          ShowMessage('로그인 실패로 프로그램을 종료합니다.');
        end;

      finally
        uLogin.Free;
      end;


    // 로그인 유닛
    unit login;

    procedure Tulogin.Button1Click(Sender: TObject);

    ... 생략

         if not ADOQuery1.Eof then begin
            label2.Caption :='완료';
            ModalResult := mrOk;
            Close;
         end else begin
            //정규사용자가 아님
            label1.Caption :='사용자 ID 및 비밀번호를 확이하여 주세요';
            modalResult := mrCancel;
            Close;
         end;

    end;

    end.


    이영주님께서 답변다신 방법대로 하셔도 되구요..

    위와같이 하셔도 됩니다.

    다만 웹에서 친거라 에러가 안나는지는 ... 만일 에러발생한다면 리플주세요 바로 확인해서 올려드릴게요
  • Profile
    이영주 2008.03.31 11:22
    유저체크 부분, 메인프로그램부분으로 분리하시는것이 관리하기에 더 좋을겁니다.

    if Password is Correct then
      //메인프로그램에 간단한 옵션을 준다.
      winexec(pchar('MyProgram.exe '+MyOption),SW_SHOWNORMAL);
      //유저체크 프로그램은 종료
       Application.Terminate;
    else
       messageDlg('권한이 없으므로 프로그램을 중지합니다.'#13#13'사용자ID와 비밀번호를 확인하십시오.',mtErrror,[mbOK],0);
          Application.Terminate;

    메인프로그램에서는
    program MyProgram
    uses
    ...

    begin
      if paramCount > 0 then begin
         Appllication.createform(...)
         ...
         Application.run
      end;
    end.