SystemSetFrm.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:11k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit SystemSetFrm;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls, WinSock, Buttons, ExtCtrls, Registry, RealMessengerUnit, MMSystem,
  6.   bsSkinCtrls, bsSkinBoxCtrls, BusinessSkinForm, ComCtrls, bsSkinTabs,IniFiles;
  7. type
  8.   TSystemSetForm = class(TForm)
  9.     Bevel1: TBevel;
  10.     BitBtn1: TbsSkinButton;
  11.     bsSkinButton2: TbsSkinButton;
  12.     bsSkinPageControl1: TbsSkinPageControl;
  13.     bsSkinTabSheet1: TbsSkinTabSheet;
  14.     bsSkinTabSheet2: TbsSkinTabSheet;
  15.     bsSkinTabSheet3: TbsSkinTabSheet;
  16.     EDHostName: TEdit;
  17.     CBProxyCategory: TComboBox;
  18.     bsSkinLabel2: TbsSkinLabel;
  19.     bsSkinLabel4: TbsSkinLabel;
  20.     GroupBox1: TbsSkinGroupBox;
  21.     Label1: TLabel;
  22.     Label8: TLabel;
  23.     Label9: TLabel;
  24.     Label7: TLabel;
  25.     EDProxyPassword: TEdit;
  26.     EDProxyUsername: TEdit;
  27.     EDProxyAddress: TEdit;
  28.     EDProxyPort: TEdit;
  29.     bsBusinessSkinForm1: TbsBusinessSkinForm;
  30.     bsSkinLabel3: TbsSkinLabel;
  31.     EDServerPort: TEdit;
  32.     Edit1: TEdit;
  33.     bsSkinGroupBox1: TbsSkinGroupBox;
  34.     bsSkinButton1: TbsSkinButton;
  35.     bsSkinComboBox1: TbsSkinComboBox;
  36.     bsSkinLabel1: TbsSkinLabel;
  37.     SBSelFile: TSpeedButton;
  38.     SBPlay: TSpeedButton;
  39.     Label5: TLabel;
  40.     EDMsgSound: TEdit;
  41.     CBDontPlaySound: TCheckBox;
  42.     CBDontAutoConnect: TCheckBox;
  43.     EDAutoConnectInterval: TEdit;
  44.     bsSkinLabel5: TbsSkinLabel;
  45.     bsSkinLabel6: TbsSkinLabel;
  46.     OpenDialog1: TOpenDialog;
  47.     CBAutoRun: TCheckBox;
  48.     bsSkinTabSheet4: TbsSkinTabSheet;
  49.     Label2: TLabel;
  50.     Edit2: TEdit;
  51.     procedure FormShow(Sender: TObject);
  52.     procedure CBDontPlaySoundClick(Sender: TObject);
  53.     procedure CBDontAutoConnectClick(Sender: TObject);
  54.     procedure SBPlayClick(Sender: TObject);
  55.     procedure SBSelFileClick(Sender: TObject);
  56.     procedure BitBtn1Click(Sender: TObject);
  57.     procedure CBProxyCategoryChange(Sender: TObject);
  58.     procedure FormCreate(Sender: TObject);
  59.     procedure bsSkinComboBox1Change(Sender: TObject);
  60.     procedure bsSkinButton2Click(Sender: TObject);
  61.   private
  62.     procedure SetAutoRun(IsAutoRun: Boolean);
  63.     function GetAutoRun(): Boolean;
  64.     procedure loadskin(filename, filetype: string);
  65.   public
  66.     { Public declarations }
  67.   end;
  68. var
  69.   SystemSetForm: TSystemSetForm;
  70. implementation
  71. uses
  72.   RealMessengerImpl;
  73. {$R *.dfm}
  74. function TSystemSetForm.GetAutoRun(): Boolean;
  75. var
  76.   TempReg: TRegistry;
  77. begin
  78.   Result := False;
  79.   TempReg := TRegistry.Create;
  80.   try
  81.     TempReg.RootKey := HKEY_LOCAL_MACHINE;
  82.     if TempReg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', False) then
  83.     begin
  84.       if TempReg.ReadString('易通科技') = Application.ExeName then
  85.         Result := True
  86.     end;
  87.   finally
  88.     TempReg.Free;
  89.   end;
  90. end;
  91. procedure TSystemSetForm.SetAutoRun(IsAutoRun: Boolean);
  92. var
  93.   TempReg: TRegistry;
  94. begin
  95.   TempReg := TRegistry.Create;
  96.   try
  97.     TempReg.RootKey := HKEY_LOCAL_MACHINE;
  98.     if TempReg.OpenKey('SoftwareMicrosoftWindowsCurrentVersionRun', False) then
  99.     begin
  100.       if IsAutoRun then
  101.         TempReg.WriteString('易通科技', Application.ExeName) {设置程序自动启动}
  102.       else
  103.         TempReg.DeleteValue('易通科技'); {取消程序自动启动}
  104.     end;
  105.   finally
  106.     TempReg.Free;
  107.   end;
  108. end;
  109. procedure TSystemSetForm.FormShow(Sender: TObject);
  110. begin
  111.   EDHostName.Text := HostName;
  112.   EDServerPort.Text := IntToStr(ServerPort);
  113.   CBProxyCategory.ItemIndex := Integer(ProxyCategory);
  114.   CBProxyCategoryChange(CBProxyCategory);
  115.   EDProxyAddress.Text := ProxyAddress;
  116.   EDProxyPort.Text := IntToStr(ProxyPort);
  117.   EDProxyUsername.Text := ProxyUsername;
  118.   EDProxyPassword.Text := ProxyPassword;
  119.   CBAutoRun.Checked := GetAutoRun;
  120.   EDMsgSound.Text := MsgSound;
  121.   if DontPlaySound then
  122.   begin
  123.     CBDontPlaySound.Checked := True;
  124.     EDMsgSound.Enabled := False;
  125.     SBSelFile.Enabled := False;
  126.     SBPlay.Enabled := False;
  127.   end;
  128.   EDAutoConnectInterval.Text := IntToStr(AutoConnectInterval);
  129.   if DontAutoConnect then
  130.   begin
  131.     CBDontAutoConnect.Checked := True;
  132.     EDAutoConnectInterval.Enabled := False;
  133.   end;
  134. end;
  135. procedure TSystemSetForm.CBDontPlaySoundClick(Sender: TObject);
  136. begin
  137.   EDMsgSound.Enabled := not CBDontPlaySound.Checked;
  138.   SBSelFile.Enabled := not CBDontPlaySound.Checked;
  139.   SBPlay.Enabled := not CBDontPlaySound.Checked;
  140. end;
  141. procedure TSystemSetForm.CBDontAutoConnectClick(Sender: TObject);
  142. begin
  143.   EDAutoConnectInterval.Enabled := not CBDontAutoConnect.Checked;
  144. end;
  145. procedure TSystemSetForm.SBPlayClick(Sender: TObject);
  146. begin
  147.   PlaySound(PChar(EDMsgSound.Text), 0, SND_ASYNC or SND_FILENAME);
  148. end;
  149. procedure TSystemSetForm.SBSelFileClick(Sender: TObject);
  150. begin
  151.   if OpenDialog1.Execute then EDMsgSound.Text := OpenDialog1.filename;
  152. end;
  153. procedure TSystemSetForm.BitBtn1Click(Sender: TObject);
  154. var
  155.   Port, socksPort, Interval: Integer;
  156.   TempReg: TRegistry;
  157.   ServerInfoChanged: Boolean;
  158.   f: TIniFile;
  159. begin
  160.   f := TIniFile.Create(ExtractFileDir(Application.ExeName) + 'IP_set.ini');
  161.   f.WriteString('netip', 'IP', trim(Edit2.Text));
  162.   f.Free;
  163.   socksPort := ProxyPort;
  164.   if trim(EDHostName.Text) = '' then
  165.   begin
  166.     MessageBox(Handle, '请输入服务器地址!', '提示', MB_ICONINFORMATION);
  167.     Exit;
  168.   end;
  169.   try
  170.     Port := StrToInt(EDServerPort.Text);
  171.     if (Port <= 0) or (Port > 32767) then
  172.     begin
  173.       MessageBox(Handle, '端口号必须为大于0且小于32768的数字!', '提示', MB_ICONINFORMATION);
  174.       Exit;
  175.     end;
  176.   except
  177.     MessageBox(Handle, '端口号必须为数字!', '提示', MB_ICONINFORMATION);
  178.     Exit;
  179.   end;
  180.   if CBProxyCategory.ItemIndex > 0 then
  181.   begin
  182.     if trim(EDProxyAddress.Text) = '' then
  183.     begin
  184.       MessageBox(Handle, '请输入代理服务器地址!', '提示', MB_ICONINFORMATION);
  185.       Exit;
  186.     end;
  187.     try
  188.       socksPort := StrToInt(EDProxyPort.Text);
  189.       if (socksPort <= 0) or (socksPort > 32767) then
  190.       begin
  191.         MessageBox(Handle, '代理服务器端口号必须为大于0且小于32768的数字!', '提示', MB_ICONINFORMATION);
  192.         Exit;
  193.       end;
  194.     except
  195.       MessageBox(Handle, '代理服务器端口号必须为数字!', '提示', MB_ICONINFORMATION);
  196.       Exit;
  197.     end;
  198.   end;
  199.   Interval := 0;
  200.   if not CBDontAutoConnect.Checked then
  201.   begin
  202.     try
  203.       Interval := StrToInt(EDAutoConnectInterval.Text);
  204.       if (Interval <= 0) then
  205.       begin
  206.         MessageBox(Handle, '自动连接时间必须为大于0的数字!', '提示', MB_ICONINFORMATION);
  207.         Exit;
  208.       end;
  209.     except
  210.       MessageBox(Handle, '自动连接时间必须为数字!', '提示', MB_ICONINFORMATION);
  211.       Exit;
  212.     end;
  213.   end;
  214.   SetAutoRun(CBAutoRun.Checked);
  215.   ServerInfoChanged := False;
  216.   TempReg := TRegistry.Create;
  217.   try
  218.     TempReg.RootKey := HKEY_LOCAL_MACHINE;
  219.     if TempReg.OpenKey(AppKey + 'Login', True) then
  220.     begin
  221.       if (HostName <> trim(EDHostName.Text)) or (ServerPort <> Port) then ServerInfoChanged := True;
  222.       HostName := trim(EDHostName.Text);
  223.       ServerPort := Port;
  224.       ProxyCategory := TProxyCategory(CBProxyCategory.ItemIndex);
  225.       ProxyAddress := trim(EDProxyAddress.Text);
  226.       ProxyPort := socksPort;
  227.       ProxyUsername := trim(EDProxyUsername.Text);
  228.       ProxyPassword := trim(EDProxyPassword.Text);
  229.       MsgSound := trim(EDMsgSound.Text);
  230.       DontPlaySound := CBDontPlaySound.Checked;
  231.       if Interval > 0 then AutoConnectInterval := Interval;
  232.       DontAutoConnect := CBDontAutoConnect.Checked;
  233.       TempReg.WriteString('HostName', HostName);
  234.       TempReg.WriteString('ServerPort', IntToStr(ServerPort));
  235.       TempReg.WriteString('ProxyCategory', IntToStr(Integer(ProxyCategory)));
  236.       TempReg.WriteString('ProxyAddress', ProxyAddress);
  237.       TempReg.WriteString('ProxyPort', IntToStr(ProxyPort));
  238.       TempReg.WriteString('ProxyUsername', ProxyUsername);
  239.       TempReg.WriteString('ProxyPassword', ProxyPassword);
  240.       TempReg.WriteString('MsgSound', MsgSound);
  241.       TempReg.WriteString('DontPlaySound', IntToStr(Integer(DontPlaySound)));
  242.       TempReg.WriteString('AutoConnectInterval', IntToStr(AutoConnectInterval));
  243.       TempReg.WriteString('DontAutoConnect', IntToStr(Integer(DontAutoConnect)));
  244.       HostToIP(HostName, HostIP);
  245.       if ProxyAddress <> '' then HostToIP(ProxyAddress, ProxyAddress);
  246.     end;
  247.   finally
  248.     TempReg.Free;
  249.   end;
  250.   ModalResult := mrOK;
  251.   if ServerInfoChanged and (RealMessengerX.MDisconnect.Enabled) then
  252.   begin
  253.     Hide;
  254.     RealMessengerX.MDisconnectClick(nil);
  255.     if MessageBox(Handle, '服务器信息已改动,当前登录已注销,是否使用当前的帐号自动重新登录?', '提示', MB_YESNO or MB_ICONQUESTION) = IDYES then
  256.     begin
  257.       RealMessengerX.TimerAutoConnect.Enabled := False;
  258.       RealMessengerX.MConnect.Enabled := False;
  259.       RealMessengerX.SendIdentity();
  260.     end;
  261.   end;
  262. end;
  263. procedure TSystemSetForm.CBProxyCategoryChange(Sender: TObject);
  264. var
  265.   iLoop: Integer;
  266. begin
  267.   if CBProxyCategory.ItemIndex > 0 then
  268.     for iLoop := 0 to GroupBox1.ControlCount - 1 do GroupBox1.Controls[iLoop].Enabled := True
  269.   else
  270.     for iLoop := 0 to GroupBox1.ControlCount - 1 do GroupBox1.Controls[iLoop].Enabled := False;
  271.   if CBProxyCategory.ItemIndex = Integer(pcHTTP) then
  272.     EDProxyPort.Text := '808'
  273.   else
  274.     EDProxyPort.Text := '1080';
  275. end;
  276. procedure TSystemSetForm.loadskin(filename, filetype: string);
  277. var
  278.   strfile: tstringlist;
  279. begin
  280.   if fileexists(filename) then begin
  281.     strfile := tstringlist.Create;
  282.     RealMessengerX.Skin1.LoadFromIniFile(filename);
  283.     RealMessengerX.bsSkinData1.LoadCompressedStoredSkin(RealMessengerX.Skin1);
  284.     strfile.Add(filetype);
  285.     strfile.SaveToFile(extractfilepath(Application.ExeName) + 'skin.ini');
  286.     strfile.Free;
  287.   end;
  288. end;
  289. procedure TSystemSetForm.FormCreate(Sender: TObject);
  290. var
  291.   Path: string;
  292.   lindex, i, j: Integer;
  293.   sr: TSearchRec;
  294.   lname, m_SkinPath, name: string;
  295.   str: tstringlist;
  296. begin
  297.   lindex := 9999;
  298.   if fileexists(extractfilepath(Application.ExeName) + 'skin.ini') then begin
  299.     try
  300.       str := tstringlist.Create;
  301.       str.LoadFromFile(extractfilepath(Application.ExeName) + 'skin.ini');
  302.       if str.Count > 0 then
  303.         lname := str.Strings[0];
  304.     finally
  305.       str.Free;
  306.     end;
  307.   end;
  308.   Path := extractfilepath(ParamStr(0));
  309.   m_SkinPath := Path + 'MySkins';
  310.   Edit1.Text := m_SkinPath + '*';
  311.   //添加皮肤列表
  312.   if FindFirst(Edit1.Text, faDirectory, sr) = 0 then
  313.   begin
  314.     repeat
  315.         //if (sr.Attr and FileAttrs) = sr.Attr then
  316.       begin
  317.         if (sr.name <> '.') and (sr.name <> '..') then begin
  318.           if sr.name = lname then
  319.             lindex := bsSkinComboBox1.Items.Add(sr.name)
  320.           else
  321.             bsSkinComboBox1.Items.Add(sr.name);
  322.         end;
  323.       end;
  324.     until FindNext(sr) <> 0;
  325.     FindClose(sr);
  326.   end;
  327.   if lindex <> 9999 then
  328.     bsSkinComboBox1.ItemIndex := lindex;
  329. end;
  330. procedure TSystemSetForm.bsSkinComboBox1Change(Sender: TObject);
  331. var
  332.   Path, m_SkinPath, name: string;
  333. begin
  334.   Path := extractfilepath(ParamStr(0));
  335.   m_SkinPath := Path + 'MySkins';
  336.   name := bsSkinComboBox1.Text;
  337.   loadskin(m_SkinPath + name + 'skin.ini', name);
  338. end;
  339. procedure TSystemSetForm.bsSkinButton2Click(Sender: TObject);
  340. begin
  341.   close;
  342. end;
  343. end.