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

📄 roomc.~pas

📁 使用delphi自带的控件
💻 ~PAS
字号:
unit RoomC;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, ToolWin, Menus, ImgList, ActnList, TalkWithServer,
  CommonDef, Login, TypInfo;

type
  TFrmMain = class(TForm)
    mmuMain: TMainMenu;
    sbrMain: TStatusBar;
    tbrMain: TToolBar;
    pclMain: TPageControl;
    tstRoom: TTabSheet;
    tstCorrMan: TTabSheet;
    pnlRoom: TPanel;
    lvwRoom: TListView;
    pnlCorrMan: TPanel;
    lvwCorrMan: TListView;
    ImageList1: TImageList;
    altFunctions: TActionList;
    acnLogOn: TAction;
    acnLogOff: TAction;
    acnAddCorrMan: TAction;
    acnDelCorrMan: TAction;
    acnOpenRoom: TAction;
    acnAttendRoom: TAction;
    acnLeaveRoom: TAction;
    acnCloseRoom: TAction;
    tbnLogOn: TToolButton;
    tbnLogOff: TToolButton;
    tbnAddCorrMan: TToolButton;
    tbnDelCorrMan: TToolButton;
    tbnOpenRoom: TToolButton;
    tbnAttendRoom: TToolButton;
    ImageList2: TImageList;
    ToolButton7: TToolButton;
    ToolButton10: TToolButton;
    acnExit: TAction;
    acnAbout: TAction;
    miFile: TMenuItem;
    miRoom: TMenuItem;
    miHelp: TMenuItem;
    miLogOn: TMenuItem;
    miLogOff: TMenuItem;
    miExit: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    miCorrMan: TMenuItem;
    miAddCorrMan: TMenuItem;
    N8: TMenuItem;
    miDelCorrMan: TMenuItem;
    miAttendRoom: TMenuItem;
    miCloseRoom: TMenuItem;
    miLeaveRoom: TMenuItem;
    miOpenRoom: TMenuItem;
    miAbout: TMenuItem;
    acnOpenTalk: TAction;
    N15: TMenuItem;
    miOpenTalk: TMenuItem;
    pmuRoom: TPopupMenu;
    miPOpenRoom: TMenuItem;
    miPCloseRoom: TMenuItem;
    miPAttendRoom: TMenuItem;
    miPLeaveRoom: TMenuItem;
    pmuCorrMan: TPopupMenu;
    miPAddCorrMan: TMenuItem;
    N22: TMenuItem;
    miPOpenTalk: TMenuItem;
    N24: TMenuItem;
    procedure acnExitExecute(Sender: TObject);
    procedure acnAboutExecute(Sender: TObject);
    procedure acnAddCorrManExecute(Sender: TObject);
    procedure acnDelCorrManExecute(Sender: TObject);
    procedure lvwCorrManSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure sbrMainResize(Sender: TObject);
    procedure lvwRoomSelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    procedure pclMainChange(Sender: TObject);
    procedure lvwCorrManInfoTip(Sender: TObject; Item: TListItem;
      var InfoTip: String);
    procedure lvwRoomInfoTip(Sender: TObject; Item: TListItem;
      var InfoTip: String);
    procedure acnLogOnExecute(Sender: TObject);
    procedure acnLogOffExecute(Sender: TObject);
  private
    { Private declarations }
    FLogined: Boolean;
    FLoginName: string;
    FLoginDateTime: string;

    procedure AddCorrManToList(CorrMan: TMyCorrMan);
    procedure DelCorrManFromList(CorrMan: TMyCorrMan);
    procedure SetCorrManCommandStatus(Enabled: Boolean);
  protected
    procedure SetLoginName(Value: string);
  public
    { Public declarations }
    procedure DisplayHint(Sender: Tobject);
    
    property  LoginName: string read FLoginName write SetLoginName;
  end;

var
  FrmMain: TFrmMain;

implementation

uses About;

{$R *.dfm}

procedure TFrmMain.acnExitExecute(Sender: TObject);
begin
  close;
end;

procedure TFrmMain.acnAboutExecute(Sender: TObject);
begin
  frmAbout.ShowModal;
end;

/////////////////这些不是系统自带的,由用户增加/////////////////
procedure TFrmMain.AddCorrManToList(CorrMan: TMyCorrMan);
var
  ListItem: TListItem;
  Status: string;
begin
  CorrMan.EmailAddress := 'zhou@163.com';
  CorrMan.MessageCount := 10;
  ListItem := lvwCorrMan.Items.Add;
  ListItem.Caption := CorrMan.UserName;
  ListItem.SubItems.Add(CorrMan.EmailAddress);
  ListItem.SubItems.Add(IntToStr(CorrMan.MessageCount)); 
  Status := GetEnumName(TypeInfo(TCorrManStatus), Ord(CorrMan.Status));
  ListItem.SubItems.Add(Status);
end;

procedure TFrmMain.DelCorrManFromList(CorrMan: TMyCorrMan);
var
//  ListItem: TListItem;
  I: Integer;
begin
//  ListItem := lvwCorrMan.Items.Add;
  for I:=lvwCorrMan.Items.Count-1 downto 0 do
    if (lvwCorrMan.Items[I].Caption = CorrMan.UserName) then
    begin
      lvwCorrMan.Items[I].Delete;//删除当前行
    end;
end;

procedure TFrmMain.SetCorrManCommandStatus(Enabled: Boolean);
begin
  acnDelCorrMan.Enabled := Enabled;
  acnOpenTalk.Enabled := Enabled;
end;

procedure TFrmMain.DisplayHint(Sender: Tobject);
begin
  sbrMain.Panels.Items[0].Text := GetLongHint(Application.Hint);
end;

///////////////////////////////////////////////////////////////

procedure TFrmMain.acnAddCorrManExecute(Sender: TObject);
var
  UserName  : String;
  SvrResult : TSvrResult;
  MyCorrMan : TMyCorrMan;
begin
  UserName := '';
  UserName := InputBox('添加联系人', '请输入需要添加的联系人的用户名', UserName);
  //ShowMessage('你输入的联系人的用户名是' + UserName);
  if UserName = '' then
    Exit;
  //与服务器进行通信
  MyCorrMan.UserName := UserName;
  SendAddCorrManCommandToServer(SvrResult, MyCorrMan);

  //修改联系人列表
  SvrResult := srtOk;/////////////////
  if  SvrResult = srtOk then
  begin
    AddCorrManToList(MyCorrMan);
    ShowMessage('成功添加联系人'+ UserName + '到联系人列表!');
  end
  else
  begin
    ShowMessage('添加联系人'+ UserName + '到联系人列表失败!');
  end;
end;





procedure TFrmMain.acnDelCorrManExecute(Sender: TObject);
var
  I  : Integer;
  SvrResult : TSvrResult;
  MyCorrMan : TMyCorrMan;
  Tmp: Integer;

begin
  if lvwCorrMan.SelCount < 1  then
    Exit;
  Tmp := lvwCorrMan.Items.Count-1;
  for I:=0 to lvwCorrMan.Items.Count-1 do
  begin
    //ShowMessage();
    if (not lvwCorrMan.Items[I].Selected) then
      continue;

    MyCorrMan.UserName := lvwCorrMan.Items[I].Caption;

    //与服务器通信
    SendDelCorrManCommandToServer(SvrResult, MyCorrMan);

    //修改联系人列表
    SvrResult := srtOK;////////////////
    if (SvrResult = srtOK) then
    begin
      DelCorrManFromList(MyCorrMan);
      Dec(Tmp);
      ShowMessage('成功从联系人列表中删除联系人' + MyCorrMan.UserName + '!');
    end else
    begin
      ShowMessage('从联系人列表中删除联系人' + MyCorrMan.UserName + '失败!');
    end;

    if (I >= Tmp) then
      break;
  end;
end;

procedure TFrmMain.lvwCorrManSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  SelectedCount   : Integer;
  UnselectedCount : Integer;
  AllItemsCount   : Integer;
begin
  //控制菜单状态
  if (selected) then
    SetCorrManCommandStatus(selected)
  else
    SetCorrManCommandStatus(Item.ListView.SelCount > 0);
  //在状态栏上显示状态信息
  AllItemsCount   := lvwCorrMan.Items.Count;
  SelectedCount   := lvwCorrMan.SelCount;
  UnselectedCount := AllItemsCount - SelectedCount;
  sbrMain.Panels.Items[0].Text := '选择 ' + IntToStr(SelectedCount)
    + ' 个联系人对象' +  IntToStr(UnselectedCount) + ' 个未选择的联系人对象. 共 '
    + IntToStr(AllItemsCount) + ' 个联系人对象';
end;

procedure TFrmMain.FormCreate(Sender: TObject);
begin
  Application.OnHint := DisplayHint;
  LoginName := ' ';
end;

procedure TFrmMain.sbrMainResize(Sender: TObject);
begin
  sbrMain.Panels.Items[0].Width := sbrMain.Width
    - sbrMain.Panels.Items[1].Width - sbrMain.Panels.Items[2].Width;
end;

procedure TFrmMain.lvwRoomSelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
var
  SelectedCount   : Integer;
  UnselectedCount : Integer;
  AllItemsCount   : Integer;
begin
  AllItemsCount   := lvwRoom.Items.Count;
  SelectedCount   := lvwRoom.SelCount;
  UnselectedCount := AllItemsCount - SelectedCount;
  sbrMain.Panels.Items[0].Text := '选择 ' + IntToStr(SelectedCount)
    + ' 个会议对象' +  IntToStr(UnselectedCount) + ' 个未选择的会议对象. 共 '
    + IntToStr(AllItemsCount) + ' 个会议对象' ;
end;

procedure TFrmMain.pclMainChange(Sender: TObject);
begin
  if (pclMain.ActivePageIndex = 0)  then
    sbrMain.Panels.Items[1].Text := '会议'
  else
    sbrMain.Panels.Items[1].Text := '联系人';
end;

procedure TFrmMain.lvwCorrManInfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: String);
begin
  InfoTip := '称呼' + Item.Caption + #13#10
    + '邮件:' + Item.SubItems.Strings[0] + #13#10
    + '发言:' + Item.SubItems.Strings[1] + #13#10
    + '状态:' + Item.SubItems.Strings[2];
end;

procedure TFrmMain.lvwRoomInfoTip(Sender: TObject; Item: TListItem;
  var InfoTip: String);
begin
  InfoTip := '主题' + Item.Caption + #13#10
    + '状态:' + Item.SubItems.Strings[0] + #13#10
    + '发起:' + Item.SubItems.Strings[1] + #13#10
    + '等级:' + Item.SubItems.Strings[2] + #13#10
    + '人数:' + Item.SubItems.Strings[3] + #13#10
    + '开始:' + Item.SubItems.Strings[4] + #13#10
    + '备注:' + Item.SubItems.Strings[5];
end;

procedure TFrmMain.acnLogOnExecute(Sender: TObject);
var
  SvrResult: TSvrResult;
  UserName: string;
  Password: string;
begin
  if (FLogined) then
  begin
    LogoffFromServer(SvrResult, LoginName);
  end;

  if (frmLogin.ShowModal <> mrOk) then
    Exit;

  UserName := frmLogin.UserName;
  Password := frmLogin.Password;

  LoginToServer(SvrResult, UserName, Password);
  if (SvrResult = srtOk) then
    LoginName := UserName
  else
    ShowMessage('登录错误(用户名或密码错误)');
end;



procedure TFrmMain.SetLoginName(Value: string);
var
  SvrResult: TSvrResult;
  List: array of TMyCorrMan;
  Count, Size, I: Integer;
begin
  FLoginName := Value;
  if (FLoginName <> ' ') then
  begin
    FLogined := True;
    FLoginDateTime := DateTimeToStr(Now);
    Caption := Application.Title + ' - ' + FLoginName + '(已登录)';

    //to get corrman list
    Size := 1024;
    SetLength(List, Size);
    GetCorrManListFromServer(SvrResult, FLoginName, Count, List, Size);
    for I:=0 to Count-1 do
    begin
      AddCorrManToList(List[I]);
    end;
    SetLength(List, 0);
  end
  else
  begin
    FLogined := False;
    Caption := Application.Title + ' -未登录';
  end;
end;

procedure TFrmMain.acnLogOffExecute(Sender: TObject);
var
  SvrResult: TSvrResult;
begin
  if (not FLogined) then
    Exit;
  LogoffFromServer(SvrResult, LoginName);
  if (SvrResult = srtOk) then
  begin
    LoginName := ' ';
  end
  else
    ShowMessage('注销失败(网络连接失败)');
end;

end.

⌨️ 快捷键说明

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