📄 mainui.pas
字号:
unit MainUI;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls, IniFiles, ExtCtrls, Menus, db, DXClass, DXDraws,
cxStyles, cxCustomData, cxGraphics, cxFilter, cxData, cxDataStorage,
cxEdit, cxDBData, DXFonts, ImgList, dxBar, dxBarExtItems, DXSounds,
ActnList, AAFont, AACtrls, dxStatusBar, cxGridLevel, StrUtils,
cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
cxControls, cxGridCustomView, cxGrid, JvPageList, JvExControls,
JvComponent, MMSystem;
type
TRunMode = (rmDemo, rmStart, rmEnd, rmNone, rmWait);
TNumber = record
n1: integer;
n2: integer;
n3: integer;
n4: integer;
n5: integer;
n6: integer;
n7: integer;
n8: integer;
n9: integer;
n10: integer;
n11: integer;
end;
TfrmMain = class(TDXForm)
OpenDialog1: TOpenDialog;
ActionList1: TActionList;
JvPageList1: TJvPageList;
JvStandardPage1: TJvStandardPage;
JvStandardPage2: TJvStandardPage;
Panel5: TPanel;
DXWaveList1: TDXWaveList;
DXSound1: TDXSound;
DXImageList1: TDXImageList;
DXTimer1: TDXTimer;
GD1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
dxStatusBar1: TdxStatusBar;
GD1Name: TcxGridDBColumn;
GD1HandPhone: TcxGridDBColumn;
GD1UnitName: TcxGridDBColumn;
dxBarManager1: TdxBarManager;
dxBarDockControl1: TdxBarDockControl;
cxStyleRepository1: TcxStyleRepository;
cxStyle1: TcxStyle;
ImageList1: TImageList;
dxBarLargeButton1: TdxBarLargeButton;
dxBarLargeButton2: TdxBarLargeButton;
dxBarLargeButton3: TdxBarLargeButton;
dxBarLargeButton4: TdxBarLargeButton;
dxBarLargeButton5: TdxBarLargeButton;
dxBarLargeButton6: TdxBarLargeButton;
dxBarLargeButton7: TdxBarLargeButton;
dxBarLargeButton8: TdxBarLargeButton;
dxBarLargeButton9: TdxBarLargeButton;
actAppend: TAction;
actDelete: TAction;
actEdit: TAction;
actCheck: TAction;
actPrint: TAction;
actRef: TAction;
actClean: TAction;
actExit: TAction;
GD1Column1: TcxGridDBColumn;
actNextKJ: TAction;
DXFont1: TDXFont;
actDemo: TAction;
actWindow: TAction;
DXDraw1: TDXDraw;
procedure FormCreate(Sender: TObject);
procedure actExitExecute(Sender: TObject);
procedure DXDraw1Initialize(Sender: TObject);
procedure DXTimer1Timer(Sender: TObject; LagCount: Integer);
procedure DXDraw1InitializeSurface(Sender: TObject);
procedure DXDraw1FinalizeSurface(Sender: TObject);
procedure DXDraw1RestoreSurface(Sender: TObject);
procedure dxBarLargeButton6Click(Sender: TObject);
procedure actAppendExecute(Sender: TObject);
procedure actDeleteExecute(Sender: TObject);
procedure actPrintExecute(Sender: TObject);
procedure actCleanExecute(Sender: TObject);
procedure actEditExecute(Sender: TObject);
procedure actCheckExecute(Sender: TObject);
procedure actRefExecute(Sender: TObject);
procedure GD1CellDblClick(Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
procedure FormShow(Sender: TObject);
procedure actNextKJExecute(Sender: TObject);
procedure actDemoExecute(Sender: TObject);
procedure actWindowExecute(Sender: TObject);
procedure DXDraw1Finalize(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
{ Private declarations }
public
procedure InitDraw;
{ Public declarations }
end;
var
frmMain: TfrmMain;
FSurface: TDirectDrawSurface;
Frames: integer = 0;
runMode: tRunMode = rmDemo;
OpenNum: tNumber;
FAngle: Longint = 0;
JXItem: integer = 3;
ttt: Boolean = False;
Endstate: Boolean = False;
WMode: Boolean = False;
implementation
{$R *.dfm}
uses sDM, sEdit, sPublic;
procedure tfrmMain.InitDraw;
begin
dxImageList1.Items.MakeColorTable;
DXDraw1.ColorTable := dxImageList1.Items.ColorTable;
DXDraw1.DefColorTable := dxImageList1.Items.ColorTable;
DXDraw1.UpdatePalette;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
InitDraw;
Randomize;
fillmemory(@OpenNum.n1, sizeof(opennum), 0);
dxWaveList1.Items.Find('a2').Play(False);
Application.Title := Caption;
AppPath := ExtractFilePath(Application.ExeName);
end;
procedure TfrmMain.actExitExecute(Sender: TObject);
begin
ttt := True;
close;
end;
procedure TfrmMain.DXDraw1Initialize(Sender: TObject);
begin
DXDraw1.SurfaceHeight := 600;
DXDraw1.SurfaceWidth := 800;
dxTimer1.Interval := 1000 div 40;
DXTimer1.Enabled := True;
end;
procedure TfrmMain.DXTimer1Timer(Sender: TObject; LagCount: Integer);
var
vn: string;
t: Boolean;
begin
if not dxDraw1.CanDraw then Exit;
dxDraw1.Surface.Fill(0);
dxDraw1.Surface.Draw(0, 0, FSurface.ClientRect, FSurface, true);
case runMode of
rmDemo:
begin
if frames >= 2 then
begin
OpenNum.n1 := random(10);
OpenNum.n2 := random(10);
OpenNum.n3 := random(10);
OpenNum.n4 := random(10);
OpenNum.n5 := random(10);
OpenNum.n6 := random(10);
OpenNum.n7 := random(10);
OpenNum.n8 := random(10);
OpenNum.n9 := random(10);
OpenNum.n10 := random(10);
OpenNum.n11 := random(10);
frames := 0;
end
else inc(frames);
end;
rmStart:
begin
dm.OPData.RecNo := random(dm.OPData.RecordCount);
if frames >= 2 then
begin
OpenNum.n1 := random(10);
OpenNum.n2 := random(10);
OpenNum.n3 := random(10);
OpenNum.n4 := random(10);
OpenNum.n5 := random(10);
OpenNum.n6 := random(10);
OpenNum.n7 := random(10);
OpenNum.n8 := random(10);
OpenNum.n9 := random(10);
OpenNum.n10 := random(10);
OpenNum.n11 := random(10);
frames := 0;
end
else inc(frames);
end;
rmNone:
begin
FillMemory(@opennum, sizeof(opennum), 0);
frames := 0;
end;
rmEnd:
begin
frames := 0;
t := False;
if (dm.TS.RecordCount > 0) and ((jxItem = 1) or (dm.NT.RecordCount <= 0)) then
begin
dm.TS.RecNo := random(dm.TS.RecordCount);
t := dm.OPData.Locate('hp', trim(dm.TSHP.AsString), []);
dm.TS.Delete;
end
else
if (dm.NT.RecordCount > 0) then
begin
dm.nt.RecNo := random(dm.nt.RecordCount);
t := dm.OPData.Locate('hp', dm.NTHP.AsString, []);
dm.NT.Delete;
end;
if (dm.OPData.RecordCount > 0) and t then
begin
vn := rightstr('00000000000' + trim(dm.OPDataHP.AsString), 11);
opennum.n1 := strtoint(midstr(vn, 1, 1));
opennum.n2 := strtoint(midstr(vn, 2, 1));
opennum.n3 := strtoint(midstr(vn, 3, 1));
opennum.n4 := strtoint(midstr(vn, 4, 1));
opennum.n5 := strtoint(midstr(vn, 5, 1));
opennum.n6 := strtoint(midstr(vn, 6, 1));
opennum.n7 := strtoint(midstr(vn, 7, 1));
opennum.n8 := strtoint(midstr(vn, 8, 1));
opennum.n9 := strtoint(midstr(vn, 9, 1));
opennum.n10 := strtoint(midstr(vn, 10, 1));
opennum.n11 := strtoint(midstr(vn, 11, 1));
dm.OPData.Delete;
end
else
FillMemory(@opennum, sizeof(OpenNum), 0);
runMode := rmWait;
end;
end;
dxImageList1.Items.Find('Lucky').DrawWaveX(dxDraw1.Surface, 15, 115, 300, 115, 0, 12, 200, FAngle * 7);
case jxitem of
1: dxImageList1.Items.Find('一').DrawWaveX(dxDraw1.Surface, 620, 485, 130, 50, 0, 12, 200, FAngle * 7);
2: dxImageList1.Items.Find('二').DrawWaveX(dxDraw1.Surface, 620, 485, 130, 50, 0, 12, 200, FAngle * 7);
3: dxImageList1.Items.Find('三').DrawWaveX(dxDraw1.Surface, 620, 485, 130, 50, 0, 12, 200, FAngle * 7);
end;
dxImageList1.Items[OpenNum.n1].Draw(dxDraw1.Surface, 23, 268, 0);
dxImageList1.Items[OpenNum.n2].Draw(dxDraw1.Surface, 91, 268, 0);
dxImageList1.Items[OpenNum.n3].Draw(dxDraw1.Surface, 159, 268, 0);
dxImageList1.Items[OpenNum.n4].Draw(dxDraw1.Surface, 227, 268, 0);
dxImageList1.Items[OpenNum.n5].Draw(dxDraw1.Surface, 295, 268, 0);
dxImageList1.Items[OpenNum.n6].Draw(dxDraw1.Surface, 363, 268, 0);
dxImageList1.Items[OpenNum.n7].Draw(dxDraw1.Surface, 431, 268, 0);
dxImageList1.Items[OpenNum.n8].Draw(dxDraw1.Surface, 499, 268, 0);
dxImageList1.Items[OpenNum.n9].Draw(dxDraw1.Surface, 567, 268, 0);
dxImageList1.Items[OpenNum.n10].Draw(dxDraw1.Surface, 635, 268, 0);
dxImageList1.Items[OpenNum.n11].Draw(dxDraw1.Surface, 703, 268, 0);
inc(FAngle);
vn := format('%4.4d', [dm.OPData.RecordCount]);
dxFont1.TextOut(dxDraw1.Surface, 645, 540, midstr(vn, 1, 1));
dxFont1.TextOut(dxDraw1.Surface, 661, 540, midstr(vn, 2, 1));
dxFont1.TextOut(dxDraw1.Surface, 677, 540, midstr(vn, 3, 1));
dxFont1.TextOut(dxDraw1.Surface, 693, 540, midstr(vn, 4, 1));
DXDraw1.Flip;
end;
procedure TfrmMain.DXDraw1InitializeSurface(Sender: TObject);
begin
FSurface := TDirectDrawSurface.Create(DXDraw1.DDraw);
end;
procedure TfrmMain.DXDraw1FinalizeSurface(Sender: TObject);
begin
FSurface.Free;
end;
procedure TfrmMain.DXDraw1RestoreSurface(Sender: TObject);
begin
Fsurface.LoadFromFile(AppPath + 'bg.bmp');
end;
procedure TfrmMain.dxBarLargeButton6Click(Sender: TObject);
begin
if dm.cdUser.State in [dsEdit, dsInsert] then dm.cdUser.Cancel;
close;
end;
procedure TfrmMain.actAppendExecute(Sender: TObject);
begin
dm.cdUser.Append;
frmEdit.ShowModal;
dxStatusBar1.Panels[3].Text := inttostr(gd1.DataController.RecordCount);
end;
procedure TfrmMain.actDeleteExecute(Sender: TObject);
begin
if messagedlg('确定要删除这位嘉宾的资料吗?', mtwarning, [mbyes, mbno], 0) = mrYes then
begin
if dm.cdUser.RecordCount > 0 then
begin
try
dm.cdUser.Delete;
dm.cdUser.ApplyUpdates(0);
dxStatusBar1.Panels[3].Text := inttostr(gd1.DataController.RecordCount);
except
dm.cdUser.CancelUpdates;
messagedlg('删除嘉宾资料出错!', mtwarning, [mbok], 0);
end;
end;
end;
end;
procedure TfrmMain.actPrintExecute(Sender: TObject);
begin
//
end;
procedure TfrmMain.actCleanExecute(Sender: TObject);
begin
if Messagedlg('确定要删除所有嘉宾的资料吗?', mtwarning, [mbyes, mbno], 0) = mrYes then
begin
try
dm.cdUser.First;
while not dm.cdUser.Eof do dm.cduser.Delete;
dm.cduser.ApplyUpdates(0);
dxStatusBar1.Panels[3].Text := inttostr(gd1.DataController.RecordCount);
except
dm.cdUser.CancelUpdates;
messagedlg('清空数据出错!', mtwarning, [mbok], 0);
end;
end;
end;
procedure TfrmMain.actEditExecute(Sender: TObject);
begin
if dm.cdUser.RecordCount > 0 then
begin
dm.cdUser.Edit;
frmEdit.ShowModal;
end;
end;
procedure TfrmMain.actCheckExecute(Sender: TObject);
begin
dm.GetTS.Active := False;
dm.GetTS.Active := True;
if dm.GetTS.RecordCount > 0 then
TdxStatusBarTextPanelStyle(dxStatusbar1.Panels[3].PanelStyle).font.color := clRed
else
TdxStatusBarTextPanelStyle(dxStatusbar1.Panels[3].PanelStyle).font.color := clBlack;
KJRS := dm.GetKJRS;
dxStatusBar1.Panels[3].Text := inttostr(gd1.DataController.RecordCount);
if gd1.DataController.RecordCount < KJRS then
begin
Messagedlg('嘉宾人数少于奖项数!', mtwarning, [mbok], 0);
actWindow.Enabled := False;
end
else
begin
actWindow.Enabled := True;
dm.cdUser.DisableControls;
dm.OPData.Active := False;
dm.OPData.Active := True;
dm.TS.Active := False;
dm.TS.Active := True;
dm.NT.Active := False;
dm.NT.Active := True;
dm.cdUser.First;
while not dm.cdUser.Eof do
begin
dm.OPData.Append;
dm.OPDataHP.Value := trim(vartostr(dm.cdUserHandPhone.Value));
dm.OPDataTS.Value := dm.cdUserJX.Value;
dm.OPData.Post;
if dm.OPDataTS.Value then
begin
dm.TS.Append;
dm.TSHP.Value := dm.OPDataHP.Value;
dm.TSTS.Value := dm.OPDataTS.Value;
dm.TS.Post;
end
else
begin
dm.NT.append;
dm.nthp.Value := dm.OPDataHP.Value;
dm.NTTS.Value := dm.OPDataTS.Value;
dm.NT.Post;
end;
dm.cdUser.Next;
end;
dm.cdUser.EnableControls;
end;
end;
procedure TfrmMain.actRefExecute(Sender: TObject);
begin
dm.cdUser.Active := false;
dm.cdUser.Active := True;
end;
procedure TfrmMain.GD1CellDblClick(Sender: TcxCustomGridTableView;
ACellViewInfo: TcxGridTableDataCellViewInfo; AButton: TMouseButton;
AShift: TShiftState; var AHandled: Boolean);
begin
AHandled := False;
self.actEditExecute(self);
end;
procedure TfrmMain.FormShow(Sender: TObject);
begin
dxStatusBar1.Panels[3].Text := inttostr(gd1.DataController.RecordCount);
end;
procedure TfrmMain.actNextKJExecute(Sender: TObject);
begin
dec(JXItem);
FAngle := 0;
if JXItem = 0 then JXItem := 3;
dm.cdJX.Locate('id', JXItem, []);
end;
procedure TfrmMain.actDemoExecute(Sender: TObject);
begin
if runmode = rmnone then runMode := rmDemo else if runmode = rmdemo then runmode := rmNone;
end;
procedure TfrmMain.actWindowExecute(Sender: TObject);
begin
DXDraw1.Finalize;
if doFullScreen in DXDraw1.Options then
begin
RestoreWindow;
BorderStyle := bsSizeable;
DXDraw1.Options := DXDraw1.Options - [doFullScreen];
WindowState := wsMaximized;
end else
begin
StoreWindow;
BorderStyle := bsNone;
DXDraw1.Options := DXDraw1.Options + [doFullScreen];
end;
DXDraw1.Initialize;
if doFullScreen in DXDraw1.Options then
begin
jvPageList1.ActivePageIndex := 1;
FANGLE := 0;
RunMode := rmNone;
FillMemory(@OpenNum, sizeof(OpenNum), 0);
//dxWaveList1.Items.Find('a1').Stop;
dxWaveList1.Items.Find('a2').Play(false);
end
else
begin
jvPageList1.ActivePageIndex := 0;
dxWaveList1.Items.Find('a2').Stop;
//dxWaveList1.Items.Find('a1').Play(false);
end;
end;
procedure TfrmMain.DXDraw1Finalize(Sender: TObject);
begin
DXTimer1.Enabled := false;
end;
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((key = VK_RETURN) or (key = VK_SPACE)) and (jvPageList1.ActivePageIndex = 1) then
begin
case runmode of
rmStart: runmode := rmEnd;
rmDemo, rmNone, rmwait:
begin
if dm.OPData.RecordCount > 0 then
runmode := rmStart;
end;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -