안녕하세요
메인폼을 비롯해서 10개정도 폼을 사용하고 있는데요
모든폼(메인폼 포함)의 Close event에 폼.free를 모두 했는데요
실행하고 나면 폼은 없어지는데 여전히 main [Running]으로 되어있어
완전히 끝나지 않거든요
왜그런지 혹시 아래의 Main의 내용을 확인 좀......
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, Grids, DBGrids;
type
TfrmMain = class(TForm)
MainMenu1: TMainMenu;
Part1: TMenuItem;
mnPartReg: TMenuItem;
mnPartModDel: TMenuItem;
mnPartSearch: TMenuItem;
btnLogout: TButton;
DBGrid1: TDBGrid;
btnReg: TButton;
Customer1: TMenuItem;
mnCusReg: TMenuItem;
mnCusModDel: TMenuItem;
mnCusSearch: TMenuItem;
PO1: TMenuItem;
mnPOReg: TMenuItem;
mnPOModDel: TMenuItem;
POSearch: TMenuItem;
submnDateSearch: TMenuItem;
submnPOCusSearch: TMenuItem;
submnPOPartSearch: TMenuItem;
submnPOLocSearch: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
Local: TMenuItem;
N4: TMenuItem;
mnLocalReg: TMenuItem;
mnLocalModDel: TMenuItem;
mnLocalSearch: TMenuItem;
mnLocalView: TMenuItem;
Local1: TMenuItem;
Local2: TMenuItem;
Parts1: TMenuItem;
Parts2: TMenuItem;
History1: TMenuItem;
LoginOutHistory1: TMenuItem;
procedure mnPartRegClick(Sender: TObject);
procedure mnPartModDelClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnLogoutClick(Sender: TObject);
procedure btnLoginClick(Sender: TObject);
procedure mnPartSearchClick(Sender: TObject);
procedure btnRegClick(Sender: TObject);
procedure mnCusRegClick(Sender: TObject);
procedure mnCusModDelClick(Sender: TObject);
procedure mnCusSearchClick(Sender: TObject);
procedure mnPORegClick(Sender: TObject);
procedure mnPOModDelClick(Sender: TObject);
procedure submnDateSearchClick(Sender: TObject);
procedure submnPOCusSearchClick(Sender: TObject);
procedure submnPOPartSearchClick(Sender: TObject);
procedure submnPOLocSearchClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure mnLocalRegClick(Sender: TObject);
procedure Local1Click(Sender: TObject);
procedure Parts1Click(Sender: TObject);
private
{ Private declarations }
public
procedure refreshData(strAct: String);
{ Public declarations }
end;
var
frmMain: TfrmMain;
str: String;
implementation
uses
RegDelMod, Login, JaigoModule, Search, Reg, Registerinfo, CusReg,
CusModDel, CusSearch, POReg, POModDel, PODateSearch, POCusSearch,
POPartSearch, POLocSearch, SharedCode, JaigoReport, PartJaigoSearch,
PartJaigoReport, JaigoLocSearch, LocalReg, LocalJaigo, PartStock;
{$R *.DFM}
{
접속한 사람이 어떤일을 했는지를 써 넣기 위한 함수 입니다
어떠한 작업을 할 때마다 그것에 대한 내용이 추가 됩니다
}
procedure TfrmMain.refreshData(strAct: String);
begin
with Jaigo.UserTimeTable do
begin
Active := TRUE;
// 추가시키는 것은 로그인 시간을 기준으로 합니다
FindKey([Login.Logtime]);
Edit;
if StrComp(PChar(str), PChar('')) = 0 then
begin
str := '';
end
else
str := FieldByName('ACTION').Value;
// 계속적으로 값을 뒤에서 추가 시켜줍니다
FieldByName('ACTION').Value := str + strAct;
str := FieldByName('ACTION').Value;
Refresh;
Active := FALSE;
end;
end;
// 메뉴에서 파트쪽을 누르면 파트 테이블을 활성화 시키고
// 디비 그리드에 파트를 보여준다
procedure TfrmMain.mnPartRegClick(Sender: TObject);
begin
with Jaigo.PartTable do
begin
Jaigo.CustomerTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.PartSource;
DBGrid1.Columns.Items[4].Visible := FALSE;
end;
frmReg := TfrmReg.Create(Self);
frmReg.ShowModal;
frmReg.free;
end;
// 메뉴에서 파트쪽을 누르면 파트 테이블을 활성화 시키고
// 디비 그리드에 파트를 보여준다
procedure TfrmMain.mnPartModDelClick(Sender: TObject);
begin
with Jaigo.PartTable do
begin
Jaigo.CustomerTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
// First;
// DBGrid1.Columns.Items[4].Visible := FALSE;
DBGrid1.DataSource := Jaigo.PartSource;
// FieldByName('PRICE').Visible := FALSE;
end;
frmRegModDel := TfrmRegModDel.Create(Self);
frmRegModDel.ShowModal;
frmRegModDel.free;
end;
// 메뉴에서 파트쪽을 누르면 파트 테이블을 활성화 시키고
// 디비 그리드에 파트를 보여준다
procedure TfrmMain.mnPartSearchClick(Sender: TObject);
begin
with Jaigo.PartTable do
begin
Jaigo.CustomerTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
// First;
DBGrid1.DataSource := Jaigo.PartSource;
//ㅓㅓ FieldByName('PRICE').Visible := FALSE;
end;
frmSearch := TfrmSearch.Create(Self);
frmSearch.ShowModal;
frmSearch.free;
end;
// 로그 아웃 버튼이 눌려졌을 경우.
procedure TfrmMain.btnLogoutClick(Sender: TObject);
var
CurrentTime : String;
Id, Pass : String;
begin
// 로그 아웃한 시간을 사용자 시간 정보 테이블에 기록한다.
CurrentTime := frmLogin.GetCurrentDateTime;
Id := frmLogin.edtLogId.Text;
Pass := frmLogin.edtLogPass.Text;
frmLogin.LogoutTime(CurrentTime, Id, Pass);
// btnLogin.Enabled := TRUE;
btnLogout.Enabled := FALSE;
bLog := FALSE;
Close;
end;
// 다시 로그인을 했을 경우.
procedure TfrmMain.btnLoginClick(Sender: TObject);
begin
frmLogin := TfrmLogin.Create(Self);
frmLogin.ShowModal;
frmLogin.free;
// btnLogin.Enabled := FALSE;
// btnLogout.Enabled := TRUE;
end;
// 종료되면 종료시간을 테이블에 기록한다
procedure TfrmMain.FormDestroy(Sender: TObject);
var
CurrentTime : String;
Id, Pass : String;
begin
CurrentTime := frmLogin.GetCurrentDateTime;
Id := frmLogin.edtLogId.Text;
Pass := frmLogin.edtLogPass.Text;
frmLogin.LogoutTime(CurrentTime, Id, Pass);
// btnLogin.Enabled := TRUE;
self.Enabled := FALSE;
end;
// 사용자의 등록을 위한 다이얼로그를 생성한다
procedure TfrmMain.btnRegClick(Sender: TObject);
begin
frmRegister := TfrmRegister.Create(Self);
frmRegister.ShowModal;
frmRegister.free;
end;
// 메뉴에서 고객쪽을 누르면 파트 테이블을 활성화 시키고
// 디비 그리드에 고객를 보여준다
procedure TfrmMain.mnCusRegClick(Sender: TObject);
begin
with Jaigo.CustomerTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.CustomerSource;
end;
frmCusReg := TfrmCusReg.Create(Self);
frmCusReg.ShowModal;
frmCusReg.free;
end;
// 메뉴에서 고객쪽을 누르면 파트 테이블을 활성화 시키고
// 디비 그리드에 고객를 보여준다
procedure TfrmMain.mnCusModDelClick(Sender: TObject);
begin
with Jaigo.CustomerTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
// First;
DBGrid1.DataSource := Jaigo.CustomerSource;
end;
frmCusModDel := TfrmCusModDel.Create(Self);
frmCusModDel.ShowModal;
frmCusModDel.free;
end;
// 메뉴에서 고객쪽을 누르면 고객 테이블을 활성화 시키고
// 디비 그리드에 고객를 보여준다.
procedure TfrmMain.mnCusSearchClick(Sender: TObject);
begin
with Jaigo.CustomerTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
// First;
Filtered := FALSE;
DBGrid1.DataSource := Jaigo.CustomerSource;
end;
frmCusSearch := TfrmCusSearch.Create(Self);
frmCusSearch.ShowModal;
frmCusSearch.free;
end;
// 입출고 등록 버튼을 눌렀을 경우
// 위와 동일한 일을 한다.
procedure TfrmMain.mnPORegClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
jaigo.PartJaigotable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
// First;
DBGrid1.DataSource := Jaigo.POSource;
end;
frmPOReg := TfrmPOReg.Create(Self);
frmPOReg.ShowModal;
frmPOReg.free;
end;
// 입출고 수정 버튼을 눌렀을 경우
// 위와 동일한 동작을 한다.
procedure TfrmMain.mnPOModDelClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
begin
ShowMessage('수정 삭제할 것에 대한 데이터를 선택하지 않았습니다');
Active := TRUE;
exit;
end;
// First;
DBGrid1.DataSource := Jaigo.POSource;
if RecordCount = 0 then
begin
ShowMessage('테이블에 데이터가 존재하지 않습니다. 수정/삭제를 할 수 없습니다.');
exit;
end;
// edit;
end;
frmPOModDel := TfrmPOModDel.Create(Self);
frmPOModDel.ShowModal;
frmPOModDel.free;
end;
// 입출고 내역을 날짜별로 검색할 때
procedure TfrmMain.submnDateSearchClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
// First;
DBGrid1.DataSource := Jaigo.POSource;
end;
frmPODateSearch := TfrmPODateSearch.Create(Self);
frmPODateSearch.ShowModal;
frmPODateSearch.free;
end;
// 고객명으로서 입출고 내역을 검색할 때
procedure TfrmMain.submnPOCusSearchClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
DBGrid1.DataSource := Jaigo.POSource;
end;
frmPOCusSearch := TfrmPOCusSearch.Create(Self);
frmPOCusSearch.ShowModal;
frmPOCusSearch.free;
end;
// 입출고 내역을 파트 넘버로서 검색할 때
procedure TfrmMain.submnPOPartSearchClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
DBGrid1.DataSource := Jaigo.POSource;
end;
frmPOPartSearch := TfrmPOPartSearch.Create(Self);
frmPOPartSearch.ShowModal;
frmPOPartSearch.free;
end;
// Local로 입출고 내역을 검색할 때
procedure TfrmMain.submnPOLocSearchClick(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
DBGrid1.DataSource := Jaigo.POSource;
end;
frmPOLocSearch := TfrmPOLocSearch.Create(Self);
frmPOLocSearch.ShowModal;
frmPOLocSearch.free;
end;
// 폼이 닫힐 때에는 활성화 되어있는 테이블들을 모두 닫는다.
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if Jaigo.PartTable.Active = TRUE then
begin
Jaigo.PartTable.Refresh;
Jaigo.PartTable.Active := FALSE;
end;
if Jaigo.CustomerTable.Active = TRUE then
begin
Jaigo.CustomerTable.Refresh;
Jaigo.CustomerTable.Active := FALSE;
end;
if Jaigo.POTable.Active = TRUE then
begin
Jaigo.POTable.Refresh;
Jaigo.POTable.Active := FALSE;
end;
if Jaigo.PartJaigoTable.Active = TRUE then
begin
Jaigo.PartJaigoTable.Refresh;
Jaigo.PartJaigoTable.Active := FALSE;
end;
Action := cafree;
frmMain := nil;
end;
// 폼이 생성되었을 때
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// btnLogin.Enabled := FALSE;
bLog := TRUE;
btnLogout.Enabled := TRUE;
end;
// 입출고 내역을 보고자 할 때
procedure TfrmMain.N1Click(Sender: TObject);
begin
with Jaigo.POTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
Filtered := FALSE;
DBGrid1.DataSource := Jaigo.POSource;
end;
end;
// 고객 테이블을 보여준다.
procedure TfrmMain.N2Click(Sender: TObject);
begin
with Jaigo.CustomerTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.CustomerSource;
end;
end;
// 파트 테이블을 보여준다.
procedure TfrmMain.N3Click(Sender: TObject);
begin
with Jaigo.PartTable do
begin
Jaigo.CustomerTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.PartJaigoTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.PartSource;
DBGrid1.Columns.Items[4].Visible := FALSE;
end;
end;
procedure TfrmMain.mnLocalRegClick(Sender: TObject);
begin
with Jaigo.PartJaigoTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.PartJaigoSource;
end;
frmLocalReg := TfrmLocalReg.Create(Self);
frmLocalReg.ShowModal;
frmLocalReg.free;
end;
procedure TfrmMain.Local1Click(Sender: TObject);
begin
with Jaigo.PartJaigoTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.PartJaigoSource;
end;
frmLocalJaigo := TfrmLocalJaigo.Create(Self);
frmLocalJaigo.ShowModal;
frmLocalJaigo.free;
end;
procedure TfrmMain.Parts1Click(Sender: TObject);
begin
with Jaigo.PartJaigoTable do
begin
Jaigo.PartTable.Active := FALSE;
Jaigo.POTable.Active := FALSE;
Jaigo.CustomerTable.Active := FALSE;
if not Active = TRUE then
Active := TRUE;
DBGrid1.DataSource := Jaigo.PartJaigoSource;
end;
frmPartStock := TfrmPartStock.Create(Self);
frmPartStock.ShowModal;
frmPartStock.free;
end;
end.
frmMain := nil;
이부문만 빼 주세요