⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainui.pas

📁 一个动画抽奖程序
💻 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 + -