📄 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 + -