2012-01-09 4 views
0

내가 (이 TEdits 및 로그인 버튼) 사용자가 자신의 계정에서 로그인 할 때 LoginForm 및 AccountForm전체 프로그램을 닫지 않고 창을 닫는 방법? 내 응용 프로그램에서

LoginForm 메인 폼으로 설정, 그것은 형태이다의 말을하자 두 가지 형태가 . 사용자가 로그인 정보를 입력하고 연결하면 AccountForm 인 새 양식이 열립니다.

전체 애플리케이션을 닫지 않고 로그인 성공시 LoginForm을 닫는 방법은 무엇입니까? 또는 아래의 코드를 사용하여 로그인 양식 만 닫고 응용 프로그램은 닫지 않는 방법을 사용하십시오.

if (not IncludeForm.sqlquery1.IsEmpty) and (isblacklisted='0') and (isactivated='1') then 
begin // Login Successful *** Show the account window 
AccountForm.Show; 
LoginFrom.Close; // <----The problem is in this line, using this line causes the whole application to close***} 
end; 

감사합니다

+0

현상금 : ". 신뢰할 수 및/또는 공식 소스에서 그리기 답을 찾고" 나는 믿을만하다. ;-) – GolezTrol

답변

6

우수 제품 Display a LogIn/Password Dialog Before the Main Form is Created의 소스 코드 hereZarko Gajic 까지 가져올 수 있습니다.

발췌 :

program PasswordApp; 

uses 
    Forms, 
    main in 'main.pas' {MainForm}, 
    login in 'login.pas' {LoginForm}; 

{$R *.res} 

begin 
    if TLoginForm.Execute then 
    begin 
    Application.Initialize; 
    Application.CreateForm(TMainForm, MainForm) ; 
    Application.Run; 
    end 
    else 
    begin 
    Application.MessageBox('You are not authorized to use the application. The password is "delphi".', 'Password Protected Delphi application') ; 
    end; 
end. 
+1

+1 TLogin 폼에 Execute 메서드를 추가하는 것이 좋습니다. 그것은 매우 특정한 형태이므로, 클래스 메소드는 할 것이지만, 나는 다른 대화 상자와 더 잘 어울리는 인스턴스 메소드로 만들고 싶습니다. 그럼에도 불구하고 좋은 해결책입니다. delphi.about.com의 기사는 일반적으로 의미가 있습니다. :) – GolezTrol

10

LoginForm 기본 폼하지 마십시오. Application.CreateForm 대신 LoginForm := TLoginForm.Create을 사용하여 loginform을 만들면 양식이 응용 프로그램 기본 양식으로 설정되지 않습니다. Application.CreateForm을 사용하여 만든 첫 번째 양식이 기본 양식입니다. 이처럼 변경 프로젝트 파일 (.DPR)을 편집 할 수 있습니다

program YourApp; 

uses 
    Forms, 
    fLoginForm in 'fLoginForm.pas' {LoginForm}, 
    fMainForm in 'fMainForm.pas' {MainForm}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.MainFormOnTaskbar := True; 
    with TLoginForm.Create(nil) do 
    try 
    ShowModal; 
    finally 
    Free; 
    end; 
    Application.CreateForm(TMainForm, MainForm); 
    Application.Run; 
end. 

또한 존재가 열려 특정 형태를 확인 자신의 응용 프로그램 메인 루프를 만들 수 있지만, 좀 더 좀 더 어렵다 및 위의 솔루션보다 취약합니다.

+6

+1 이것은 'with TMyObject.Create (..) do'가 잘 작동하는 좋은 예입니다. 당신은 능동적으로 변수를 원하지 않으므로이 작은 블록을 넘어서는 변수가 참조되지 않는다는 것을 확신 할 수 있습니다. 'fLoginForm'에서 자동으로 생성 된'LoginForm : TLoginForm' 변수가 삭제되어야한다는 것이 현명 할 것입니다. –

+2

TLoginForm에 어떤 종류의 로직을 추가 할 것입니다 :'if (ShowModal = mrOK) then ...'로그인이 성공했을 때만'MainForm'을 생성해야합니다. – kobik

+0

@kobik. 어쩌면 애플리케이션이 약간 다른 UI로 기본 폼을 표시하려고 할 수도 있지만. 또는 로그인 폼은 예를 들어 Application.Terminate를 호출 할 수 있으므로 메인 폼이 표시되지 않습니다. 그러나 나는 내 대답에서이 문제를 해결하려고 시도조차하지 못했다는 것을 인정해야한다. – GolezTrol