2014-05-24 2 views
1

나쁜 영어로 죄송합니다. 먼저 로그 아웃 구문을 사용하십시오.어떻게 로그 아웃하고 델파이의 활성 양식을 닫으십시오

로그 아웃을 클릭하면 모든 활성 양식이 계속 나타나고 닫히지 않습니다. 각 양식에

procedure Tf_utama.KELUAR1Click(Sender: TObject); 
begin 
if MessageDlg('Logout ??',mtConfirmation,mbOKCancel,0)=mrOK 
then 

DATAINPUTAN1.Visible:=False; 
INFODATA1.Enabled:=False; 
TRANSAKSI.Enabled:=False; 
LAPORAN1.Enabled:=False; 
PENGATURAN1.Enabled:=False; 

f_databuku:=nil; 
f_rakbuku:=nil; 
f_permintaan_pembeli:=nil; 
f_rakbuku:=nil; 
f_pengguna:=nil; 
f_transaksi_penjualan:=nil; 
f_transaksi_pembelian:=nil; 
f_supplier:=nil; 

StatusBar1.Panels[0].Text:='Nama Pengguna :'; 
StatusBar1.Panels[1].Text:='Hak Akses :'; 
end; 

은 내가 사용하고 닫습니다 :

방법 닫고 자유 양식이 아니다
procedure Tf_caribuku.FormClose(Sender: TObject; var Action: TCloseAction); 
begin 
Action:=caFree; 
f_caribuku:=nil; 
end; 

답변

0

. nil을 양식 포인터에 할당하는 것만으로 포인터를 닫지는 않습니다. 전화 할 내용은 TForm.Close()입니다. 또한 문이 만족되면 여러 명령을 실행하려면 if MessageDlg(... 문을 begin..end; 블록으로 열어야합니다.

procedure Tf_utama.KELUAR1Click(Sender: TObject); 
begin 
    if MessageDlg('Logout ??',mtConfirmation,mbOKCancel,0) = mrOK then 
    begin 
    DATAINPUTAN1.Visible:=False; 
    INFODATA1.Enabled:=False; 
    TRANSAKSI.Enabled:=False; 
    LAPORAN1.Enabled:=False; 
    PENGATURAN1.Enabled:=False; 

    f_databuku.Close; 
    f_rakbuku.Close; 
    f_permintaan_pembeli.Close; 
    f_rakbuku.Close; 
    f_pengguna.Close; 
    f_transaksi_penjualan.Close; 
    f_transaksi_pembelian.Close; 
    f_supplier.Close; 

    StatusBar1.Panels[0].Text:='Nama Pengguna :'; 
    StatusBar1.Panels[1].Text:='Hak Akses :'; 
    end; 
end; 

또한, 당신이 만들어지지 않습니다 닫으려고 형태 중 하나가, 내가 믿는 경우가 AV 예외와 함께 실패합니다 : 그래서 당신의 코드는 다음과 같을 것이다. 이를 수행하는 더 좋은 방법은 양식 컨테이너 역할을하는 다른 클래스를 만드는 것입니다. TFormContainer, 필요에 따라 양식을 추가 및 제거 할 수 있습니다. 이렇게하면 로그 아웃시 열린 양식이 TFormContainer 클래스에있게되며 닫을 수 있습니다.

+0

오류가 발생했습니다. 모든 양식이 열려 있거나 생성되지 않았기 때문일 수 있습니다. 'TformContainer' 사용 방법은 무엇입니까? 미안 나는 아직도 그것을 얻지 않는다. –

+0

마침내 나는 이것을 해결할 수있다. 'procedure Tf_utama.KELUAR1Click (발신자 : TObject); begin MessageDlg ('Logout ??', mtConfirmation, mbOKCancel, 0) = mrOK 인 경우 begin DATAINPUTAN1.Visible : = False; INFODATA1.Enabled : = False; TRANSAKSI.Enabled : = False; LAPORAN1.Enabled : = False; PENGATURAN1.Enabled : = 틀림; f_databuku.Free; f_rakbuku.Free; f_permintaan_pembeli.Free; f_rakbuku.Free; f_pengguna.Free; f_transaksi_penjualan.Free; f_transaksi_pembelian.Free; f_supplier.Free; 끝; end; ' –

+0

SomeForm.Free를 호출하면 안됩니다. 왜? 그렇게하면 핵심 양식의 종료를 방지 할 수 있습니다. 예를 들어 최소 양식을 비우면 응용 프로그램이 닫히지 않을 것입니다. 그리고 그 형식은 TApplication 클래스가 파기에 대해 인식 할 수 없기 때문에, Someform.free를 호출하면 OnClose 또는 OnCanClose 이벤트가 발생하지 않습니다. – SilverWarior