신인재씨 여러가지로 가르쳐 주셔서 감사합니다.
제가 여러번 소스를 검사해도 도저히 에러을 찾지 못해 할수 없이 소스를 보내게 되었습니다.
제발 가르쳐 주십시오.
unit BilliardSource;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, Db, DBTables, Grids, DBGrids, Buttons,iniFiles{,
BDE};
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
Panel2: TPanel;
Panel4: TPanel;
Splitter1: TSplitter;
Splitter2: TSplitter;
Panel5: TPanel;
ComboBox1: TComboBox;
Splitter3: TSplitter;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
Panel10: TPanel;
Panel29: TPanel;
Panel30: TPanel;
Label1: TLabel;
Label2: TLabel;
Panel3: TPanel;
Panel11: TPanel;
Panel12: TPanel;
Panel13: TPanel;
Panel14: TPanel;
Panel15: TPanel;
Panel16: TPanel;
Panel17: TPanel;
Panel18: TPanel;
Panel19: TPanel;
Panel20: TPanel;
Panel21: TPanel;
Panel22: TPanel;
Panel23: TPanel;
Panel24: TPanel;
Panel25: TPanel;
Panel26: TPanel;
Panel27: TPanel;
Panel28: TPanel;
Button1: TButton;
Label3: TLabel;
DataSource1: TDataSource;
DataSource2: TDataSource;
Table1: TTable;
Table2: TTable;
Table3: TTable;
UpDown2: TUpDown;
Panel1: TPanel;
Panel6: TPanel;
Panel7: TPanel;
Panel8: TPanel;
Panel9: TPanel;
BitBtn1: TBitBtn;
Panel31: TPanel;
Panel32: TPanel;
Panel33: TPanel;
Panel34: TPanel;
Panel35: TPanel;
TabSheet2: TTabSheet;
StringGrid1: TStringGrid;
Timer1: TTimer;
Panel36: TPanel;
Panel37: TPanel;
Panel40: TPanel;
Button3: TButton;
Edit3: TEdit;
Edit4: TEdit;
Table4: TTable;
DBGrid3: TDBGrid;
DataSource4: TDataSource;
Edit1: TEdit;
Memo1: TMemo;
Button2: TButton;
procedure ComboBox1Change(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure UpDown2Click(Sender: TObject; Button: TUDBtnType);
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure TableTimerEvent(Sender: TObject);
procedure TableCheckBoxEvent(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure Button3Click(Sender: TObject);
procedure TabSheet1Show(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Table4AfterPost(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
TableMaxNumber:Integer;
TableTimeSec:array[1..20] of Integer;
TableTimeMin:array[1..20] of Integer;
TableTimeHour:array[1..20] of Integer;
PowerOffTime:Integer;
TableGameNumber:array[1..20] of Integer;
TableTimer:array[1..20] of TTimer;
TableCheckBox:array[1..20] of TCheckBox;
StartTimeTable:array[1..20] of Boolean;
StGridSelect:array[1..20] of Boolean;
LastTimeTable:array[1..20] of String;
// SelectTable:array[1..20] of Boolean;
TableMoney:array[1..20] of Integer;
TableColculateMoney:array[1..20] of Integer;
TableIni:TIniFile;
function Colculate(k:Integer):integer;
procedure DBSave(k:Integer);
procedure PowerOffSave(k:Integer);
procedure Table1Filtering;
procedure Table2Filtering;
procedure Table3Filtering(k:integer);
procedure Table4Filtering(k:integer);
procedure DBGridSelect;
implementation
Uses BilliardConfigSource;
{$R *.DFM}
//당구비 계산
function Colculate(k:Integer):integer;
var
Money:Integer;
begin
// Money:=0;
// if (TableTimeMin[k]>5)and(TableTimeMin[k]<10) then
Money:=TableTimeMin[k]*TableMoney[k];
Colculate:=Money;
end;
procedure Table1Filtering;
begin
Form1.Table1.Filtered:=False;
Form1.Table1.Filter:='';
Form1.Table1.Filter:='(Date='''+Form1.Panel7.Caption+''')'+
'and(ColculateMoney='+''''''+')'+
'and(TableNumber='''+Form1.ComboBox1.Items[Form1.ComboBox1.Itemindex]+''')';
Form1.Table1.Filtered:=True;
end;
procedure Table2Filtering;
begin
Form1.Table2.Filtered:=False;
Form1.Table2.Filter:='';
Form1.Table2.Filter:='(Date='''+Form1.Panel7.Caption+''')'+
'and(TableNumber='''+Form1.ComboBox1.Items[Form1.ComboBox1.Itemindex]+''')';
Form1.Table2.Filtered:=True;
end;
procedure Table3Filtering(k:integer);
begin
Form1.Table3.Filtered:=False;
Form1.Table3.Filter:='(Date='''+Form1.Panel7.Caption+''')'+
'and(TableNumber='''+Form1.StringGrid1.Cells[0,k]+''')';
Form1.Table3.Filtered:=True;
end;
procedure Table4Filtering(k:integer);
begin
Form1.Table4.Filtered:=False;
Form1.Table4.Filter:='(Date='''+Form1.Panel7.Caption+''')'+
'and(TableNumber='''+Form1.StringGrid1.Cells[0,k]+''')';
Form1.Table4.Filtered:=True;
end;
procedure DBSave(k:Integer);
begin
Form1.Table3.Append;
Form1.Table3.FieldByName('TableNumber').AsString:=Form1.StringGrid1.Cells[0,k];
Form1.Table3.FieldByName('Date').AsString:=Form1.Panel7.Caption;
Form1.Table3.FieldByName('StartTime').AsString:=Form1.StringGrid1.Cells[3,k];
Form1.Table3.FieldByName('EndTime').AsString:=LastTimeTable[k];
Form1.Table3.FieldByName('GameTime').AsString:=Form1.StringGrid1.Cells[5,k];
Form1.Table3.FieldByName('GameMoney').AsInteger:=Colculate(k);
Form1.Table3.FieldByName('SigaMoney').AsInteger:=100;
Form1.Table3.FieldByName('RealMoney').AsInteger:=
Form1.Table3.FieldByName('GameMoney').AsInteger+
Form1.Table3.FieldByName('SigaMoney').AsInteger;
end;
procedure PowerOffSave(k:Integer);
begin
Form1.Table4.Edit;
Form1.Table4.FieldByName('TableNumber').AsString:=Form1.StringGrid1.Cells[0,k];
Form1.Table4.FieldByName('Date').AsString:=Form1.Panel7.Caption;
Form1.Table4.FieldByName('StartTime').AsString:=Form1.StringGrid1.Cells[3,k];
Form1.Table4.FieldByName('GameTime').AsString:=Form1.StringGrid1.Cells[5,k];
Form1.Table4.FieldByName('SigaMoney').AsInteger:=100;
Form1.Table4.FieldByName('PowerOff').AsString:='True';
end;
procedure DBGridSelect;
var
i,Table2Record:Integer;
begin
Table2Record:=0;
if not(Form1.Table2.Bof) then Form1.Table2.First;
for i:=1 to Form1.Table1.FieldByName('GameNumber').AsInteger-1 do
begin
Table2Record:=Table2Record+1;
end;
Form1.Table2.MoveBy(Table2Record);
end;
//당구시간계산
procedure TForm1.TableTimerEvent(Sender: TObject);
var
i:Integer;
begin
i:=(Sender as TTimer).Tag;
if (StartTimeTable[i]=True) and (TableCheckBox[i].Checked=True) then
begin
StringGrid1.Cells[1,i]:=' 게임중.....';
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
StringGrid1.Cells[3,i]:=TimeToStr(Time);
////////////////////////////////////////////////////////////
StringGrid1.Cells[4,i]:='';
StringGrid1.Cells[5,i]:=IntToStr(TableTimeMin[i]);
StartTimeTable[i]:=False;
end
else if (StartTimeTable[i]=False) and (TableCheckBox[i].Checked=True) then
begin
//////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
LastTimeTable[i]:=TimeToStr(Time);
/////////////////////////////////////////////////////////////
TableTimeSec[i]:=TableTimeSec[i]+1;
if TableTimeSec[i]=60 then
begin
TableTimeMin[i]:=TableTimeMin[i]+1;
StringGrid1.Cells[5,i]:=IntToStr(TableTimeMin[i]);
TableTimeSec[i]:=0;
end;
end;
end;
//테이블 현재 상황
procedure TForm1.TableCheckBoxEvent(Sender: TObject);
var
i:integer;
begin
i:=(Sender as TCheckBox).Tag;
Table3.Open;
Table4.Open;
if TableCheckBox[i].Checked=True then
begin
StartTimeTable[i]:=True;
TableTimer[i].Enabled:=True;
end
else
begin
StringGrid1.Cells[1,i]:='정지중.....';
StringGrid1.Cells[4,i]:=LastTimeTable[i];
//테이블 사용완료시 DB화일에 저장
// If TableTimeMin[i]>5 then
// begin
Table3Filtering(i);
DBSave(i);
Table3.FieldByName('GameNumber').AsInteger:=Table3.RecordCount+1;
Table3.Post;
StringGrid1.Cells[2,i]:=IntToStr(Table3.RecordCount);
Table3.Close;
// end;
TableTimeSec[i]:=0;
TableTimeMin[i]:=0;
TableTimer[i].Enabled:=False;
Table4Filtering(i);
Table4.FindLast;
Table4.Edit;
Table4.FieldByName('PowerOff').AsString:='False';
Table4.Post;
Table4.Close;
end;
end;
//계산할 테이블 선택시
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Table1.Active:=True;
Table1Filtering;
Table2.Active:=True;
Table2Filtering;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table2.Edit;
Table2.FieldByName('ColculateMoney').AsString:=Panel26.Caption;
Table2.Post;
Table1Filtering;
Table2Filtering;
end;
procedure TForm1.TabSheet1Show(Sender: TObject);
begin
Table1Filtering;
Table2Filtering;
end;
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
if ComboBox1.Text<>'' then
begin
DBGridSelect;
Panel12.Caption:=Table2.FieldByName('StartTime').AsString;
Panel14.Caption:=Table2.FieldByName('EndTime').AsString;
Panel16.Caption:=Table2.FieldByName('GameTime').AsString;
Panel20.Caption:=IntToStr(Table2.FieldByName('GameMoney').AsInteger);
// Panel22.Caption:=Table2.FieldByName('SigaMoney').AsString;
Panel24.Caption:=IntToStr(Table2.FieldByName('RealMoney').AsInteger);
Panel26.Caption:=Panel24.Caption;
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.UpDown2Click(Sender: TObject; Button: TUDBtnType);
begin
case Button of
btNext : begin
if StrToInt(Panel26.Caption)+100<=StrToInt(Panel24.Caption) then
begin
Panel26.Caption:=IntToStr(StrToInt(Panel26.Caption)+100);
Panel28.Caption:=IntToStr(StrToInt(Panel28.Caption)-100);
end;
end;
btPrev : begin
if StrToInt(Panel26.Caption)-100>=0 then
begin
Panel26.Caption:=IntToStr(StrToInt(Panel26.Caption)-100);
Panel28.Caption:=IntToStr(StrToInt(Panel28.Caption)+100);
end;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:Integer;
begin
TableIni:=TIniFile.Create('Billiard.Ini');
TableMaxNumber:=TableIni.ReadInteger('테이블','전체테이블수',10);
Table1.DatabaseName:=TableIni.ReadString('디렉토리','테이타베이스경로',
'C:My DocumentsBilliard' );
Table2.DatabaseName:=TableIni.ReadString('디렉토리','테이타베이스경로',
'C:My DocumentsBilliard' );
Table3.DatabaseName:=TableIni.ReadString('디렉토리','테이타베이스경로',
'C:My DocumentsBilliard' );
Table4.DatabaseName:=TableIni.ReadString('디렉토리','테이타베이스경로',
'C:My DocumentsBilliard' );
Timer1.Enabled:=True;
StringGrid1.RowCount:=TableMaxNumber+1;
StringGrid1.Cells[0,0]:='테이블';
for i:=1 to TableMaxNumber do
StringGrid1.Cells[0,i]:='테이블'+IntToStr(i);
StringGrid1.Cells[1,0]:='테이블상황';
for i:=1 to TableMaxNumber do
StringGrid1.Cells[1,i]:='정지중.....';
StringGrid1.Cells[2,0]:='총게임수';
StringGrid1.Cells[3,0]:='시작시간';
StringGrid1.Cells[4,0]:='종료시간';
StringGrid1.Cells[5,0]:='사용시간';
StringGrid1.Cells[6,0]:='담배';
for i:=1 to TableMaxNumber do
begin
TableTimer[i]:=TTimer.Create(Application);
TableTimer[i].Interval:=1;
TableTimer[i].Tag:=i;
TableTimer[i].Enabled:=False;
TableTimer[i].OnTimer:=TableTimerEvent;
end;
for i:=1 to TableMaxNumber do
begin
TableCheckBox[i]:=TCheckBox.Create(Application);
TableCheckBox[i].parent:=Panel36;
TableCheckBox[i].Caption:='테이블'+IntToStr(i);
TableCheckBox[i].Width:=80;
TableCheckBox[i].Height:=15;
if i<10 then
begin
TableCheckBox[i].Top:=5;
TableCheckBox[i].Left:=160+(i-1)*80;
end
else
begin
TableCheckBox[i].Top:=25;
TableCheckBox[i].Left:=160+(i-10)*80;
end;
TableCheckBox[i].Tag:=i;
TableCheckBox[i].Checked:=False;
TableCheckBox[i].OnClick:=TableCheckBoxEvent;
end;
for i:=1 to TableMaxNumber do
begin
StartTimeTable[i]:=False;
TableGameNumber[i]:=0;
TableTimeSec[i]:=1;
TableTimeMin[i]:=0;
TableTimeHour[i]:=0;
StartTimeTable[i]:=False;
StGridSelect[i]:=False;
ComboBox1.Items[i-1]:='테이블'+IntToStr(i);
j:=TableIni.ReadInteger('테이블사용료','일반테이블',800);
TableMoney[i]:=j div 10;
TableColculateMoney[i]:=0;
end;
PowerOffTime:=0;
//정전시 저장된 데이타를 보여줌
Table3.Active:=True;
Table4.Active:=True;
for i:=1 to TableMaxNumber do
begin
Table4.Filtered:=False;
Table4.Filter:='TableNumber='''+'테이블'+IntToStr(i)+'''';
Table4.Filtered:=True;
Memo1.Lines.Add(Table4.FieldByName('PowerOff').AsString);
if Table4.FieldByName('PowerOff').AsString='True' then
begin
TableCheckBox[i].Checked:=True;
TableTimer[i].Enabled:=True;
StringGrid1.Cells[1,i]:=' 게임중.....';
StringGrid1.Cells[2,i]:=
IntToStr(Table4.FieldByName('GameNumber').AsInteger);
StringGrid1.Cells[3,i]:=Table4.FieldByName('StartTime').AsString;
StringGrid1.Cells[4,i]:=Table4.FieldByName('EndTime').AsString;
StringGrid1.Cells[5,i]:=Table4.FieldByName('GameTime').AsString;
TableTimeMin[i]:=StrToInt(StringGrid1.Cells[5,i]);
end;
end;
Table3.Active:=False;
Table4.Active:=False;
PowerOffTime:=0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
i:Integer;
begin
Panel7.Caption:=DateToStr(Date);
////////////////////////////////////////////////////
////////////////////////////////////////////////////
Panel9.Caption:=TimeToStr(Time);
////////////////////////////////////////////////////
//정전시
PowerOffTime:=PowerOffTime+1;
if PowerOffTime = 1 then
begin
Table3.Open;
Table4.Open;
for i:=1 to TableMaxNumber do
begin
if TableCheckBox[i].Checked=True then
begin
Table4Filtering(i);
Table4.FindLast;
PowerOffSave(i);
Table3Filtering(i);
Table4.FieldByName('GameNumber').AsInteger:=Table3.RecordCount;
Table4.Post;
end;
end;
PowerOffTime:=0;
Table3.Close;
Table4.Close;
end;
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
tmp:string;
begin
with StringGrid1.Canvas do
begin
Tmp:=StringGrid1.Cells[ACol,ARow];
Font.Size:=10;
Font.Name:='굴림';
Font.Style:=[];
if (ACol>0) and (ARow>0) then
begin
Font.Color:=clBlack;
Brush.Color:=clWhite;
end;
FillRect(Rect);
TextRect(Rect,(Rect.Right-Rect.Left-TextWidth(tmp)) Div 2 +
Rect.Left,Rect.Top+4,Tmp);
end;
end;
//환경설정 폼 보임
procedure TForm1.Button3Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:Integer;
begin
Table3.Open;
Table4.Open;
for i:=1 to TableMaxNumber do
begin
if TableCheckBox[i].Checked=True then
begin
Table4Filtering(i);
Table4.FindLast;
PowerOffSave(i);
Table4.Post;
end;
end;
Table3.Close;
Table4.Close;
TableIni.WriteInteger('테이블','전체테이블수',TableMaxNumber);
{
TableIni.WriteString('디렉토리','테이타베이스경로',Table1.DatabaseName);
TableIni.WriteString('디렉토리','테이타베이스경로',Table2.DatabaseName);
TableIni.WriteString('디렉토리','테이타베이스경로',Table3.DatabaseName);
}
TableIni.Free;
end;
procedure TForm1.Table4AfterPost(DataSet: TDataSet);
begin
// DbiSaveChanges(Table4.Handle);
end;
end.
> 신인재씨 여러가지로 가르쳐 주셔서 감사합니다.
> 제가 여러번 소스를 검사해도 도저히 에러을 찾지 못해 할수 없이 소스를 보내게 되었습니다.
> 제발 가르쳐 주십시오.
>
음 어떤 에러가 나는지 알려 주셨으면 상당히 빠른 답변이 될뻔했습니다.
BDE api중에 TIME이란 자료형을 쓰는 멍청한 넘이 있더군요
따라서 SysUtils에서의 Time함수와 BDE에서 TIME이란 자료형이 중복
명칭이 되더군요....
아래와 같이 Time함수와 이름만 다른 함수를 따로 코딩하여
사용하시는게 방법일꺼 같군요..............
function HoonTime: TDateTime;
var
SystemTime: TSystemTime;
begin
GetLocalTime(SystemTime);
with SystemTime do
Result := EncodeTime(wHour, wMinute, wSecond, wMilliSeconds);
end;
도움이 되셨길...........