www.pudn.com > Roulette.rar > 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.