Browse Source

打开聊天窗口List下标为FInDeviceID = -1的异常

lqq 9 years ago
parent
commit
2db4b2d690

File diff suppressed because it is too large
+ 1 - 1
AppCom/AppCentreCom.dproj


BIN
AppCom/AppCentreCom.res


File diff suppressed because it is too large
+ 1 - 1
CA/CA.dproj


BIN
CA/CA.res


File diff suppressed because it is too large
+ 1 - 1
COM/RealICQCOMInterfaces/RealICQCOMInterfaces.dproj


BIN
COM/RealICQCOMInterfaces/RealICQCOMInterfaces.res


+ 67 - 76
Client/Group/GroupClient.pas

@@ -4,9 +4,10 @@ interface
 
 uses
   superobject, GroupUtility, WebSocket2, WebSocketClient, Classes, Graphics,
-  blcksock, SysUtils, DateUtils, GroupConfig, GroupProtocols, synautil,RealICQModel;
+  blcksock, SysUtils, DateUtils, GroupConfig, GroupProtocols, synautil,
+  RealICQModel;
 
-type  
+type
   TGroupClient = class
   private
     FClient: TTestWebSocketClientConnection;
@@ -15,7 +16,6 @@ type
     FConnected: Boolean;
     FGroupMonitor: TObject;
     FLastRecvMsg: ISuperObject;
-
     procedure GetMyGroups;
     procedure OnOpen(aSender: TWebSocketCustomConnection);
     procedure OnRead(aSender: TWebSocketCustomConnection; aFinal, aRes1, aRes2, aRes3: boolean; aCode: integer; aData: TMemoryStream);
@@ -23,7 +23,6 @@ type
   public
     constructor Create();
     destructor Destroy; override;
-
     procedure Send(AData: string); overload;
     procedure Send(AProtocol: string; AData: ISuperObject); overload;
     procedure Ping;
@@ -37,7 +36,7 @@ type
     procedure SearchTeam(ATeamID, AName, AIntro, ANotice: string; AMatchingType: TRealICQMatchingType; ASkip: Integer = 0; ALimit: Integer = 20);
     procedure AsynTeam(ATeamID: string);
     procedure GetHistoryMessageCount(ATeamID: string);
-    procedure GetHistoryMessages(ATeamID: string; ts: Cardinal);
+    procedure GetHistoryMessages(ATeamID: string; ts: Int64);
     procedure ChangeActiveDevice;
 
     { TODO -olqq -c : 群成员操作 2015/6/2 10:03:30 }
@@ -45,18 +44,17 @@ type
     procedure RemoveTeamMembers(ATeamID: string; AMembersID, AManagersID: TStringList);
     procedure SetAlias(ATeamID, AMemberID, Alias: string);
     function GetAlias(ATeamID, AMemberID: string): string;
-    procedure InviteJoin(ATeamID,AOperatorID,AOperatorMsg: string;AMembers: TStringList);
+    procedure InviteJoin(ATeamID, AOperatorID, AOperatorMsg: string; AMembers: TStringList);
     procedure JoinTeam(ATeamID, AMsg: string);
     procedure JoinTeamResponse(ATeamID, ALoginName, ATag: string; Accepted: Boolean);
     { TODO -olqq -c : 群消息 2015/6/2 10:11:20 }
-    procedure SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: String);
+    procedure SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: string);
     procedure GetOffineMessage;
     procedure MessageMisc(ATeamID: string);
     procedure MessageMiscMust(ATeamID: string);
     { TODO -olqq -c : 群图片 2015/6/3 9:39:26 }
     function UploadFile(Hash, FileName, ID, GroupID: string): Boolean;
     procedure SendFilesRequest(AGroupId, AUserId, FileName: string);
-
     property Connected: Boolean read FConnected write FConnected;
   end;
 
@@ -73,10 +71,9 @@ const
 
 { TGroupClient }
 
-procedure TGroupClient.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: String;
-  ATeamMembers: TStringList; AIsTempTeam: Boolean);
+procedure TGroupClient.CreateTeam(ATeamName, ATeamCallBoard, ATeamIntro: string; ATeamMembers: TStringList; AIsTempTeam: Boolean);
 var
-  createGroup:String;
+  createGroup: string;
   jo, AData: ISuperObject;
   AMemebers: TSuperArray;
   iLoop: Integer;
@@ -91,11 +88,11 @@ begin
   AMemebers := jo.A['group.members'];
   for iLoop := 0 to ATeamMembers.Count - 1 do
     AMemebers.S[iloop] := ATeamMembers[iLoop];
-    
+
   Send(GROUP_CREATE_REQUEST, jo);
 end;
 
-procedure TGroupClient.RemoveTeam(ATeamID: String);
+procedure TGroupClient.RemoveTeam(ATeamID: string);
 var
   jo: ISuperObject;
 begin
@@ -104,8 +101,7 @@ begin
   Send(GROUP_DEL_REQUEST, jo);
 end;
 
-procedure TGroupClient.UpdateTeamInfo(ATeamID, AIntro, ANotice, AName: string;
-  AAuth: Integer);
+procedure TGroupClient.UpdateTeamInfo(ATeamID, AIntro, ANotice, AName: string; AAuth: Integer);
 var
   jo: ISuperObject;
 begin
@@ -118,7 +114,7 @@ begin
   Send(GROUP_UPDATE_REQUEST, jo);
 end;
 
-procedure TGroupClient.AsynTeam(ATeamID: String);
+procedure TGroupClient.AsynTeam(ATeamID: string);
 var
   jo: ISuperObject;
 begin
@@ -128,11 +124,10 @@ begin
   Send(GROUP_GET_REQUEST, jo);
 end;
 
-procedure TGroupClient.SearchTeam(ATeamID, AName, AIntro, ANotice: string;
-  AMatchingType: TRealICQMatchingType; ASkip: Integer = 0; ALimit: Integer = 20);
+procedure TGroupClient.SearchTeam(ATeamID, AName, AIntro, ANotice: string; AMatchingType: TRealICQMatchingType; ASkip: Integer = 0; ALimit: Integer = 20);
 var
   jo: ISuperObject;
-  SearchGroup: String;
+  SearchGroup: string;
 begin
   jo := SO('{"id":"","group":{"id":"","intro":"","name":"","notice":""},"skip":0,"limit":0}');
 
@@ -163,12 +158,11 @@ begin
   Send(GROUP_QUERY_REQUEST, jo);
 end;
 
-procedure TGroupClient.AddTeamMembers(ATeamID: string; AMembersID,
-  AManagersID: TStringList);
+procedure TGroupClient.AddTeamMembers(ATeamID: string; AMembersID, AManagersID: TStringList);
 var
-  jo :ISuperObject;
-  ja,ja1: TSuperArray;
-  iLoop : Integer;
+  jo: ISuperObject;
+  ja, ja1: TSuperArray;
+  iLoop: Integer;
 begin
   jo := SO('{"id":"", "group":{"id":"","members":[],"managers": []}}');
   jo.S['group.id'] := ATeamID;
@@ -185,12 +179,11 @@ begin
   Send(MEMBER_ADD_REQUEST, jo);
 end;
 
-procedure TGroupClient.RemoveTeamMembers(ATeamID: string; AMembersID,
-  AManagersID: TStringList);
+procedure TGroupClient.RemoveTeamMembers(ATeamID: string; AMembersID, AManagersID: TStringList);
 var
-  jo :ISuperObject;
-  ja,ja1: TSuperArray;
-  iLoop : Integer;
+  jo: ISuperObject;
+  ja, ja1: TSuperArray;
+  iLoop: Integer;
 begin
   jo := SO('{"id":"", "group":{"id":"","members":[],"managers": []}}');
   jo.S['group.id'] := ATeamID;
@@ -214,31 +207,30 @@ end;
 
 procedure TGroupClient.SetAlias(ATeamID, AMemberID, Alias: string);
 var
-  jo,jo1: ISuperObject;
+  jo, jo1: ISuperObject;
   ja: TSuperArray;
 begin
   jo := SO('{"id":"","group":{"id":"","members":[]}}');
-  jo1:= SO('{"id":"","alias":""}');
-  jo.S['group.id']:= ATeamID;
-  jo1.S['id']      := AMemberID;
-  jo1.S['alias']   := Alias;
+  jo1 := SO('{"id":"","alias":""}');
+  jo.S['group.id'] := ATeamID;
+  jo1.S['id'] := AMemberID;
+  jo1.S['alias'] := Alias;
   ja := jo.A['group.members'];
   ja.Add(jo1);
 
   Send(MEMBER_UPDATE_REQUEST, jo);
 end;
 
-procedure TGroupClient.InviteJoin(ATeamID, AOperatorID, AOperatorMsg: string;
-  AMembers: TStringList);
+procedure TGroupClient.InviteJoin(ATeamID, AOperatorID, AOperatorMsg: string; AMembers: TStringList);
 var
   jo: ISuperObject;
   ja: TSuperArray;
-  ILoop : Integer;
+  ILoop: Integer;
 begin
   jo := SO('{"id":"","group":{"id":"","members":[], "operator":{"id":"","msg":""}}}');
-  jo.S['group.id']:= ATeamID;
-  jo.S['group.operator.id']:= AOperatorID;
-  jo.S['group.operator.msg']:= AOperatorMsg;
+  jo.S['group.id'] := ATeamID;
+  jo.S['group.operator.id'] := AOperatorID;
+  jo.S['group.operator.msg'] := AOperatorMsg;
   ja := jo.A['group.members'];
   for iLoop := 0 to AMembers.Count - 1 do
     ja.S[iloop] := AMembers[iLoop];
@@ -251,7 +243,7 @@ var
   jo: ISuperObject;
 begin
   jo := SO('{"group":{"id":"","apply":{"uid":"","msg":""}}}');
-  jo.S['group.id']    := ATeamID;
+  jo.S['group.id'] := ATeamID;
   jo.S['group.apply.msg'] := AMsg;
   jo.S['group.apply.uid'] := FLoginName;
   Send(MEMBER_APPLY_REQUEST, jo);
@@ -262,11 +254,11 @@ var
   jo: ISuperObject;
 begin
   jo := SO('{"id":"","group":{"id":"","apply":{"uid":""},"reply":{"uid":"", "ret":0}}}');
-  jo.S['group.id']    := ATeamID;
+  jo.S['group.id'] := ATeamID;
   jo.S['group.apply.uid'] := ALoginName;
   jo.S['group.reply.uid'] := FLoginName;
   jo.S['group.reply.msg'] := ATag;
-  if Accepted then  
+  if Accepted then
     jo.I['group.reply.ret'] := 1
   else
     jo.I['group.reply.ret'] := 0;
@@ -274,13 +266,12 @@ begin
   Send(MEMBER_REPLY_REQUEST, jo);
 end;
 
-procedure TGroupClient.SendTeamMessage(ATeamID, ASender, AMsg: String;
-  AFont: TFont; AFaces: TStringList; Attachs: String);
+procedure TGroupClient.SendTeamMessage(ATeamID, ASender, AMsg: string; AFont: TFont; AFaces: TStringList; Attachs: string);
 var
   jo, jofile, joNotify, joFont: ISuperObject;
   ja, jaHashs: TSuperArray;
-  iLoop : Integer;
-  sendstr: String;
+  iLoop: Integer;
+  sendstr: string;
   AFace: TFace;
   IMG_TAG, ATT_TAG: string;
 begin
@@ -308,7 +299,7 @@ begin
   joFont := FontToJson(AFont);
   if joFont <> nil then
     jo.O['style'] := joFont;
-    
+
   if Attachs <> '' then
   begin
     jo.A['attach'].S[0] := Attachs;
@@ -341,7 +332,8 @@ begin
   MessageMisc(ATeamID);
   {$ELSE}
   ChangeActiveDevice;
-  {$ENDIF}                           
+  MessageMisc(ATeamID);
+  {$ENDIF}
 end;
 
 procedure TGroupClient.MessageMisc(ATeamID: string);
@@ -374,7 +366,7 @@ begin
   Result := '';
   AStream := TStringStream.Create(AResponseStr);
   try
-    AStream.Position :=1;
+    AStream.Position := 1;
     Len := 0;
     AStream.Read(ACode, 1);
     while ACode <> $FF do
@@ -422,8 +414,8 @@ end;
 
 function TGroupClient.Connect(ALoginName: string = ''): Boolean;
 var
-  AIdHttp:TIdHTTP;
-  ResponeStr,sid: string;
+  AIdHttp: TIdHTTP;
+  ResponeStr, sid: string;
   config: TGroupConfig;
   AURL: string;
 begin
@@ -431,13 +423,13 @@ begin
     FLoginName := ALoginName;
   if Trim(FLoginName) = '' then
     Exit;
-    
-  AIdHttp:= TIdHTTP.Create(nil);
+
+  AIdHttp := TIdHTTP.Create(nil);
   try
     config := TGroupConfig.GetConfig;
 
     if config.GatewayEnable then
-    begin       
+    begin
       config.RandomGatewayServer;
       AURL := Format(GATEWAY_URL, [config.GatewayIP, config.GatewayPort]);
       ResponeStr := AIdHttp.Get(AURL);
@@ -446,11 +438,11 @@ begin
         Exit;
     end;
     SUCCESS(Format('%s:%d', [config.IP, config.Port]), '群组服务地址');
-    AURL := Format(SHAKEHANDS_STEP1, [config.IP, config.Port, HTTPEncode(AnsiToUtf8(FLoginName)), (DateTimeToUnix(Now) - 8*60*60) * 1000]);
+    AURL := Format(SHAKEHANDS_STEP1, [config.IP, config.Port, HTTPEncode(AnsiToUtf8(FLoginName)), (DateTimeToUnix(Now) - 8 * 60 * 60) * 1000]);
     ResponeStr := AIdHttp.get(AURL);
     ResponeStr := GetSID(ResponeStr);
-    sid :=  SO(ResponeStr).S['sid'];
-    AURL := Format(SHAKEHANDS_STEP2, [config.IP, config.Port, HTTPEncode(AnsiToUtf8(FLoginName)), (DateTimeToUnix(Now) - 8*60*60) * 1000, sid]);
+    sid := SO(ResponeStr).S['sid'];
+    AURL := Format(SHAKEHANDS_STEP2, [config.IP, config.Port, HTTPEncode(AnsiToUtf8(FLoginName)), (DateTimeToUnix(Now) - 8 * 60 * 60) * 1000, sid]);
     ResponeStr := AIdHttp.get(AURL);
     if FClient <> nil then
       FreeAndNil(FClient);
@@ -471,25 +463,25 @@ begin
   Freeandnil(AIdHttp);
 end;
 
-function TGroupClient.UploadFile(Hash, FileName, ID, GroupID: String): Boolean;
+function TGroupClient.UploadFile(Hash, FileName, ID, GroupID: string): Boolean;
 var
   AHttp: TIdHttp;
   MutPartForm: TIdMultiPartFormDataStream;
-  Ret:TStringStream;
-  response,UpUrl: String;
-  jo,t,jofile: ISuperObject;
-  SendStr: String;
+  Ret: TStringStream;
+  response, UpUrl: string;
+  jo, t, jofile: ISuperObject;
+  SendStr: string;
   config: TGroupConfig;
 begin
   Result := False;
   config := TGroupConfig.GetConfig;
   UpUrl := Format(UPLOAD_URL, [config.ImageIP, config.ImagePort]);
   AHttp := Tidhttp.Create(nil);
-  AHttp.Request.ContentType:='multipart/form-data';
+  AHttp.Request.ContentType := 'multipart/form-data';
   AHttp.HandleRedirects := true;
   AHttp.AllowCookies := true;
   MutPartForm := TIdMultiPartFormDataStream.Create;
-  MutPartForm.AddFile('file1', TRealICQClient.GetReceivedFaceDir+FileName,'');
+  MutPartForm.AddFile('file1', TRealICQClient.GetReceivedFaceDir + FileName, '');
 
   try
     response := AHttp.Post(UpUrl, MutPartForm);
@@ -514,14 +506,13 @@ var
   PInt: PInteger;
 begin
   FreeAndNil(FGroupMonitor);
-  if FClient <> nil then   
+  if FClient <> nil then
     FreeAndNil(FClient);
   FLastRecvMsg := nil;
   FProtocol.Free;
   inherited;
 end;
 
-
 procedure TGroupClient.Disconnect;
 begin
   (FGroupMonitor as TGroupMonitor).Stop;
@@ -552,7 +543,8 @@ end;
     skip: <Number>,         // *偏移
     limit: <Number>         // *限制
 }
-procedure TGroupClient.GetHistoryMessages(ATeamID: string; ts: Cardinal);
+
+procedure TGroupClient.GetHistoryMessages(ATeamID: string; ts: Int64);
 var
   jo, joFilter: ISuperObject;
 begin
@@ -563,7 +555,7 @@ begin
   joFilter := SO();
 
   joFilter.S['group'] := ATeamID;
-  joFilter.S['ts'] := '<'+ IntToStr(ts);
+  joFilter.S['ts'] := '>' + IntToStr(ts);
   joFilter.I['limit'] := 10000;
   jo.O['filter'] := joFilter;
   Send(HISTORY_H_Q, jo);
@@ -588,8 +580,7 @@ begin
 //  Send(MESSAGE_OFFLINE_REQUEST, jo);
 end;
 
-procedure TGroupClient.OnClose(aSender: TWebSocketCustomConnection;
-  aCloseCode: integer; aCloseReason: string; aClosedByPeer: boolean);
+procedure TGroupClient.OnClose(aSender: TWebSocketCustomConnection; aCloseCode: integer; aCloseReason: string; aClosedByPeer: boolean);
 begin
   FConnected := False;
   FClient := nil;
@@ -610,8 +601,7 @@ begin
   (FGroupMonitor as TGroupMonitor).KeepAlive := True;
 end;
 
-procedure TGroupClient.OnRead(aSender: TWebSocketCustomConnection; aFinal,
-  aRes1, aRes2, aRes3: boolean; aCode: integer; aData: TMemoryStream);
+procedure TGroupClient.OnRead(aSender: TWebSocketCustomConnection; aFinal, aRes1, aRes2, aRes3: boolean; aCode: integer; aData: TMemoryStream);
 var
   s: UTF8String;
   Recvdata: string;
@@ -639,7 +629,7 @@ begin
     FProtocol.Proccess(Recvdata);
   except
     on E: Exception do
-      Error(E.Message, 'TGroupClient.OnRead('+Recvdata+')');
+      Error(E.Message, 'TGroupClient.OnRead(' + Recvdata + ')');
   end;
 end;
 
@@ -668,14 +658,15 @@ begin
   except
     on E: Exception do
     begin
-      Error(E.Message, 'TGroupClient.Send('+AData+')');
+      Error(E.Message, 'TGroupClient.Send(' + AData + ')');
     end;
   end;
 end;
 
-procedure TGroupClient.SendFilesRequest(AGroupId, AUserId, FileName: String);
+procedure TGroupClient.SendFilesRequest(AGroupId, AUserId, FileName: string);
 begin
 
 end;
 
 end.
+

+ 8 - 22
Client/Group/GroupProcess.pas

@@ -154,26 +154,11 @@ end;
 
 function GetWaitingTeam(ATeamID: string): TRealICQTeam;
 begin
-  try
-    Result := TRealICQTeam.Create;
-    Result.TeamID := ATeamID;
-    Result.TeamCaption := '群信息正在努力加载中...';
-//    Result.TeamCreater := '加载中...';
-
-
-    Result.TeamIntro := '加载中...';
-    Result.TeamCallBoard := '加载中...';
-//    Result.TeamManagers := '加载中...';
-//    Result.TeamMembers := '加载中...';
-
-
-  except
-    on Ex: Exception do
-    begin
-      Error(Ex.Message, 'GetWaitingTeam');
-      Result.Free;
-    end;
-  end;
+  Result := TRealICQTeam.Create;
+  Result.TeamID := ATeamID;
+  Result.TeamCaption := '群信息正在努力加载中...';
+  Result.TeamIntro := '加载中...';
+  Result.TeamCallBoard := '加载中...';
 end;
 
 { TNoProcess }
@@ -260,6 +245,7 @@ begin
   ATeam.Free;
 //  GetMapTeamUsersProvider.Insert(AData.S['group.id'], AData.O['group'].AsJSon(), AData.I['group.ver']);
 
+
 end;
 
 { TGroupSearchResponse }
@@ -471,8 +457,8 @@ begin
     AContent := StringReplace(AContent, #$A, '\n', [rfReplaceAll]);
   ASender := AData.S['sender'];
   ASendTime := UnixToDateTime(Round(AData.I['ts'] / 1000) + 8 * 60 * 60);
-  AStyle := JsonToFont(AData.O['style']);
-
+  AStyle := JsonToFont(AData.O['style']);
+
   TGroupService.GetService.OnMessage(ATeamID, ASender, AContent, AStyle, ASendTime, AData.I['msgType'], AData.I['length']);
 end;
 

+ 1 - 1
Client/Group/GroupService.pas

@@ -289,7 +289,7 @@ begin
   LastMessageTime := MainForm.DBHistory.GetLastMessageTimeByTeamID(ATeam.TeamID);
   if (LastMessageTime = 0) and (ts <= 0) then
     Exit
-  else if (LastMessageTime = 0) and (ts > 0) then
+  else if (ts > LastMessageTime) then
     FGroupClient.GetHistoryMessages(ATeam.TeamID, ts)
   else
   begin

File diff suppressed because it is too large
+ 2 - 8
Client/Lxtalk.dproj


BIN
Client/Lxtalk.res


+ 3 - 0
Controls/RealICQClient/RealICQDBHistory.pas

@@ -938,7 +938,10 @@ begin
     ADOQuery.Parameters.ParamByName('TeamID').Value := ATeamID;
     ADOQuery.Open;
     if ADOQuery.RecordCount <= 0 then
+    begin
+      Result := Now() - 5;
       Exit;
+    end;
     ADOQuery.First;
     if not ADOQuery.Eof then
       Result := ADOQuery.FieldByName('SendDateTime').AsFloat;

File diff suppressed because it is too large
+ 24 - 24
Controls/RealICQComponents.dproj


BIN
Controls/RealICQComponents.res


+ 32 - 33
Controls/RealICQUI/RealICQMicrophoneVolumeControl.pas

@@ -10,25 +10,20 @@ unit RealICQMicrophoneVolumeControl;
 interface
 
 uses
-  MMSystem,
-  AMixer,
-  Windows,
-  SysUtils, Classes, Controls, ExtCtrls, Graphics, RealICQTrackBar;
+  MMSystem, AMixer, Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics,
+  RealICQTrackBar;
 
 type
   TRealICQMicrophoneVolumeControl = class(TRealICQTrackBar)
   private
     FAudioMixer: TAudioMixer;
-    FInDeviceID,
-    FInChannelID,
-    FConnectionID: Integer;
+    FInDeviceID, FInChannelID, FConnectionID: Integer;
     FMute: Integer;
     function InitInDeviceID: Boolean;
     procedure GetMicrophoneValue;
-    procedure ValueChange(Sender:TObject);
-    procedure MixerChange(Sender:TObject; MixerH: HMixer; ID: Integer);
-    
-    function GetCopyRight: String;
+    procedure ValueChange(Sender: TObject);
+    procedure MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
+    function GetCopyRight: string;
   protected
     { Protected declarations }
   public
@@ -36,14 +31,15 @@ type
     destructor Destroy; override;
     procedure ChangeUIColor(AColor: TColor); override;
   published
-    property CopyRight: String read GetCopyRight;
+    property CopyRight: string read GetCopyRight;
   end;
 
 procedure Register;
 
 implementation
 //------------------------------------------------------------------------------
-function TRealICQMicrophoneVolumeControl.GetCopyRight: String;
+
+function TRealICQMicrophoneVolumeControl.GetCopyRight: string;
 begin
   Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
 end;
@@ -51,10 +47,10 @@ end;
 //------------------------------------------------------------------------------
 function TRealICQMicrophoneVolumeControl.InitInDeviceID: Boolean;
 var
-  iLoop : Integer;
-  szName: String;
+  iLoop: Integer;
+  szName: string;
 begin
-  FInDeviceID  := -1;
+  FInDeviceID := -1;
   FInChannelID := -1;
   FConnectionID := -1;
 
@@ -64,27 +60,27 @@ begin
     Result := False;
     Exit;
   end;
-  
+
   for iLoop := 0 to FAudioMixer.Destinations.Count - 1 do
-    if FAudioMixer.Destinations[iLoop].Data.dwComponentType =
-      MIXERLINE_COMPONENTTYPE_DST_WAVEIN  then
+    if FAudioMixer.Destinations[iLoop].Data.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN then
     begin
-      FInDeviceID  := iLoop;
+      FInDeviceID := iLoop;
       Break;
     end;
 
-  for iLoop := 0 to FAudioMixer.Destinations[FInDeviceID].Connections.Count - 1 do
-  begin
-    szName := FAudioMixer.Destinations[FInDeviceID].Connections.Connection[iLoop].Data.szName;
-    if AnsiSameText(szName, '麦克风') or AnsiSameText(szName, 'MICROPHONE') then
-      FConnectionID := iLoop;
-  end;
+  if FInDeviceID > -1 then
+    for iLoop := 0 to FAudioMixer.Destinations[FInDeviceID].Connections.Count - 1 do
+    begin
+      szName := FAudioMixer.Destinations[FInDeviceID].Connections.Connection[iLoop].Data.szName;
+      if AnsiSameText(szName, '麦克风') or AnsiSameText(szName, 'MICROPHONE') then
+        FConnectionID := iLoop;
+    end;
 
   Result := True;
 end;
 
 //------------------------------------------------------------------------------
-procedure TRealICQMicrophoneVolumeControl.ValueChange(Sender:TObject);
+procedure TRealICQMicrophoneVolumeControl.ValueChange(Sender: TObject);
 begin
   try
     FAudioMixer.SetVolume(FInDeviceID, FConnectionID, Value, Value, FMute);
@@ -96,7 +92,7 @@ begin
 end;
 
 //------------------------------------------------------------------------------
-procedure TRealICQMicrophoneVolumeControl.MixerChange(Sender:TObject;MixerH:HMixer;ID:Integer);
+procedure TRealICQMicrophoneVolumeControl.MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
 begin
   GetMicrophoneValue;
 end;
@@ -104,9 +100,9 @@ end;
 //------------------------------------------------------------------------------
 procedure TRealICQMicrophoneVolumeControl.GetMicrophoneValue;
 var
-  L,R:Integer;
-  Stereo:Boolean;
-  IsSelect:Boolean;
+  L, R: Integer;
+  Stereo: Boolean;
+  IsSelect: Boolean;
 begin
   try
     FAudioMixer.GetVolume(FInDeviceID, FConnectionID, L, R, FMute, Stereo, IsSelect);
@@ -117,8 +113,10 @@ begin
   end;
   FAudioMixer.OnControlChange := MixerChange;
   OnChanged := nil;
-  if L >= 0 then Value := L;
-  if R >= 0 then Value := (Value + R) div 2;
+  if L >= 0 then
+    Value := L;
+  if R >= 0 then
+    Value := (Value + R) div 2;
   OnChanged := ValueChange;
 end;
 
@@ -158,3 +156,4 @@ begin
 end;
 
 end.
+

File diff suppressed because it is too large
+ 2 - 47
Includes/FlatStyle/FlatStyle.dproj


BIN
Includes/FlatStyle/FlatStyle.res


File diff suppressed because it is too large
+ 1 - 29
Log/Logger.dproj


BIN
Log/Logger.res


+ 5 - 5
ZWT/XML/DefaultConfig.xml

@@ -2,12 +2,12 @@
 <DefaultConfig>
 	<SkinName Value="VStyle"/>
 	<UIMainColor Value="15392442"/>
-	<MainFormLeft Value="707"/>
-	<MainFormTop Value="-2"/>
-	<MainFormWidth Value="-300"/>
+	<MainFormLeft Value="873"/>
+	<MainFormTop Value="-1"/>
+	<MainFormWidth Value="258"/>
 	<MainFormHeight Value="734"/>
-	<TalkingFormLeft Value="187"/>
-	<TalkingFormTop Value="115"/>
+	<TalkingFormLeft Value="442"/>
+	<TalkingFormTop Value="123"/>
 	<TalkingFormWidth Value="663"/>
 	<TalkingFormHeight Value="507"/>
 	<ShowMainFormOnStart Value="True"/>