📄 main.~pas
字号:
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 + -