?? umainfrm.pas
字號:
unit uMainFrm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DBClient, ExtCtrls, RzPanel, RzCommon, Menus, RzStatus, RzTabs, ImgList,
StdCtrls, RzLabel, Grids, DBGridEh, RzButton, RzCmboBx, Mask, RzEdit,
PrnDbgeh;
type
TMainFrm = class(TForm)
MainMenu1: TMainMenu;
F1: TMenuItem;
X1: TMenuItem;
RzPanel1: TRzPanel;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
TabSheet2: TRzTabSheet;
ImageList1: TImageList;
GroupBox1: TGroupBox;
RzLabel1: TRzLabel;
RzLabel2: TRzLabel;
btnCalc: TRzBitBtn;
btnClear: TRzBitBtn;
DBGridEh1: TDBGridEh;
GroupBox2: TGroupBox;
btnIn: TRzButton;
btnOut: TRzButton;
btnPrint: TRzButton;
btnRemove: TRzButton;
RzLabel3: TRzLabel;
RzLabel4: TRzLabel;
cmbBegin: TRzComboBox;
RzLabel5: TRzLabel;
cmbEnd: TRzComboBox;
btnResult: TRzButton;
DBGridEh2: TDBGridEh;
GroupBox3: TGroupBox;
cmbCount: TRzComboBox;
RzLabel6: TRzLabel;
RzLabel7: TRzLabel;
DBGridEh3: TDBGridEh;
RzLabel8: TRzLabel;
btnVerify: TRzButton;
RzLabel9: TRzLabel;
DBGridEh4: TDBGridEh;
labResult: TRzLabel;
DBGridEh5: TDBGridEh;
GroupBox4: TGroupBox;
RzLabel10: TRzLabel;
eNo: TRzEdit;
eRed1: TRzEdit;
eRed2: TRzEdit;
eRed3: TRzEdit;
eRed4: TRzEdit;
eRed5: TRzEdit;
eRed6: TRzEdit;
RzLabel11: TRzLabel;
RzLabel12: TRzLabel;
btnAdd: TRzButton;
od1: TOpenDialog;
sd1: TSaveDialog;
PrintDBGridEh1: TPrintDBGridEh;
procedure RedClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnClearClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnCalcClick(Sender: TObject);
procedure btnRemoveClick(Sender: TObject);
procedure cmbBeginChange(Sender: TObject);
procedure btnResultClick(Sender: TObject);
procedure cmbCountChange(Sender: TObject);
procedure btnVerifyClick(Sender: TObject);
procedure DBGridEh1GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure DBGridEh5GetCellParams(Sender: TObject; Column: TColumnEh;
AFont: TFont; var Background: TColor; State: TGridDrawState);
procedure btnAddClick(Sender: TObject);
procedure btnInClick(Sender: TObject);
procedure btnOutClick(Sender: TObject);
procedure btnPrintClick(Sender: TObject);
private
RedBalls: array [1..33] of TRzPanel;
iCount: Integer;
iMin, iMax: Integer;
iBegin, iEnd: Integer;
procedure UpdateUI;
procedure GetMinMax;
procedure GetBeginEnd;
procedure FillBeginEnd;
procedure GetMatrix(ACount: Integer);
procedure InitcdsResult;
procedure InitcdsVerify;
public
{ Public declarations }
end;
var
MainFrm: TMainFrm;
implementation
uses uDm, CHListDataSet, CHMessageUtils, CHCheckUtils, DateUtils, PrViewEh;
{$R *.dfm}
procedure TMainFrm.UpdateUI;
var
i: Integer;
begin
iCount := 0;
for i:= 1 to 33 do begin
if RedBalls[i].Tag <> 0 then Inc(iCount);
if RedBalls[i].Tag = 0 then RedBalls[i].Color := clWhite
else RedBalls[i].Color := clFuchsia;
end;
RzLabel2.Caption := format('已選擇 %d 個紅球', [iCount]);
if (iCount >= iMin) and (iCount <= iMax) then
btnCalc.Enabled := true
else
btnCalc.Enabled := false;
end;
procedure TMainFrm.RedClick(Sender: TObject);
begin
with Sender as TRzPanel do
if Tag = 0 then Tag := 1 else Tag := 0;
UpdateUI;
end;
procedure TMainFrm.btnClearClick(Sender: TObject);
var
i: Integer;
begin
for i:=1 to 33 do RedBalls[i].Tag := 0;
UpdateUI;
end;
procedure TMainFrm.FormCreate(Sender: TObject);
var
i: Integer;
begin
InitcdsResult;
InitcdsVerify;
GetMinMax;
GetBeginEnd;
RzLabel1.Caption := format('請選擇 %d-%d 個紅球', [iMin, iMax]);
FillBeginEnd;
for i:= iMin to iMax do cmbCount.Add(IntToStr(i));
if cmbCount.Items.Count > 0 then cmbCount.ItemIndex := 0 else cmbCount.ItemIndex := -1;
cmbCountChange(Sender);
for i:=1 to 33 do begin
RedBalls[i] := TRzPanel.Create(GroupBox1);
RedBalls[i].Parent := GroupBox1;
RedBalls[i].Caption := format('%d', [i]);
RedBalls[i].Height := 20;
RedBalls[i].Width := 20;
RedBalls[i].BorderOuter := fsFlat;
RedBalls[i].Color := clWhite;
RedBalls[i].Top := (i div 21) * (RedBalls[i].Height-1) + 36;
if i > 20 then
RedBalls[i].Left := (i - 20) * (RedBalls[i].Width-1) - 3
else
RedBalls[i].Left := i * (RedBalls[i].Width-1) - 3;
RedBalls[i].OnClick := RedClick;
end;
btnRemoveClick(Sender);
btnClearClick(Sender);
TabSheet1.Caption := '矩'#13#10'陣'#13#10'計'#13#10'算';
TabSheet2.Caption := '歷'#13#10'史'#13#10'數'#13#10'據';
RzPageControl1.ActivePageIndex := 0;
end;
procedure TMainFrm.FormDestroy(Sender: TObject);
var
i: Integer;
begin
for i:=1 to 33 do RedBalls[i].Free;
end;
procedure TMainFrm.btnCalcClick(Sender: TObject);
var
i, j: Integer;
v: Variant;
lds: TCHListDataSet;
begin
dm.query.Close;
dm.query.SQL.Text := format('select * from 旋轉矩陣 where 球數=%d order by ID', [iCount]);
dm.query.Open;
v := VarArrayCreate([1, iCount], varInteger);
j := 1;
for i:=1 to 33 do
if RedBalls[i].Tag <> 0 then begin
v[j] := StrToInt(RedBalls[i].Caption);
Inc(j);
end;
i := 0;
lds := TCHListDataSet.Create;
try
lds.AddField('序號', 6);
lds.AddField('號1', 6);
lds.AddField('號2', 6);
lds.AddField('號3', 6);
lds.AddField('號4', 6);
lds.AddField('號5', 6);
lds.AddField('號6', 6);
while not dm.query.Eof do begin
Inc(i);
lds.AddItem(IntToStr(i));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號1').AsInteger]));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號2').AsInteger]));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號3').AsInteger]));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號4').AsInteger]));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號5').AsInteger]));
lds.AddSubItem(IntToStr(v[dm.query.FieldByName('號6').AsInteger]));
dm.query.Next;
end;
dm.cdsTemp.LoadFromStream(lds.GetStream);
finally
lds.Free;
end;
end;
procedure TMainFrm.GetMinMax;
begin
iMin := 0;
iMax := 0;
dm.query.Close;
dm.query.SQL.Text := 'select min(球數), max(球數) from 旋轉矩陣';
dm.query.Open;
if not dm.query.Eof then begin
iMin := dm.query.Fields[0].AsInteger;
iMax := dm.query.Fields[1].AsInteger;
end;
end;
procedure TMainFrm.btnRemoveClick(Sender: TObject);
var
lds: TCHListDataSet;
begin
lds := TCHListDataSet.Create;
try
lds.AddField('序號', 6);
lds.AddField('號1', 6);
lds.AddField('號2', 6);
lds.AddField('號3', 6);
lds.AddField('號4', 6);
lds.AddField('號5', 6);
lds.AddField('號6', 6);
dm.cdsTemp.LoadFromStream(lds.GetStream);
finally
lds.Free;
end;
end;
procedure TMainFrm.GetBeginEnd;
begin
iBegin := 0;
iEnd := 0;
dm.query.Close;
dm.query.SQL.Text := 'select min(期數), max(期數) from 歷史數據';
dm.query.Open;
if not dm.query.Eof then begin
iBegin := dm.query.Fields[0].AsInteger;
iEnd := dm.query.Fields[1].AsInteger;
end;
end;
procedure TMainFrm.FillBeginEnd;
begin
dm.query.Close;
dm.query.SQL.Text := 'select 期數 from 歷史數據 order by 期數';
dm.query.Open;
while not dm.query.Eof do begin
cmbBegin.Items.Add(dm.query.Fields[0].AsString);
cmbEnd.Items.Add(dm.query.Fields[0].AsString);
dm.query.Next;
end;
if cmbBegin.Items.Count > 0 then
cmbBegin.ItemIndex := 0
else
cmbBegin.ItemIndex := -1;
cmbEnd.ItemIndex := cmbBegin.ItemIndex;
end;
procedure TMainFrm.cmbBeginChange(Sender: TObject);
begin
cmbEnd.ItemIndex := cmbBegin.ItemIndex;
end;
procedure TMainFrm.btnResultClick(Sender: TObject);
var
z6, z5, z4: Integer;
lds: TCHListDataSet;
procedure CompareResult(i1, i2, i3, i4, i5, i6: Integer);
var i, r: Integer;
begin
z6 := 0;
z5 := 0;
z4 := 0;
if dm.cdsTemp.RecordCount > 0 then dm.cdsTemp.First;
while not dm.cdsTemp.Eof do begin
r := 0;
for i:=1 to 6 do begin
if i1 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
if i2 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
if i3 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
if i4 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
if i5 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
if i6 = dm.cdsTemp.Fields[i].AsInteger then Inc(r);
end;
if r = 4 then Inc(z4);
if r = 5 then Inc(z5);
if r = 6 then Inc(z6);
dm.cdsTemp.Next;
end;
end;
begin
if cmbEnd.ItemIndex < cmbBegin.ItemIndex then begin
ErrorMsg('起始期數不能大于截至期數');
Exit;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -