Bläddra i källkod

备份

Signed-off-by: cmg <ceo@wswin.cn>
cmg 6 år sedan
förälder
incheckning
eadeeb22a1

+ 115 - 2
Client/Group/GroupProcess.pas

@@ -96,10 +96,69 @@ type
     procedure Excute(AData: ISuperObject); override;
   end;
 
+  /// <summary>
+  /// Ⱥ×é½ûÑÔ
+  /// </summary>
+  TForbidAddResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TForbidAddP = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TForbidDelResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TForbidDelP = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TForbidListResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TForbidGetResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  /// <summary>
+  /// Ⱥ×鹫¸æ
+  /// </summary>
+  TNoticeAddResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TNoticeUpdateResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TNoticeDelResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+  TNoticeGetResponse = class(TBaseProcess)
+  public
+    procedure Excute(AData: ISuperObject); override;
+  end;
+
+
+
 function ManagersConvertToStr(AManagers: TSuperArray): string;
 
 function MembersConvertToStr(AJoUser: ISuperObject): string;
 
+
 implementation
 
 uses
@@ -165,8 +224,7 @@ end;
 
 { TNoProcess }
 
-
-constructor TBaseProcess.Create(AClient: TGroupClient);
+
constructor TBaseProcess.Create(AClient: TGroupClient);
 begin
   FClient := AClient;
 end;
@@ -643,6 +701,61 @@ begin
   end;
 end;
 
+
+
+procedure TForbidAddResponse.Excute(AData: ISuperObject);
+begin
+
+end;
+
+
procedure TForbidAddP.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TForbidDelResponse.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TForbidDelP.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TForbidListResponse.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TForbidGetResponse.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TNoticeAddResponse.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TNoticeUpdateResponse.Excute(AData: ISuperObject);
+
begin
+
+end;
+
+
procedure TNoticeDelResponse.Excute(AData: ISuperObject);
+begin
+
+end;
+
+procedure TNoticeGetResponse.Excute(AData: ISuperObject);
+begin
+
+end;
+
+
+
+
 end.
 
 

+ 41 - 2
Client/Group/GroupProtocols.pas

@@ -90,9 +90,48 @@ begin
   FProtocols.AddObject(MARK_MK_RESPONSE, TBaseProcess.Create(AClient));
   FProtocols.AddObject(MARK_MK_B, TMessageMiscBroadcast.Create(AClient));
 //  FProtocols.AddObject(MEMBER_GS_REQUEST, TBaseProcess.Create(nil));
-  FProtocols.AddObject(USER_LI_RESPONSE, TGetMyGroupsResponse.Create(AClient));        
+  FProtocols.AddObject(USER_LI_RESPONSE, TGetMyGroupsResponse.Create(AClient));
   FProtocols.AddObject(FILE_UPLOADED_BROADCAST, TFileDownloadBroadcast.Create(AClient));
   FProtocols.AddObject(HISTORY_H_R, TNewOfflineMessageResponse.Create(AClient));
+
+//  FProtocols.AddObject(FORBID_ADD_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(FORBID_ADD_RESPONSE, TForbidAddResponse.Create(AClient));
+  FProtocols.AddObject(FORBID_ADD_FAIL, TBaseProcess.Create(AClient));
+  FProtocols.AddObject(FORBID_ADD_P2P, TForbidAddP.Create(AClient));
+
+//  FProtocols.AddObject(FORBID_DEL_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(FORBID_DEL_RESPONSE, TForbidDelResponse.Create(AClient));
+  FProtocols.AddObject(FORBID_DEL_FAIL, TBaseProcess.Create(AClient));
+  FProtocols.AddObject(FORBID_DEL_P2P, TForbidDelP.Create(AClient));
+
+//  FProtocols.AddObject(FORBID_LIST_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(FORBID_LIST_RESPONSE, TForbidListResponse.Create(AClient));
+  FProtocols.AddObject(FORBID_LIST_FAIL, TBaseProcess.Create(AClient));
+
+  //  FProtocols.AddObject(FORBID_GET_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(FORBID_GET_RESPONSE, TForbidGetResponse.Create(AClient));
+  FProtocols.AddObject(FORBID_GET_FAIL, TBaseProcess.Create(AClient));
+
+//  FProtocols.AddObject(NOTICE_ADD_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(NOTICE_ADD_RESPONSE, TNoticeAddResponse.Create(AClient));
+  FProtocols.AddObject(NOTICE_ADD_FAIL, TBaseProcess.Create(AClient));
+  FProtocols.AddObject(NOTICE_ADD_BROADCAST, TNoticeAddResponse.Create(AClient));
+
+  //  FProtocols.AddObject(NOTICE_UPDATE_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(NOTICE_UPDATE_RESPONSE, TNoticeUpdateResponse.Create(AClient));
+  FProtocols.AddObject(NOTICE_UPDATE_FAIL, TBaseProcess.Create(AClient));
+  FProtocols.AddObject(NOTICE_UPDATE_BROADCAST, TNoticeUpdateResponse.Create(AClient));
+
+//  FProtocols.AddObject(NOTICE_DEL_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(NOTICE_DEL_RESPONSE, TNoticeDelResponse.Create(AClient));
+  FProtocols.AddObject(NOTICE_DEL_FAIL, TBaseProcess.Create(AClient));
+  FProtocols.AddObject(NOTICE_DEL_BROADCAST, TNoticeDelResponse.Create(AClient));
+
+//  FProtocols.AddObject(NOTICE_GET_REQUEST, TBaseProcess.Create(nil));
+  FProtocols.AddObject(NOTICE_GET_RESPONSE, TNoticeGetResponse.Create(AClient));
+  FProtocols.AddObject(NOTICE_GET_FAIL, TBaseProcess.Create(AClient));
+  
+
 end;
 
 destructor TGroupProtocol.Destroy;
@@ -119,7 +158,7 @@ begin
     (FProtocols.Objects[i] as TBaseProcess).Excute(ja.O[1])
   except
     on E: Exception do
-      Error(E.Message+AData, 'TGroupProtocol.Proccess('+AData+')');
+      Error(E.Message+AData, 'TGroupProtocol.Proccess(' + AData + ')');
   end;
 end;
 

+ 78 - 4
Client/Group/GroupUtility.pas

@@ -109,6 +109,7 @@ const
   MEMBER_APPLY_RESPONSE: string = 'm.apply.r';
   MEMBER_APPLY_FAIL: string = 'm.apply.f';
   MEMBER_APPLY_P2P: string = 'm.apply.p';
+
   // 审核
   // q										{id:'', group:{id:'', apply:{id:'', uid:'', msg:''}, reply:{id:'', uid:'', ret:0, msg}}}
   //	ret:
@@ -122,6 +123,79 @@ const
   MEMBER_REPLY_FAIL: string = 'm.reply.f';
   MEMBER_REPLY_P2P: string = 'm.reply.p';
 
+  // 添加禁言(群管理)
+	// q  {id:'', group:{id:'', uid:'', time:'', rule:''}};
+	// r  {id:'', ret:0, group:{id:'', uid:'', time:'', rule:''}};
+	// f  {id:'', ret:1, data: {}}
+  // p  {id:'', group:{id:'', uid:'', time:'', rule:''}};
+  FORBID_ADD_REQUEST: string = 'fbd.add.q';
+  FORBID_ADD_RESPONSE: string = 'fbd.add.r';
+  FORBID_ADD_FAIL: string = 'fbd.add.f';
+  FORBID_ADD_P2P: string = 'fbd.add.p';
+
+  // 删除禁言(群管理)
+	// q  {id:'', group:{id:'', uid:''}};
+	// r  {id:'', ret:0, group:{id:'', uid:''}};
+	// f  {id:'', ret:1, data: {}}
+  // p  {id:'', group:{id:'', uid:''}};
+  FORBID_DEL_REQUEST: string = 'fbd.del.q';
+  FORBID_DEL_RESPONSE: string = 'fbd.del.r';
+  FORBID_DEL_FAIL: string = 'fbd.del.f';
+  FORBID_DEL_P2P: string = 'fbd.del.p';
+
+  // 禁言列表(群管理)
+	// q  {id:'', group:{id:'', members: []}};
+	// r  {id:'', ret:0, group:{id:'', members: [{uid:'', time:'', rule:''}]}};
+  FORBID_LIST_REQUEST: string = 'fbd.list.q';
+  FORBID_LIST_RESPONSE: string = 'fbd.list.r';
+  FORBID_LIST_FAIL: string = 'fbd.list.f';
+
+  // 禁言列表(群用户)
+	// q  {id:'', group:{id:'', uid:''}};
+	// r  {id:'', ret:0, group:{id:'', uid:'', time:'', rule:''}};
+  FORBID_GET_REQUEST: string = 'fbd.get.q';
+  FORBID_GET_RESPONSE: string = 'fbd.get.r';
+  FORBID_GET_FAIL: string = 'fbd.get.f';
+
+  // 添加公告(群管理)
+	// q  {id:'', group:{id:'', nid:'', top:'', title:'', content:'', author:'', time:''}};
+	// r  {id:'', ret:0, group:{id:'', nid:'', top:'', title:'', content:'', time:'', author:''}};
+	// f  {id:'', ret:1, data: {}}
+	// b  {id:'', group:{id:'', nid:'', top:'', title:'', content:'', time:'', author:''}};
+  NOTICE_ADD_REQUEST: string = 'ntc.add.q';
+  NOTICE_ADD_RESPONSE: string = 'ntc.add.r';
+  NOTICE_ADD_FAIL: string = 'ntc.add.f';
+  NOTICE_ADD_BROADCAST: string = 'ntc.add.b';
+
+  // 更新公告(群管理)
+	// q  {id:'', group:{id:'', nid:'', top:'', title:'', content:'', author:'', time:''}};
+	// r  {id:'', ret:0, group:{id:'', top:'', nid:'', title:'', content:'', time:'', author:''}};
+	// f  {id:'', ret:1, data: {}}
+	// b  {id:'', group:{id:'', nid:'', top:'', title:'', content:'', time:'', author:''}};
+  NOTICE_UPDATE_REQUEST: string = 'ntc.update.q';
+  NOTICE_UPDATE_RESPONSE: string = 'ntc.update.r';
+  NOTICE_UPDATE_FAIL: string = 'ntc.update.f';
+  NOTICE_UPDATE_BROADCAST: string = 'ntc.update.b';
+
+  // 删除公告(群管理)
+	// q  {id:'', group:{id:'', notices:[nid:'', nid'']}};
+	// r  {id:'', ret:0, group:{id:'', notices:[nid:'', nid'']}};
+	// f  {id:'', ret:0, data: {}}
+	// b  {id:'', group:{id:'', nid:''}};
+  NOTICE_DEL_REQUEST: string = 'ntc.del.q';
+  NOTICE_DEL_RESPONSE: string = 'ntc.del.r';
+  NOTICE_DEL_FAIL: string = 'ntc.del.f';
+  NOTICE_DEL_BROADCAST: string = 'ntc.del.b';
+
+  // 公告列表
+	// q  {id:'', group:{id:'', page:'1', count:'10', notices:[]}};
+	// r  {id:'', group:{id:'', page:'1', count:'10', notices:[{nid:'', top:'', title:'', content:'', author:'', time:''}]}};
+	// f  {id:'', ret:0, data: {}}
+	// b  {id:'', group:{id:'', members: [{id:'', alias:''}]}};
+  NOTICE_GET_REQUEST: string = 'ntc.get.q';
+  NOTICE_GET_RESPONSE: string = 'ntc.get.r';
+  NOTICE_GET_FAIL: string = 'ntc.get.f';
+
   // 邀请加入
   // q  "id":"","group":{"id":"","members":[], "operator":{"id":"","msg":""}}}
   // r
@@ -162,10 +236,10 @@ const
   MARK_A_Q: string = 'mi.a.q';
   MARK_A_R: string = 'mi.a.r';
 
-  // 用户群组
-  // r(send)			{id:'', groups:[]}
-  MEMBER_GS_REQUEST: string = 'u.gs.q';
-  MEMBER_GS_RESPONSE: string = 'u.gs.r';
+//  // 用户群组
+//  // r(send)			{id:'', groups:[]}
+//  MEMBER_GS_REQUEST: string = 'u.gs.q';
+//  MEMBER_GS_RESPONSE: string = 'u.gs.r';
 
   // 请求群列表
   USER_LI_REQUEST: string = 'u.li.q';

+ 1 - 1
Client/Group/TeamsAdapter.pas

@@ -46,7 +46,7 @@ uses
   MainFrm, Windows, xFonts, Dialogs, GroupConfig, GroupService, RealICQUtils,
   BaseService, MessagesHander, RealICQUtility;
 
-  {$DEFINE GroupV3.2+}
+{$DEFINE GroupV3.2+}
 
 { TTeamsAdapter }
 

+ 22 - 18
Client/MainFrm.dfm

@@ -66,12 +66,10 @@ object MainForm: TMainForm
     object lblSearchResult: TLabel
       Left = 1
       Top = 0
-      Width = 156
-      Height = 162
+      Width = 60
+      Height = 12
       Align = alClient
       Caption = #26080#25628#32034#32467#26524
-      ExplicitWidth = 60
-      ExplicitHeight = 12
     end
     object ScrollBoxSearchUser: TScrollBox
       Left = 1
@@ -3629,7 +3627,7 @@ object MainForm: TMainForm
               Left = 192
               Top = 4
               Width = 405
-              Height = 22
+              Height = 21
               ItemsEx = <
                 item
                   Caption = 'about:blank'
@@ -6463,6 +6461,10 @@ object MainForm: TMainForm
             object tsContacters: TTabSheet
               Caption = #25105#30340#32852#31995#20154
               OnResize = tsContactersResize
+              ExplicitLeft = 0
+              ExplicitTop = 0
+              ExplicitWidth = 0
+              ExplicitHeight = 0
               object pnlToolBar: TPanel
                 Left = 0
                 Top = 0
@@ -7851,16 +7853,14 @@ object MainForm: TMainForm
                     object LblSearchHint: TLabel
                       Left = 1
                       Top = 0
-                      Width = 198
-                      Height = 201
+                      Width = 108
+                      Height = 12
                       Align = alClient
                       Alignment = taCenter
                       Caption = #27809#26377#31526#21512#26465#20214#30340#35760#24405
                       Color = clWhite
                       ParentColor = False
                       Layout = tlCenter
-                      ExplicitWidth = 108
-                      ExplicitHeight = 12
                     end
                     object ImgLogining: TImage
                       Left = 37
@@ -9965,6 +9965,10 @@ object MainForm: TMainForm
             object tsCustomerService: TTabSheet
               Caption = #20540#29677#31995#32479
               ImageIndex = 1
+              ExplicitLeft = 0
+              ExplicitTop = 0
+              ExplicitWidth = 0
+              ExplicitHeight = 0
               object pnlCustomerServiceStatus: TPanel
                 Left = 0
                 Top = 280
@@ -10578,7 +10582,7 @@ object MainForm: TMainForm
     Left = 463
     Top = 441
     Bitmap = {
-      494C010108000900E40420002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010108000900040520002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       00000000000036000000280000008000000060000000010020000000000000C0
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -13138,7 +13142,7 @@ object MainForm: TMainForm
     Left = 367
     Top = 440
     Bitmap = {
-      494C010106000900E40410001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010106000900040510001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000002000000001002000000000000020
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000010185A0018299C002139
@@ -13538,7 +13542,7 @@ object MainForm: TMainForm
     Left = 400
     Top = 440
     Bitmap = {
-      494C010101000400E40410001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010101000400040510001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -13712,7 +13716,7 @@ object MainForm: TMainForm
     Left = 496
     Top = 442
     Bitmap = {
-      494C010102000400E40410001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010102000400040510001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -14092,7 +14096,7 @@ object MainForm: TMainForm
     Left = 366
     Top = 408
     Bitmap = {
-      494C010102000400E40410001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010102000400040510001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -14235,7 +14239,7 @@ object MainForm: TMainForm
     Left = 311
     Top = 473
     Bitmap = {
-      494C010103000400E40410001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010103000400040510001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000400000001000000001002000000000000010
       0000000000000000000000000000000000000000000000000000000000000000
       0000949494009494940094949400949494009494940094949400949494009494
@@ -14380,7 +14384,7 @@ object MainForm: TMainForm
     Left = 335
     Top = 440
     Bitmap = {
-      494C010105000900E40418001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010105000900040518001800FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       0000000000003600000028000000600000003000000001002000000000000048
       0000000000000000000000000000000000000000000000000000000000000000
       0000000000000000000000000000000000000000000000000000000000000000
@@ -15257,7 +15261,7 @@ object MainForm: TMainForm
     Left = 280
     Top = 72
     Bitmap = {
-      494C010106000900E4040B000B00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C01010600090004050B000B00FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       00000000000036000000280000002C000000160000000100200000000000200F
       00000000000000000000000000000000000000000000000000008CA5C6001852
       B5001839C6001831BD001839C6001852B5008CA5C60000000000000000000000
@@ -15396,7 +15400,7 @@ object MainForm: TMainForm
     Left = 312
     Top = 72
     Bitmap = {
-      494C010106000900E40409000900FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
+      494C010106000900040509000900FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
       000000000000360000002800000024000000120000000100200000000000200A
       00000000000000000000000000000000000000000000F7F7F7002163B5001842
       C6002139C6001842C6002163B500F7F7F7000000000000000000F7F7F7002984

+ 17 - 0
Client/MainFrm.pas

@@ -64,6 +64,7 @@ const
   //VideoBorderMiddle: String = 'Images\VideoBorderMiddle.bmp';
   //VideoBorderSmall: String = 'Images\VideoBorderSmall.bmp';
 
+  DefaultTeamPicture: string = 'Images\Small\TeamHead.png';
   DefaultPictureSecurity: string = 'Images\Small\Security.bmp';
   DefaultPicture: string = 'Images\Small\DefaultHeadImage_96.png';
   DefaultPictureBig44: string = 'Images\Small\DefaultHeadImage_44.png';
@@ -1117,6 +1118,9 @@ type
     FTalkingFormTop: Integer;
     FTalkingFormWidth: Integer;
     FTalkingFormHeight: Integer;
+
+    FTalkingRightWidth: Integer;
+
     FSMSFormLeft, FSMSFormTop, FSMSFormWidth, FSMSFormHeight: Integer;
     FConfirmSendOfflineFile: Boolean;
     FShowMainFormOnStart: Boolean;
@@ -1414,6 +1418,9 @@ type
     property TalkingFormTop: Integer read FTalkingFormTop write FTalkingFormTop;
     property TalkingFormWidth: Integer read FTalkingFormWidth write FTalkingFormWidth;
     property TalkingFormHeight: Integer read FTalkingFormHeight write FTalkingFormHeight;
+
+    property TalkingRightWidth: Integer read FTalkingRightWidth write FTalkingRightWidth;
+
     property SMSFormLeft: Integer read FSMSFormLeft write FSMSFormLeft;
     property SMSFormTop: Integer read FSMSFormTop write FSMSFormTop;
     property SMSFormWidth: Integer read FSMSFormWidth write FSMSFormWidth;
@@ -3380,6 +3387,13 @@ begin
     FTalkingFormWidth := DefaultConfigNode.ChildNodes.FindNode('TalkingFormWidth').Attributes['Value'];
     FTalkingFormHeight := DefaultConfigNode.ChildNodes.FindNode('TalkingFormHeight').Attributes['Value'];
 
+    if not Assigned(DefaultConfigNode.ChildNodes.FindNode('TalkingRightWidth')) then
+    begin
+      DefaultConfigNode.AddChild('TalkingRightWidth').Attributes['Value'] := 0;
+      XMLDocument.SaveToFile();
+    end;
+    FTalkingRightWidth := DefaultConfigNode.ChildNodes.FindNode('TalkingRightWidth').Attributes['Value'];
+
     if not Assigned(DefaultConfigNode.ChildNodes.FindNode('SMSFormLeft')) then
     begin
       DefaultConfigNode.AddChild('SMSFormLeft').Attributes['Value'] := -1;
@@ -3533,6 +3547,9 @@ begin
     DefaultConfigNode.ChildNodes.FindNode('TalkingFormTop').Attributes['Value'] := FTalkingFormTop;
     DefaultConfigNode.ChildNodes.FindNode('TalkingFormWidth').Attributes['Value'] := FTalkingFormWidth;
     DefaultConfigNode.ChildNodes.FindNode('TalkingFormHeight').Attributes['Value'] := FTalkingFormHeight;
+
+    DefaultConfigNode.ChildNodes.FindNode('TalkingRightWidth').Attributes['Value'] := FTalkingRightWidth;
+
     DefaultConfigNode.ChildNodes.FindNode('SMSFormLeft').Attributes['Value'] := FSMSFormLeft;
     DefaultConfigNode.ChildNodes.FindNode('SMSFormTop').Attributes['Value'] := FSMSFormTop;
     DefaultConfigNode.ChildNodes.FindNode('SMSFormWidth').Attributes['Value'] := FSMSFormWidth;

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
Client/NXSQ.dproj


+ 1 - 0
Client/SMSFrm.pas

@@ -648,6 +648,7 @@ begin
     FLVTeamMembers.ShowEmailButton := False;
     FLVTeamMembers.ShowCameraButton := False;
     FLVTeamMembers.ShowAddFriendButton := False;
+    FLVTeamMembers.ShowWatchword := False;
 
     FLVTeamMembers.ChangeUIColor(MainForm.UIMainColor);
      {$endregion}

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 5011 - 4873
Client/TalkingFrm.dfm


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1345 - 1718
Client/TalkingFrm.pas


+ 13 - 4
Client/VCardFrm.pas

@@ -29,6 +29,7 @@ type
     FQRCodeBitmap: TBitmap;
     FSaveQRCodeBitmap: TBitmap;
     FQRColor: TColor;
+    FQRBackColor: TColor;
     procedure Update;
     procedure SetData(Value: string);
     function GetData_Default: String;
@@ -82,6 +83,9 @@ begin
   FQRCodeBitmap := TBitmap.Create;
   FSaveQRCodeBitmap := TBitmap.Create;
   FQRColor := $009B3D26;
+
+      FQRBackColor := clWhite;
+
   CanResizeWindow := False;
   SkinName := AnsiReplaceText(MainForm.SkinName, 'MainForm', '');
   ChangeUIColor(MainForm.UIMainColor);
@@ -140,7 +144,8 @@ procedure TVCardForm.pb1Paint(Sender: TObject);
 var
   Scale: Double;
 begin
-  pb1.Canvas.Brush.Color := FormColor;
+  //pb1.Canvas.Brush.Color := FormColor;
+  pb1.Canvas.Brush.Color := FQRBackColor;
   pb1.Canvas.FillRect(Rect(0, 0, pb1.Width, pb1.Height));
   if ((FQRCodeBitmap.Width > 0) and (FQRCodeBitmap.Height > 0)) then
   begin
@@ -277,7 +282,8 @@ begin
                QRCode.Data := GetData_Default;
     end;
     QRCode.Encoding := TQRCodeEncoding(4);
-    QRCode.QuietZone := 4;
+    //QRCode.QuietZone := 4;
+    QRCode.QuietZone := 1;
     FQRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
     FSaveQRCodeBitmap.SetSize(QRCode.Rows, QRCode.Columns);
     for Row := 0 to QRCode.Rows - 1 do
@@ -286,12 +292,14 @@ begin
       begin
         if (QRCode.IsBlack[Row, Column]) then
         begin
-          FQRCodeBitmap.Canvas.Pixels[Column, Row] := FQRColor;
+          //FQRCodeBitmap.Canvas.Pixels[Column, Row] := FQRColor;
+          FQRCodeBitmap.Canvas.Pixels[Column, Row] := clgray;
           FSaveQRCodeBitmap.Canvas.Pixels[Column, Row] := clBlack;
         end
         else
         begin
-          FQRCodeBitmap.Canvas.Pixels[Column, Row] := FormColor;
+          //FQRCodeBitmap.Canvas.Pixels[Column, Row] := FormColor;
+          FQRCodeBitmap.Canvas.Pixels[Column, Row] := FQRBackColor;
           FSaveQRCodeBitmap.Canvas.Pixels[Column, Row] := clWindow;
         end;
       end;
@@ -300,6 +308,7 @@ begin
     QRCode.Free;
   end;
   Invalidate;
+  pb1.Invalidate;
 end;
 
 initialization

+ 2 - 1
Controls/RealICQComponents.dpk

@@ -127,6 +127,7 @@ contains
   lib_xvid in 'RealICQClient\lib_xvid.pas',
   uScreenCapLib in 'RealICQClient\uScreenCapLib.pas',
   WebBrowserWithUI in 'RealICQUI\WebBrowserWithUI.pas',
-  RealICQUserCardDetail in 'RealICQUI\RealICQUserCardDetail.pas';
+  RealICQUserCardDetail in 'RealICQUI\RealICQUserCardDetail.pas',
+  RealICQUserCardMore in 'RealICQUI\RealICQUserCardMore.pas';
 
 end.

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 2 - 1
Controls/RealICQComponents.dproj


BIN
Controls/RealICQComponents.res


+ 37 - 25
Controls/RealICQUI/RealICQContacterListView.pas

@@ -239,6 +239,7 @@ type
   private
     FNoScrollListBox: TNoScrollListBox;
     FListBoxScrollBar: TListBoxScrollBar;
+    FShowWatchword: Boolean;
     FAdjustPosition: Boolean;
     FFlashCaptionOnOnline: Boolean;
     FOnlineNumeric: Cardinal;
@@ -437,6 +438,7 @@ type
     property ShowEmailButton: Boolean read FShowEmailButton write FShowEmailButton;
     property ShowSMSButton: Boolean read FShowSMSButton write FShowSMSButton;
     property ShowAddFriendButton: Boolean read FShowAddFriendButton write FShowAddFriendButton;
+    property ShowWatchword: Boolean read FShowWatchword write FShowWatchword;
     property ScrollTopButtonPictureNormal: TPicture read FScrollTopButtonPictureNormal write SetScrollTopButtonPictureNormal;
     property ScrollTopButtonPictureHover: TPicture read FScrollTopButtonPictureHover write SetScrollTopButtonPictureHover;
     property ScrollTopButtonPictureDown: TPicture read FScrollTopButtonPictureDown write SetScrollTopButtonPictureDown;
@@ -926,16 +928,16 @@ begin
           ACanvas.TextRect(R, Rect.Left + 35 + ACaptionWidth, Rect.Top + 5, ACaption);
           ListItem.FHint := ListItem.FHint + ACaption;
 
-          if (Length(ListItem.FWatchword) = 0) then
-            ACaption := ''
-          else
-            ACaption := ListItem.FWatchword;
-          //ACaption:= '(' + ListItem.FWatchword + ')';
-
-
-          ACanvas.Font.Color := clGray;
-          ACanvas.TextRect(R, Rect.Left + 35, Rect.Top + 22, ACaption);
-          ListItem.FHint := ListItem.FHint + ACaption;
+          if FListView.FShowWatchword then
+          begin
+            if (Length(ListItem.FWatchword) = 0) then
+              ACaption := ''
+            else
+              ACaption := ' - ' + ListItem.FWatchword;
+            ACanvas.Font.Color := clGray;
+            ACanvas.TextRect(R, Rect.Left + 35, Rect.Top + 22, ACaption);
+            ListItem.FHint := ListItem.FHint + ACaption;
+          end;
 
         {$region '文字区域'}
           ListItem.FTextRect := R;
@@ -1267,13 +1269,18 @@ begin
           Inc(ACaptionWidth, ACanvas.TextWidth(ACaption));
           ListItem.FHint := ListItem.FHint + ACaption;
 
-          if (Length(ListItem.FWatchword) = 0) then
-            ACaption := ''
-          else
-            ACaption := ' - ' + ListItem.FWatchword;
-          ACanvas.Font.Color := clGray;
-          ACanvas.TextRect(R, Rect.Left + 35 + ACaptionWidth, Rect.Top + 12, ACaption);
-          ListItem.FHint := ListItem.FHint + ACaption;
+          if FListView.FShowWatchword then
+          begin
+            if (Length(ListItem.FWatchword) = 0) then
+              ACaption := ''
+            else
+              ACaption := ' - ' + ListItem.FWatchword;
+
+            ACanvas.Font.Color := clGray;
+            ACanvas.TextRect(R, Rect.Left + 35 + ACaptionWidth, Rect.Top + 12, ACaption);
+            ListItem.FHint := ListItem.FHint + ACaption;
+          end;
+
 
         {$region '文字区域'}
           ListItem.FTextRect := R;
@@ -1612,13 +1619,17 @@ begin
           Inc(ACaptionWidth, ACanvas.TextWidth(ACaption));
           ListItem.FHint := ListItem.FHint + ACaption;
 
-          if (Length(ListItem.FWatchword) = 0) then
-            ACaption := ''
-          else
-            ACaption := ' - ' + ListItem.FWatchword;
-          ACanvas.Font.Color := clGray;
-          ACanvas.TextRect(R, Rect.Left + 27 + ACaptionWidth, Rect.Top + 8, ACaption);
-          ListItem.FHint := ListItem.FHint + ACaption;
+          if FListView.FShowWatchword then
+          begin
+            if (Length(ListItem.FWatchword) = 0) then
+              ACaption := ''
+            else
+              ACaption := ' - ' + ListItem.FWatchword;
+
+            ACanvas.Font.Color := clGray;
+            ACanvas.TextRect(R, Rect.Left + 27 + ACaptionWidth, Rect.Top + 8, ACaption);
+            ListItem.FHint := ListItem.FHint + ACaption;
+          end;
 
         {$region '文字区域'}
           ListItem.FTextRect := R;
@@ -2611,7 +2622,7 @@ begin
   else
     CurrentItemString := FDisplayName;
 
-  //调整位置    
+  //调整位置
   for iLoop := 0 to FListView.Items.Count - 1 do
   begin
     RealICQContacterListItem := FListView.Items.Objects[iLoop] as TRealICQContacterListItem;
@@ -4232,6 +4243,7 @@ begin
   FShowEmailButton := True;
   FShowAddFriendButton := True;
   FShowCameraButton := True;
+  FShowWatchword := True;
 
   FIconBtnDefaultColor := clWhite;
   FIconBtnLightColor := clSilver;

+ 1 - 0
Controls/RealICQUI/RealICQMasterVolumeControl.pas

@@ -31,6 +31,7 @@ type
     procedure ChangeUIColor(AColor: TColor); override;
   published
     property CopyRight: String read GetCopyRight;
+    property Visible;
   end;
 
 procedure Register;

+ 24 - 30
Controls/RealICQUI/RealICQUserCard.pas

@@ -9,17 +9,16 @@ uses
 type
   TRealICQUserCard = class(TRealICQRoundBorderPanel)
   private
+    FEdPos,
     FEdTrueName,
     FEdBranch,
     FEdDuty,
-    FEdCompany,
     FEdTel,
     FEdMobile,
     FEdShortMobile,
     FEdEmail: TEdit;
 
     FLblBranch,
-    //FLblCompany,
     FLblDuty,
     FLblTel,
     FLblMobile,
@@ -31,7 +30,6 @@ type
     FUserType: TRealICQUserType;
     FRealICQUser: TRealICQUser;
 
-
     procedure SetControl(LB: TLabel; ED: TEdit; Value: String);
     procedure SetCaption;
     procedure Caption_Default;
@@ -66,6 +64,11 @@ var
   IsInit: Boolean;
   VS, HS: Integer;
 
+function TRealICQUserCard.GetCopyRight: String;
+begin
+  Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
+end;
+
 constructor TRealICQUserCard.Create(AOwner: TComponent);
 var
    i: Integer;
@@ -76,14 +79,14 @@ begin
   BevelOuter := bvNone;
   ParentColor := True;
   //放置光标
-  FEdCompany := TEdit.Create(Self);
-  FEdCompany.BorderStyle := bsNone;
-  FEdCompany.Font := Font;
-  FEdCompany.Font.Size := 9;
-  FEdCompany.Left := -9;
-  FEdCompany.Top := -9;
-  FEdCompany.Width := 9;
-  FEdCompany.Height := 9;
+  FEdPos := TEdit.Create(Self);
+  FEdPos.BorderStyle := bsNone;
+  FEdPos.Font := Font;
+  FEdPos.Font.Size := 9;
+  FEdPos.Left := -9;
+  FEdPos.Top := -9;
+  FEdPos.Width := 9;
+  FEdPos.Height := 9;
 
   Width := 96;
   VS := 5;
@@ -206,10 +209,10 @@ end;
 
 procedure TRealICQUserCard.Caption_NXSQ;
 begin
-   SetControl(FLblBranch, FEdBranch, '主管机关:'); //TaxOffices
-   SetControl(FLblDuty, FEdDuty, '专 管 员 :'); //TaxAdministrator
-   SetControl(FLblTel, FEdTel, '办公电话:'); //OfficePhone
-   SetControl(FLblMobile, FEdMobile, '涉税电话:'); //TaxAgent
+   SetControl(FLblBranch, FEdBranch, '所属行业:');  //Industry
+   SetControl(FLblDuty, FEdDuty, '主管机关:'); //TaxOffices
+   SetControl(FLblTel, FEdTel, '涉税电话:'); //TaxAgent
+   SetControl(FLblMobile, FEdMobile, '办公电话:'); //OfficePhone
    SetControl(FLblShortMobile, FEdShortMobile, '财务电话:'); //FinancialPhone
    SetControl(FLblEmail, FEdEmail, '法人电话:'); //LegalPersonPhone
 end;
@@ -279,7 +282,7 @@ end;
 procedure TRealICQUserCard.Content_NXSQ;
 begin
   FEdBranch.ShowHint := True;
-  FEdDuty.ShowHint := False;
+  FEdDuty.ShowHint := True;
   FEdEmail.ShowHint := False;
 
   if Trim(FRealICQUser.Enterprise) = '' then
@@ -289,23 +292,21 @@ begin
   FEdTrueName.ShowHint := True;
   FEdTrueName.Hint := FEdTrueName.Text;
 
-  FEdBranch.Text := FRealICQUser.TaxOffices;
+  FEdBranch.Text := FRealICQUser.Industry;
   FEdBranch.Hint := FEdBranch.Text;
 
-//  FEdDuty.Text := FRealICQUser.TaxAdministrator;
-//  FEdTel.Text := FRealICQUser.TaxAgent;
+  FEdDuty.Text := FRealICQUser.TaxOffices;
+  FEdDuty.Hint := FEdDuty.Text;
 
   if FIsSecret then
   begin
-     FEdDuty.Text := FRealICQUser.TaxAdministrator;
-     FEdTel.Text := FRealICQUser.OfficePhone;
-     FEdMobile.Text := FRealICQUser.TaxAgent;
+     FEdTel.Text := FRealICQUser.TaxAgent;
+     FEdMobile.Text := FRealICQUser.OfficePhone;
      FEdShortMobile.Text := FRealICQUser.FinancialPhone;
      FEdEmail.Text := FRealICQUser.LegalPersonPhone;
   end
   else
   begin
-     if Trim(FEdDuty.Text) <> '' then FEdDuty.Text := '******';
      if Trim(FEdTel.Text) <> '' then FEdTel.Text := '******';
      if Trim(FEdMobile.Text) <> '' then FEdMobile.Text := '******';
      if Trim(FEdShortMobile.Text) <> '' then FEdShortMobile.Text := '******';
@@ -377,18 +378,12 @@ begin
   end;
 end;
 
-function TRealICQUserCard.GetCopyRight: String;
-begin
-  Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
-end;
-
 destructor TRealICQUserCard.Destroy;
 begin
   try
     FreeAndNil(FEdTrueName);
     FreeAndNil(FEdBranch);
     FreeAndNil(FEdDuty);
-    FreeAndNil(FEdCompany);
     FreeAndNil(FEdTel);
     FreeAndNil(FEdMobile);
     FreeAndNil(FEdShortMobile);
@@ -396,7 +391,6 @@ begin
 
     FreeAndNil(FLblBranch);
     FreeAndNil(FLblDuty);
-    //FreeAndNil(FLblCompany);
     FreeAndNil(FLblTel);
     FreeAndNil(FLblMobile);
     FreeAndNil(FLblShortMobile);

+ 421 - 0
Controls/RealICQUI/RealICQUserCardMore.pas

@@ -0,0 +1,421 @@
+unit RealICQUserCardMore;
+
+interface
+
+uses
+  SysUtils, Classes, Controls, ExtCtrls, StdCtrls, Graphics, Forms,ShellAPI, Windows,
+  RealICQUIColor, RealICQColors, RealICQRoundBorderPanel, RealICQModel;
+
+type
+  TRealICQUserCardMore = class(TRealICQRoundBorderPanel)
+  private
+    FEdPos,
+    FEdTrueName,
+    FEdCompany,
+    FEdBranch,
+    FEdDuty,
+    FEdTel,
+    FEdMobile,
+    FEdShortMobile,
+    FEdEmail: TEdit;
+
+    FLblCompany,
+    FLblBranch,
+    FLblDuty,
+    FLblTel,
+    FLblMobile,
+    FLblShortMobile,
+    FLblEmail: TLabel;
+
+    FShowMore: Boolean;
+    FIsSecret: Boolean;
+    FProductType: TRealICQProductType;
+    FUserType: TRealICQUserType;
+    FRealICQUser: TRealICQUser;
+
+    procedure SetControl(LB: TLabel; ED: TEdit; Value: String);
+    procedure SetCaption;
+    procedure Caption_Default;
+    procedure Caption_NXSQ;
+    procedure Caption_LBZQ;
+    procedure SetContent;
+    procedure Content_Default;
+    procedure Content_NXSQ;
+    procedure Content_LBZQ;
+    procedure SetRealICQUser(Value: TRealICQUser);
+    function GetCopyRight: String;
+
+  public
+    constructor Create(AOwner: TComponent); override;
+    destructor Destroy; override;
+    procedure ChangeUIColor(AColor: TColor);
+    property  ProductType: TRealICQProductType read FProductType write FProductType;
+    property  IsSecret: Boolean read FIsSecret write FIsSecret;
+    property  RealICQUser: TRealICQUser read FRealICQUser write SetRealICQUser;
+  published
+    property CopyRight: String read GetCopyRight;
+    property Font;
+    property Align;
+    property Anchors;
+  end;
+
+  procedure Register;
+
+implementation
+
+var
+  IsInit: Boolean;
+  VS, HS: Integer;
+
+function TRealICQUserCardMore.GetCopyRight: String;
+begin
+  Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
+end;
+
+constructor TRealICQUserCardMore.Create(AOwner: TComponent);
+var
+   i: Integer;
+begin
+  inherited Create(AOwner);
+  DoubleBuffered := True;
+  BevelInner := bvNone;
+  BevelOuter := bvNone;
+  ParentColor := True;
+  //放置光标
+  FEdPos := TEdit.Create(Self);
+  FEdPos.BorderStyle := bsNone;
+  FEdPos.Font := Font;
+  FEdPos.Font.Size := 9;
+  FEdPos.Left := -9;
+  FEdPos.Top := -9;
+  FEdPos.Width := 9;
+  FEdPos.Height := 9;
+
+  Width := 96;
+  VS := 5;
+  HS := 3;
+
+  FEdTrueName := TEdit.Create(Self);
+  FEdTrueName.BorderStyle := bsNone;
+  FEdTrueName.Font := Font;
+  FEdTrueName.Font.Color := clBlack;
+  FEdTrueName.Font.Size := 9;
+  FEdTrueName.Font.Style := [fsBold];
+  FEdTrueName.Anchors := [akLeft, akTop, akRight];
+  FEdTrueName.AutoSize:= True;
+  FEdTrueName.ReadOnly := True;
+  FEdTrueName.ShowHint := True;
+  FEdTrueName.ParentColor := True;
+  FEdTrueName.Color := BackColor;
+  FEdTrueName.Left := VS;
+  FEdTrueName.Top := HS;
+  FEdTrueName.Width := Width - 10;
+  HS := FEdTrueName.Height + 3;
+
+  FLblCompany := TLabel.Create(Self);
+  FEdCompany := TEdit.Create(Self);
+  FLblBranch := TLabel.Create(Self);
+  FEdBranch := TEdit.Create(Self);
+  FLblDuty := TLabel.Create(Self);
+  FEdDuty := TEdit.Create(Self);
+  FLblTel := TLabel.Create(Self);
+  FEdTel := TEdit.Create(Self);
+  FLblMobile := TLabel.Create(Self);
+  FEdMobile := TEdit.Create(Self);
+  FLblShortMobile := TLabel.Create(Self);
+  FEdShortMobile := TEdit.Create(Self);
+  FLblEmail := TLabel.Create(Self);
+  FEdEmail := TEdit.Create(Self);
+
+  for i := 0 to Self.Componentcount - 1 do
+  begin
+      if (Self.Components[i] is TEdit) then
+      begin
+         (Self.Components[i] as TEdit).Parent := Self;
+      end;
+      if (Self.Components[i] is TLabel) then
+      begin
+         (Self.Components[i] as TLabel).Parent := Self;
+      end;
+  end;
+
+  IsInit := True;
+  FProductType := ptBGZS;
+  FUserType := utUnknown;
+  SetCaption;
+  Height := HS + 3;
+  IsInit := False;
+end;
+
+procedure TRealICQUserCardMore.SetControl(LB: TLabel; ED: TEdit; Value: String);
+begin
+  if IsInit then
+  begin
+    LB.AutoSize := True;
+    LB.Transparent := True;
+    LB.Font := Font;
+    LB.Font.Color := clGray;
+    LB.Font.Size := 9;
+    LB.Anchors := [akLeft, akTop];
+    LB.Caption := Value;
+    LB.Color := BackColor;
+    LB.Left := VS;
+    LB.Top := HS;
+
+    ED.BorderStyle := bsNone;
+    ED.Font := Font;
+    ED.Font.Color := clBlack;
+    ED.Font.Size := 9;
+    ED.Anchors := [akLeft, akTop, akRight];
+    ED.ParentColor := True;
+    ED.Color := BackColor;
+    ED.ReadOnly := True;
+    ED.Left := LB.Left + LB.Width + 3;
+    ED.Top := LB.Top;
+    ED.Width := Width - LB.Width - 10;
+
+    HS := HS + LB.Height + 6;
+  end
+  else
+  begin
+    LB.Caption := Value;
+    ED.Left := LB.Left + LB.Width + 3;
+    ED.Width := Width - LB.Width - 10;
+  end;
+end;
+
+procedure TRealICQUserCardMore.SetCaption;
+begin
+  case FProductType of
+    ptBGZS:
+          Caption_Default;
+    ptNXSQ:
+          if (FUserType = utUnknown) OR (FUserType = utCompany) then
+             Caption_NXSQ
+          else
+             Caption_Default;
+    ptLBZQ:
+          if (FUserType = utUnknown) OR (FUserType = utCompany) then
+             Caption_LBZQ
+          else
+             Caption_Default;
+  end;
+end;
+
+procedure TRealICQUserCardMore.Caption_Default;
+begin
+   SetControl(FLblCompany, FEdCompany, '单位:');
+   SetControl(FLblBranch, FEdBranch, '处室:');
+   SetControl(FLblDuty, FEdDuty, '职务:');
+   SetControl(FLblTel, FEdTel, '电话:');
+   SetControl(FLblMobile, FEdMobile, '手机:');
+   SetControl(FLblShortMobile, FEdShortMobile, '短号:');
+   SetControl(FLblEmail, FEdEmail, '邮箱:');
+end;
+
+procedure TRealICQUserCardMore.Caption_NXSQ;
+begin
+   SetControl(FLblCompany, FEdCompany, '代码:');
+   SetControl(FLblBranch, FEdBranch, '行业:');  //Industry
+   SetControl(FLblDuty, FEdDuty, '主管:'); //TaxOffices
+   SetControl(FLblTel, FEdTel, '涉税:'); //TaxAgent
+   SetControl(FLblMobile, FEdMobile, '办公:'); //OfficePhone
+   SetControl(FLblShortMobile, FEdShortMobile, '财务:'); //FinancialPhone
+   SetControl(FLblEmail, FEdEmail, '法人:'); //LegalPersonPhone
+end;
+
+procedure TRealICQUserCardMore.Caption_LBZQ;
+begin
+   SetControl(FLblCompany, FEdCompany, '代码:');
+   SetControl(FLblBranch, FEdBranch, '行业:');  //Industry
+   SetControl(FLblDuty, FEdDuty, '主管:');   //TaxOffices
+   SetControl(FLblTel, FEdTel, '联络:');     //TaxAgent
+   SetControl(FLblMobile, FEdMobile, '办公:');  //OfficePhone
+   SetControl(FLblShortMobile, FEdShortMobile, '财务:'); //FinancialPhone
+   SetControl(FLblEmail, FEdEmail, '法人:'); //LegalPersonPhone
+end;
+
+procedure TRealICQUserCardMore.SetContent;
+begin
+  case FProductType of
+    ptBGZS:
+          Content_Default;
+    ptNXSQ:
+          if (FUserType = utUnknown) OR (FUserType = utCompany) then
+              Content_NXSQ
+          else
+              Content_Default;
+    ptLBZQ:
+          if (FUserType = utUnknown) OR (FUserType = utCompany) then
+              Content_LBZQ
+          else
+              Content_Default;
+  end;
+end;
+
+procedure TRealICQUserCardMore.Content_Default;
+begin
+  FEdBranch.ShowHint := False;
+  FEdDuty.ShowHint := False;
+  FEdEmail.ShowHint := True;
+
+  if Trim(FRealICQUser.TrueName) = '' then
+     FEdTrueName.Text := FRealICQUser.DisplayName
+  else
+     FEdTrueName.Text := FRealICQUser.TrueName;
+  FEdTrueName.ShowHint := True;
+  FEdTrueName.Hint := FEdTrueName.Text;
+
+  FEdCompany.Text := FRealICQUser.Company;
+  FEdBranch.Text := FRealICQUser.Branch;
+  FEdDuty.Text := FRealICQUser.Duty;
+
+  if FIsSecret then
+  begin
+     FEdTel.Text := FRealICQUser.Tel;
+     FEdMobile.Text := FRealICQUser.Mobile;
+     FEdShortMobile.Text := FRealICQUser.ShortMobile;
+     FEdEmail.Text := FRealICQUser.Email;
+     FEdEmail.Hint := FEdEmail.Text;
+  end
+  else
+  begin
+     FEdEmail.ShowHint := False;
+     if Trim(FEdTel.Text) <> '' then FEdTel.Text :='******';
+     if Trim(FEdMobile.Text) <> '' then FEdMobile.Text := '******';
+     if Trim(FEdShortMobile.Text) <> '' then FEdShortMobile.Text := '******';
+     if Trim(FEdEmail.Text) <> '' then FEdEmail.Text := '******';
+  end;
+end;
+
+procedure TRealICQUserCardMore.Content_NXSQ;
+begin
+  FEdBranch.ShowHint := True;
+  FEdDuty.ShowHint := True;
+  FEdEmail.ShowHint := False;
+
+  if Trim(FRealICQUser.Enterprise) = '' then
+     FEdTrueName.Text := FRealICQUser.DisplayName
+  else
+     FEdTrueName.Text := FRealICQUser.Enterprise;
+  FEdTrueName.ShowHint := True;
+  FEdTrueName.Hint := FEdTrueName.Text;
+
+  FEdCompany.Text := FRealICQUser.SocialCreditCode;
+  FEdBranch.Text := FRealICQUser.Industry;
+  FEdBranch.Hint := FEdBranch.Text;
+
+  FEdDuty.Text := FRealICQUser.TaxOffices;
+  FEdDuty.Hint := FEdDuty.Text;
+
+  if FIsSecret then
+  begin
+     FEdTel.Text := FRealICQUser.TaxAgent;
+     FEdMobile.Text := FRealICQUser.OfficePhone;
+     FEdShortMobile.Text := FRealICQUser.FinancialPhone;
+     FEdEmail.Text := FRealICQUser.LegalPersonPhone;
+  end
+  else
+  begin
+     if Trim(FEdTel.Text) <> '' then FEdTel.Text := '******';
+     if Trim(FEdMobile.Text) <> '' then FEdMobile.Text := '******';
+     if Trim(FEdShortMobile.Text) <> '' then FEdShortMobile.Text := '******';
+     if Trim(FEdEmail.Text) <> '' then FEdEmail.Text := '******';
+  end;
+end;
+
+procedure TRealICQUserCardMore.Content_LBZQ;
+begin
+  FEdBranch.ShowHint := True;
+  FEdDuty.ShowHint := True;
+  FEdEmail.ShowHint := False;
+
+  if Trim(FRealICQUser.Enterprise) = '' then
+     FEdTrueName.Text := FRealICQUser.DisplayName
+  else
+     FEdTrueName.Text := FRealICQUser.Enterprise;
+  FEdTrueName.Hint := FEdTrueName.Text;
+
+  FEdCompany.Text := FRealICQUser.SocialCreditCode;
+  FEdBranch.Text := FRealICQUser.Industry;
+  FEdBranch.Hint := FEdBranch.Text;
+
+  FEdDuty.Text := FRealICQUser.TaxOffices;
+  FEdDuty.Hint := FEdDuty.Text;
+
+  if FIsSecret then
+  begin
+     FEdTel.Text := FRealICQUser.TaxAgent;
+     FEdMobile.Text := FRealICQUser.OfficePhone;
+     FEdShortMobile.Text := FRealICQUser.FinancialPhone;
+     FEdEmail.Text := FRealICQUser.LegalPersonPhone;
+  end
+  else
+  begin
+     if Trim(FEdTel.Text) <> '' then FEdTel.Text := '******';
+     if Trim(FEdMobile.Text) <> '' then FEdMobile.Text := '******';
+     if Trim(FEdShortMobile.Text) <> '' then FEdShortMobile.Text := '******';
+     if Trim(FEdEmail.Text) <> '' then FEdEmail.Text := '******';
+  end;
+end;
+
+procedure TRealICQUserCardMore.SetRealICQUser(Value: TRealICQUser);
+begin
+  FRealICQUser := Value;
+  if Assigned(FRealICQUser) then
+  begin
+     if FUserType <> FRealICQUser.UserType then
+     begin
+        FUserType := FRealICQUser.UserType;
+        SetCaption;
+     end;
+     SetContent;
+  end;
+end;
+
+procedure TRealICQUserCardMore.ChangeUIColor(AColor: TColor);
+var
+   i: Integer;
+begin
+  inherited ChangeUIColor(AColor);
+  BackColor := AColor;
+  BorderColor := AColor;
+  for i := 0 to Self.Componentcount - 1 do
+  begin
+      if Self.Components[i] is TEdit then
+      begin
+         (Self.Components[i] as TEdit).Color := AColor;
+      end;
+  end;
+end;
+
+destructor TRealICQUserCardMore.Destroy;
+begin
+  try
+    FreeAndNil(FEdTrueName);
+    FreeAndNil(FEdBranch);
+    FreeAndNil(FEdDuty);
+    FreeAndNil(FEdCompany);
+    FreeAndNil(FEdTel);
+    FreeAndNil(FEdMobile);
+    FreeAndNil(FEdShortMobile);
+    FreeAndNil(FEdEmail);
+
+    FreeAndNil(FLblBranch);
+    FreeAndNil(FLblDuty);
+    FreeAndNil(FLblCompany);
+    FreeAndNil(FLblTel);
+    FreeAndNil(FLblMobile);
+    FreeAndNil(FLblShortMobile);
+    FreeAndNil(FLblEmail);
+  except
+  end;
+  inherited Destroy;
+end;
+
+procedure Register;
+begin
+  RegisterComponents('RealICQ UI', [TRealICQUserCardMore]);
+end;
+
+end.