📄 player.pas
字号:
unit player;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, ActnMan, ComCtrls, ToolWin, ActnCtrls, ActnMenus,
Grids, DB, StdCtrls, ExtCtrls;
type
TPlayerForm = class(TForm)
ActionManager1: TActionManager;
Action1: TAction;
Action2: TAction;
Action3: TAction;
ActionMainMenuBar1: TActionMainMenuBar;
StatusBar1: TStatusBar;
Action4: TAction;
Action5: TAction;
ListView1: TListView;
Action6: TAction;
Timer1: TTimer;
AddAction: TAction;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Action1Execute(Sender: TObject);
procedure Action2Execute(Sender: TObject);
procedure Action3Execute(Sender: TObject);
procedure Action4Execute(Sender: TObject);
procedure Action5Execute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Action6Execute(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure AddActionExecute(Sender: TObject);
private
{ Private declarations }
FLastPlayerUpdatetime : TDateTime;
procedure ClearListView;
public
{ Public declarations }
procedure UpDatePlayerList();
end;
var
PlayerForm: TPlayerForm;
implementation
uses DM1, main, TltConst, playeredit;
{$R *.dfm}
procedure TPlayerForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
PlayerForm := nil;
Action := caFree;
end;
procedure TPlayerForm.Action1Execute(Sender: TObject);
var
CPlayerEditInfo : TPlayerEditInfo;
CListItem : TListItem;
R : TRect;
begin
//增加玩家,提示编辑框
if rltInterpreter = nil then Exit;
FillChar(CPlayerEditInfo, sizeof(CPlayerEditInfo), #0);
CPlayerEditInfo.EditFlag := efNewID;
CPlayerEditInfo := rltInterpreter.CallPlayerEdit(CPlayerEditInfo);
CPlayerEditInfo.EditFlag := efCreatePlayer;
if EditPlayer(CPlayerEditInfo) then begin
CPlayerEditInfo := rltInterpreter.CallPlayerEdit(CPlayerEditInfo);
if CPlayerEditInfo.EditFlag = efError then begin
Application.MessageBox('创建用户失败', '用户', 0);
end else begin
UpDatePlayerList;
CListItem := ListView1.FindCaption(0, CPlayerEditInfo.PlayerInfo.ID, false, true, true);
if Assigned(CListItem) then begin
CListItem.ListView.SetFocus;
CListItem.Focused := true;
CListItem.Selected := true;
// CListItem.ListView.Scroll(100,100);
CListItem.ListView.Scroll(CListItem.Left,CListItem.Top-CListItem.ListView.Height div 2);
end;
end;
end;
//提交结果
//返回结果
end;
procedure TPlayerForm.Action2Execute(Sender: TObject);
var
CPlayerEditInfo : TPlayerEditInfo;
CListItem : TListItem;
begin
//增加玩家,提示编辑框
if rltInterpreter = nil then Exit;
if ListView1.Selected = nil then Exit;
CPlayerEditInfo.PlayerInfo := TPlayerInfo((ListView1.Selected.Data)^);
if IDYes <> MessageBox(Handle, '是否删除用户?','', MB_YESNO) then Exit;
CPlayerEditInfo.EditFlag := efDeletePlayer;
CPlayerEditInfo:= rltInterpreter.CallPlayerEdit(CPlayerEditInfo);
if CPlayerEditInfo.EditFlag = efError then begin
Application.MessageBox('删除用户失败', '用户', 0);
end else begin
ListView1.DeleteSelected;
end;
end;
procedure TPlayerForm.Action3Execute(Sender: TObject);
var
CPlayerEditInfo : TPlayerEditInfo;
begin
//增加玩家,提示编辑框
if rltInterpreter = nil then Exit;
if ListView1.Selected = nil then Exit;
CPlayerEditInfo.PlayerInfo := TPlayerInfo((ListView1.Selected.Data)^);
CPlayerEditInfo.EditFlag := efEditPlayer;
if EditPlayer(CPlayerEditInfo) then begin
CPlayerEditInfo := rltInterpreter.CallPlayerEdit(CPlayerEditInfo);
if CPlayerEditInfo.EditFlag = efError then begin
Application.MessageBox('修改用户失败', '用户', 0);
end else begin
UpDatePlayerList;
end;
end;
end;
procedure TPlayerForm.Action4Execute(Sender: TObject);
begin
//下载用户列表
if rltInterpreter = nil then Exit;
end;
procedure TPlayerForm.Action5Execute(Sender: TObject);
begin
//上传用户列表;
if rltInterpreter = nil then Exit;
end;
procedure TPlayerForm.FormCreate(Sender: TObject);
begin
if rltInterpreter = nil then Exit;
// rltInterpreter.CallPlayerEdit()
end;
procedure TPlayerForm.UpDatePlayerList;
var
I :integer;
APlayerList : TPlayerList;
CListItem : TListItem;
CPlayerInfo : TPlayerInfo;
CPPlayerInfo : PPlayerInfo;
begin
FillChar(APlayerList, sizeof(APlayerList), #0);
APlayerList.Size := 0;
APlayerList.Flag := PLFLastChangePlayer;
APlayerList.LastUpdate := FLastPlayerUpdatetime;
APlayerList.Data := nil;
APlayerList := rltInterpreter.CallGetPlayerList(APlayerList);
for I := 0 to APlayerList.PlayerCount-1 do begin
CPlayerInfo := PPlayerInfo(Pchar(APlayerList.Data)+I * sizeof(tplayerinfo))^;
CListItem := ListView1.FindCaption(0, CPlayerInfo.ID, false, true, true);
if CListItem = nil then begin
CListItem := ListView1.Items.Add;
with CListItem, CPlayerInfo do begin
Caption := ID;
SubItems.Add(UserName);
SubItems.Add(password);
SubItems.Add(IntToStr(money));
SubItems.Add(DateTimeToStr(LastActiveTime));
new(CPPlayerInfo);
Data := CPPlayerInfo;
CPPlayerInfo^ := CPlayerInfo;
end;
end else begin with CListItem, CPlayerInfo do begin
Caption := ID;
SubItems[0] := (UserName);
SubItems[1] := (password);
SubItems[2] := (IntToStr(money));
SubItems[3] :=(DateTimeToStr(LastActiveTime));
PPlayerInfo(Data)^ := CPlayerInfo;
end;
end;
end;
StatusBar1.Panels[0].Text := '玩家数:'+ IntToStr(ListView1.Items.Count);
if APlayerList.Data<>nil then
FreeMem(APlayerList.data);
FLastPlayerUpdatetime := APlayerList.LastUpdate;
end;
procedure TPlayerForm.Action6Execute(Sender: TObject);
begin
if rltInterpreter = nil then Exit;
ClearListView;
if PlayerForm = nil then Exit;
if rltInterpreter = nil then Exit;
FLastPlayerUpdatetime := 0;
UpDatePlayerList;
end;
procedure TPlayerForm.Timer1Timer(Sender: TObject);
begin
if PlayerForm = nil then Exit;
if rltInterpreter = nil then Exit;
UpDatePlayerList;
end;
procedure TPlayerForm.FormDestroy(Sender: TObject);
var
I : integer;
begin
while ListView1.Items.Count>0 do
begin
if ListView1.Items[0].Data <> nil then
Dispose(PPlayerInfo(ListView1.Items[0].Data));
ListView1.Items.Delete(0);
end;
end;
procedure TPlayerForm.ClearListView;
begin
while ListView1.Items.Count>0 do
begin
if ListView1.Items[0].Data <> nil then
Dispose(PPlayerInfo(ListView1.Items[0].Data));
ListView1.Items.Delete(0);
end;
end;
procedure TPlayerForm.AddActionExecute(Sender: TObject);
var
CPlayerEditInfo : TPlayerEditInfo;
Value : String;
begin
//增加玩家,提示编辑框
if rltInterpreter = nil then Exit;
if ListView1.Selected = nil then Exit;
CPlayerEditInfo.PlayerInfo := TPlayerInfo((ListView1.Selected.Data)^);
Value := '0';
if Inputquery('充值','【'+CPlayerEditInfo.PlayerInfo.ID+'】充值金额',Value) then begin
CPlayerEditInfo.EditFlag := efAddMoney;
try
CPlayerEditInfo.PlayerInfo.money := StrToInt(Value);
except
MessageBox(Handle, '输入错误','', MB_ICONERROR);
Exit;
end;
CPlayerEditInfo := rltInterpreter.CallPlayerEdit(CPlayerEditInfo);
if CPlayerEditInfo.EditFlag = efError then begin
Application.MessageBox('修改用户失败', '用户', 0);
end else begin
UpDatePlayerList;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -