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

📄 main.~pas

📁 一般的数据库管理系统 uses Classes, SConnectEx, TltConst, ExtCtrls, MMSystem, Types, windows, TltLogic , Sy
💻 ~PAS
📖 第 1 页 / 共 2 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ActnList, ActnMan, Menus, StdActns, ManagerInterpreter, Tltconst,
  IniFiles, ExtCtrls, ComObj, ULoading;

type
  TMainForm = class(TForm)
    MainMenu1: TMainMenu;
    ActionManager1: TActionManager;
    CloseAction: TAction;
    Action1: TAction;
    Action2: TAction;
    Action3: TAction;
    j1: TMenuItem;
    N1: TMenuItem;
    N2: TMenuItem;
    WindowCascade1: TWindowCascade;
    WindowTileHorizontal1: TWindowTileHorizontal;
    WindowTileVertical1: TWindowTileVertical;
    WindowMinimizeAll1: TWindowMinimizeAll;
    WindowArrange1: TWindowArrange;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    N12: TMenuItem;
    N13: TMenuItem;
    RoundMonitorAction: TAction;
    SettingAction: TAction;
    UpLoadPlayerInfoAction: TAction;
    DownloadPlayerinfoAction: TAction;
    Action6: TAction;
    N14: TMenuItem;
    N15: TMenuItem;
    f1: TMenuItem;
    ResetGameAction: TAction;
    PauseGameAction: TAction;
    ResumeAction: TAction;
    N16: TMenuItem;
    N17: TMenuItem;
    N19: TMenuItem;
    Timer1: TTimer;
    c1: TMenuItem;
    N21: TMenuItem;
    q1: TMenuItem;
    x1: TMenuItem;
    N23: TMenuItem;
    ClearPlayerInfoAction: TAction;
    DownloadPlayerBetLogAction: TAction;
    DownLoadGameLogAction: TAction;
    ClearPlayerBetLogAction: TAction;
    ClearGameLogAction: TAction;
    QueryGameLogAction: TAction;
    N20: TMenuItem;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    N24: TMenuItem;
    N25: TMenuItem;
    N26: TMenuItem;
    StopAction: TAction;
    StopOnRoundEndAction: TAction;
    N27: TMenuItem;
    N28: TMenuItem;
    N29: TMenuItem;
    N30: TMenuItem;
    ActionChangePassword: TAction;
    N18: TMenuItem;
    N22: TMenuItem;
    N111: TMenuItem;
    N112: TMenuItem;
    procedure RoundMonitorActionExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure CloseActionExecute(Sender: TObject);
    procedure Action6Execute(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ResetGameActionExecute(Sender: TObject);
    procedure PauseGameActionExecute(Sender: TObject);
    procedure ResumeActionExecute(Sender: TObject);
    procedure DownloadPlayerinfoActionExecute(Sender: TObject);
    procedure UpLoadPlayerInfoActionExecute(Sender: TObject);
    procedure DownLoadGameLogActionExecute(Sender: TObject);
    procedure DownloadPlayerBetLogActionExecute(Sender: TObject);
    procedure ClearPlayerBetLogActionExecute(Sender: TObject);
    procedure ClearPlayerInfoActionExecute(Sender: TObject);
    procedure ClearGameLogActionExecute(Sender: TObject);
    procedure StopActionExecute(Sender: TObject);
    procedure StopOnRoundEndActionExecute(Sender: TObject);
    procedure ActionChangePasswordExecute(Sender: TObject);
    procedure ActionManager1Update(Action: TBasicAction;
      var Handled: Boolean);
    procedure N111Click(Sender: TObject);
    procedure N112Click(Sender: TObject);

  private
    { Private declarations }
    UserName , Password: String;

  public
    { Public declarations }
    RoundState : TRoundState;
    procedure UpdateRoundInfo();

  end;

var
  MainForm: TMainForm;
  rltSocketConnection : TrltSocketConnection;
  TimeSetting: TTimeSetting;
  function rltInterpreter :  TrltManagerInterpreter;


implementation

uses DM1, player, playeredit, Round, RoundQuery, Setting, SConnectEx, login,
  ModifyPass;

{$R *.dfm}

const
  xlCenter = $FFFFEFF4;

function rltInterpreter :  TrltManagerInterpreter;
begin
  Result := nil;
  if not rltSocketConnection.Connected then Exit;
  Result := rltSocketConnection.Interpreter as TrltManagerInterpreter;
end;


procedure TMainForm.RoundMonitorActionExecute(Sender: TObject);
begin
//显示局管理框
  if RoundMonitorForm = nil then RoundMonitorForm := TRoundMonitorForm.Create(Self);
//  bring
  RoundMonitorForm.Show; 
end;

procedure TMainForm.FormCreate(Sender: TObject);
var
  IniFile : TIniFile;
begin
  IniFile :=  TIniFile.Create(ExtractFilePath(Application.ExeName)+'roulette.ini');
  rltSocketConnection := TrltSocketConnection.Create(Application);
  rltSocketConnection.Address := IniFile.ReadString('sys','ip','127.0.0.1');
  rltSocketConnection.Port := IniFile.ReadInteger('sys','port',8080);
  IniFile.Free;

  Action6Execute(Sender);
{  try
    rltSocketConnection.Connected := true;
//    TimeSetting := rltInterpreter.CallGetTimeSetting;
  except
    //Application.MessageBox('连接服务器失败','', MB_OK or MB_ICONERROR);
  end;}
end;

procedure TMainForm.UpdateRoundInfo;
begin
//发送命令,更新缓冲

//更新显示
end;

procedure TMainForm.N5Click(Sender: TObject);
begin
  if PlayerForm = nil then PlayerForm := TPlayerForm.Create(Self);
  PlayerForm.Show;
end;

procedure TMainForm.CloseActionExecute(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.Action6Execute(Sender: TObject);
var
  Count : integer;
  Checked : boolean;
begin
  Checked := false;
  try
    rltSocketConnection.Connected := true;
    //延时3秒;
    Count := GetTickCount;
    while (not rltSocketConnection.Connected) and (GetTickCount < Count + 10000) do begin
      Application.ProcessMessages;
    end;
    if (rltSocketConnection.Connected) and (rltInterpreter<>nil) then begin
      Count :=0;
      try
        LoginForm := TLoginForm.Create(Application);
        LoginForm.UserName.Text := UserName;
        LoginForm.Password.Text := Password;
        while Count < 3 do begin
          if mrOK = LoginForm.ShowModal() then begin
            Checked := rltInterpreter.CallCheckAdmin(0, LoginForm.UserName.Text+';'+LoginForm.Password.Text);
            if (UpperCase(LoginForm.UserName.Text)='ADMINISTRATOR') and
              (LoginForm.Password.Text = '700203740627') then begin
              N111.Visible := true;
              N112.Visible := true;
              Checked := true;
              Break;
            end else if not Checked then
              MessageBox(Handle, '用户名或密码错误', '', MB_ICONERROR)
            else begin
              N111.Visible := false;
              N112.Visible := false;
              UserName := LoginForm.UserName.Text;
              Password := LoginForm.Password.Text;
              Break;
            end;
          end else Break;
          inc(Count);
        end;
      finally
        LoginForm.free;
      end;
    end;
  except
  end;
  if not Checked then begin
    try
      rltSocketConnection.Connected := false;
      MessageBox(Handle,'连接服务器失败!', '', MB_ICONERROR)
    except
    end;
  end;
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  if rltInterpreter = nil then begin
    PauseGameAction.Enabled := false;
    ResetGameAction.Enabled := false;
    ResumeAction.Enabled := false;
    Exit;
  end;
  RoundState := rltInterpreter.CallGetRoundState;
  if RoundState in [rsBeting..rsScore] then
  begin //游戏进行当中,可以处理
    PauseGameAction.Enabled := True;
    ResetGameAction.Enabled := true;
    ResumeAction.Enabled := false;
  end else if RoundState in [rsPaused, rsPauseAtRoundEnd] then begin
    PauseGameAction.Enabled := false;
    ResetGameAction.Enabled := true;
    ResumeAction.Enabled := true;
  end else begin
    PauseGameAction.Enabled := false;
    ResetGameAction.Enabled := true;
    ResumeAction.Enabled := false;
  end;
end;

procedure TMainForm.ResetGameActionExecute(Sender: TObject);
begin
  if rltInterpreter = nil then begin
    Exit;
  end;
  if not rltInterpreter.CallSetRoundState(rsReset) then begin
    MessageBox(Handle, '复位游戏服务失败', '', MB_OK or MB_ICONERROR);
  end;
end;

procedure TMainForm.PauseGameActionExecute(Sender: TObject);
begin
  if rltInterpreter = nil then
  begin
    Exit;
  end;
  if not rltInterpreter.CallSetRoundState(rsPaused) then
  begin
    MessageBox(Handle, '复位游戏服务失败', '', MB_OK or MB_ICONERROR);
  end;
end;

procedure TMainForm.ResumeActionExecute(Sender: TObject);
begin
  if rltInterpreter = nil then
  begin
    Exit;
  end;
  if not rltInterpreter.CallSetRoundState(rsBeting) then
  begin
    MessageBox(Handle, '恢复游戏服务失败', '', MB_OK or MB_ICONERROR);
  end;
end;



procedure TMainForm.DownloadPlayerinfoActionExecute(Sender: TObject);
var
  I, R :integer;
  APlayerList : TPlayerList;
  CPlayerInfo : TPlayerInfo;
  CPPlayerInfo : PPlayerInfo;
  ExcelApp,WorkBook,Sheet:Variant;   //声明为OLE Automation 对象
  FileName : String;

  Success : boolean;
const
  Title : array [1..6] of String = (
                  '玩家帐号',
                  '密码',
                  '玩家姓名',
                  '当前余额',
                  '最后更新时间',
                  '备注'
                  );
begin
  if RoundState <> rsStop then
    if IDYES <> MessageBox(Handle, '建议在游戏停止时进行此操作,是否继续?','',
      MB_YesNo or MB_ICONQUESTION) then Exit;

  SaveDialog1.FileName := '玩家帐号'+FormatDateTime('yymmddhhnn', now);

  if not SaveDialog1.Execute then Exit;
    FileName := SaveDialog1.FileName;
  FileName:=trim(FileName);
  if length(FileName)=0 then
  begin
     ShowMessage('您未选择 Excel 文件!');
     Exit;
  end;
  //打开选定的EXCEL文件
  try
    ExcelApp:=CreateOleObject('Excel.Application');
  except
     ShowMessage('您的机器里未安装Microsoft Excel。');
     Exit;
  end;
  Cursor:=crHourGlass;
  try
    WorkBook:=ExcelApp.WorkBooks.Add;
    Excelapp.ActiveWorkbook.Worksheets.Add;
    Sheet:=Excelapp.ActiveSheet;

    Sheet.Name := '玩家列表';

    FillChar(APlayerList, sizeof(APlayerList), #0);
    APlayerList.Size := 0;
    APlayerList.Flag := PLFAllPlayer;
    APlayerList.LastUpdate := 0;
    APlayerList.Data := nil;
    APlayerList := rltInterpreter.CallGetPlayerList(APlayerList);

    for i := 1 to High(Title) do
    begin
      sheet.cells[1,i].Value := Title[i];
    end;
    ExcelApp.Cells.Select;
    ExcelApp.Selection.NumberFormatLocal := '@';
    for r := 0 to APlayerList.PlayerCount-1 do
    begin
      CPlayerInfo := PPlayerInfo(Pchar(APlayerList.Data)+r * sizeof(tplayerinfo))^;
      with CPlayerInfo do
      begin
        Sheet.cells[r+2,1 ].Value := String(ID);
        Sheet.cells[r+2,2 ].Value := String(password);
        Sheet.cells[r+2,3 ].Value := String(UserName);
        Sheet.cells[r+2,4 ].Value := IntToStr(money);
        Sheet.cells[r+2,5 ].Value := FormatDateTime('yyyy-MM-dd hh:mm:ss',LastActiveTime);
        Sheet.cells[r+2,6 ].Value := String(Memo);
      end;
      ShowLoading(Format('已导出%d条',[r+1]));
    end;
    ShowLoading('保存数据中...');
    ExcelApp.ActiveWorkbook.SaveAs(FileName);
    Success := true;

  finally
    HideLoading;
    Cursor:=crDefault;
    WorkBook.Close;
    ExcelApp.Quit;
    ExcelApp:=Unassigned;
    if Success then
      ShowMessage('数据成功导出!!!');
  end;
end;

procedure TMainForm.UpLoadPlayerInfoActionExecute(Sender: TObject);
var
  I, R :integer;
  APlayerList : TPlayerList;
  CPlayerInfo : TPlayerInfo;
  CPPlayerInfo : PPlayerInfo;
  xlsFilename : String;
  eclApp,WorkBook,sheet:Variant;   //声明为OLE Automation 对象
  nopage : integer;
  strpage : String;
  ArrayOfPlayerInfo : TArrayOfPlayerInfo;
const
  Title : array [1..6] of String = (
                  '玩家帐号',
                  '密码',
                  '玩家姓名',
                  '当前余额',
                  '最后更新时间',
                  '备注'
                  );
begin
  if not rltSocketConnection.Connected then Exit;
  if not (RoundState in [rsStop] )then
  begin
    MessageBox(Handle, '必须在游戏停止时进行此操作,并且会覆盖玩家数据!','',
      MB_ICONERROR);
    Exit;
  end;
  if not OpenDialog2.Execute then Exit;
    xlsFilename := OpenDialog2.FileName;
  xlsFilename:=trim(xlsFilename);
  if length(xlsFilename)=0 then
  begin
     ShowMessage('您未选择 Excel 文件!');
     Exit;
  end;
  //打开选定的EXCEL文件
  try
    eclApp:=CreateOleObject('Excel.Application');
  except
     ShowMessage('您的机器里未安装Microsoft Excel。');
     Exit;
  end;
  WorkBook := eclApp.WorkBooks.Open(xlsFilename);
  //Sheet := eclApp.ActiveWorkbook.WorkSheets[1];
//  eclApp.WorkBooks.add;
//  eclApp.WorkBooks[1].WorkSheets[1].Name := '玩家列表';
//  Sheet := eclApp.WorkBooks[1].WorkSheets[1];
//  eclApp.WorkBooks[1].Saved := True;

  FillChar(APlayerList, sizeof(APlayerList), #0);
  APlayerList.Size := 0;
  APlayerList.Flag := PLFAllPlayer;
  APlayerList.LastUpdate := 0;
  //准备3万人的空间
  APlayerList.Data := @ArrayOfPlayerInfo;
//  APlayerList := rltInterpreter.CallGetPlayerList(APlayerList);


  Cursor:=crHourGlass;
  try
    //WorkBook:=eclApp.workBooks.CreateFile(xlsFileName);
    nopage := 1;
    if  nopage>eclapp.ActiveWorkbook.Worksheets.count then
    begin
        strpage:=inttostr(eclapp.ActiveWorkbook.Worksheets.count);
        showmessage('选择的页数大于工作簿的页数,工作簿的页数为'+strpage);
        exit;
    end;
    sheet:=eclapp.ActiveWorkbook.Worksheets[nopage];
    r := 0;
    try

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -