home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / StartRight / source.zip / UnitFrmOptions.pas < prev    next >
Pascal/Delphi Source File  |  2004-10-08  |  7KB  |  238 lines

  1. unit UnitFrmOptions;
  2. {
  3.     Purpose:
  4.         Save all the options to an INI file and automatically load the items
  5.         when created
  6. }
  7.  
  8. interface
  9.  
  10. uses
  11.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  12.   Dialogs, StdCtrls, INIFiles, Registry, UnitMyRegistry, ComCtrls;
  13.  
  14. type
  15.   TFrmOptions = class(TForm)
  16.     bSave: TButton;
  17.     bCancel: TButton;
  18.     cbShowStartupDialog: TCheckBox;
  19.     cbDisableSysTrayNotification: TCheckBox;
  20.     cbAutoDisable: TCheckBox;
  21.     cbDisableMoveDialog: TCheckBox;
  22.     Label4: TLabel;
  23.     GroupBox1: TGroupBox;
  24.     Label1: TLabel;
  25.     txtIntInitPause: TEdit;
  26.     Label3: TLabel;
  27.     txtIntRunkeyPause: TEdit;
  28.     Label2: TLabel;
  29.     txtIntStartupPause: TEdit;
  30.     cbDisableAutoTune: TCheckBox;
  31.     procedure bCancelClick(Sender: TObject);
  32.     procedure bSaveClick(Sender: TObject);
  33.     procedure FormCreate(Sender: TObject);
  34.     procedure FormShow(Sender: TObject);
  35.   private
  36.     { Private declarations }
  37.     filename : string;
  38.     r : TMyRegistry;
  39.     DisableAutoTune : boolean;
  40.     procedure ProcessRegistryWrite(key_value : string; data : string); overload;
  41.     procedure ProcessRegistryWrite(key_value : string; data : integer); overload;
  42.     function ProcessRegistryRead(key_value : string) : string;
  43.     procedure ProcessRegistry(ReadOnly : boolean; key_value : string; var data : string; IsIntegerData : boolean = false);
  44.   public
  45.     { Public declarations }
  46.     procedure SetAutoTuneDisabled;
  47.   end;
  48.  
  49. var
  50.   FrmOptions: TFrmOptions;
  51.  
  52. implementation
  53.  
  54. uses UnitMyKeys;
  55.  
  56.  
  57. {$R *.dfm}
  58.  
  59. procedure TFrmOptions.bCancelClick(Sender: TObject);
  60. begin
  61.     self.ModalResult := mrOk;
  62. end;
  63.  
  64. procedure TFrmOptions.bSaveClick(Sender: TObject);
  65. var i : integer;
  66.     c : TComponent;
  67.     ini : TInifile;
  68.     s : string;
  69. const pname = 'StartRight';
  70. begin
  71.     try
  72.         StrToInt(txtIntRunkeyPause.text);
  73.         StrToInt(txtIntStartupPause.text);
  74.         StrToInt(txtIntInitPause.text);
  75.     except on e : exception do
  76.         begin
  77.             ShowMessage('Millisecond fields must be numbers only');
  78.             EXIT;
  79.         end;
  80.     end;
  81.  
  82.     ini := TInifile.create(self.filename);
  83.  
  84.     for i := 0 to self.ComponentCount - 1 do begin
  85.         c := self.Components[i];
  86.         s := '';
  87.  
  88.         if (c is TCheckBox) then begin
  89.             ini.WriteBool(TCheckBox(c).Name, TCheckBox(c).Name, TCheckBox(c).Checked);
  90.         end else if (c is TEdit) then begin
  91.             if pos('txtInt', TEdit(c).Name) <> 0 then begin
  92.                 ProcessRegistryWrite(TEdit(c).Hint, StrToInt(TEdit(c).text));
  93.             end else begin
  94.                 ProcessRegistryWrite(TEdit(c).Hint, TEdit(c).text);
  95.             end;
  96.             ini.WriteString(TEdit(c).Name, TEdit(c).Name, TEdit(c).text);
  97.  
  98.         end else if (c is TRadioButton) then begin
  99.             ini.WriteBool(TRadioButton(c).Name, TRadioButton(c).Name, TRadioButton(c).Checked);
  100.         end;
  101.     end;
  102.  
  103.     ini.Free;
  104.  
  105.     self.ModalResult := mrOk;
  106. end;
  107.  
  108. procedure TFrmOptions.FormCreate(Sender: TObject);
  109. var i : integer;
  110.     c : TComponent;
  111.     ini : TInifile;
  112. const pname = 'StartRight';
  113. begin
  114.     r := TMyRegistry.Create;
  115.  
  116.     self.filename := IncludeTrailingPathDelimiter(
  117.         ExtractFilePath(Application.ExeName)
  118.         ) + 'options.ini';
  119.  
  120.     ini := TInifile.create(self.filename);
  121.  
  122.     for i := 0 to self.ComponentCount - 1 do begin
  123.         c := self.Components[i];
  124.  
  125.         if (c is TCheckBox) then begin
  126.             TCheckbox(c).Checked := ini.ReadBool(TCheckbox(c).Name, TCheckbox(c).Name, false);
  127.         end else if (c is TEdit) then begin
  128.             TEdit(c).text := ini.ReadString(TEdit(c).Name, TEdit(c).Name, '');
  129.             if TEdit(c).hint <> '' then begin
  130.                 TEdit(c).text := ProcessRegistryRead(TEdit(c).Hint);
  131.             end;
  132.         end else if (c is TRadioButton) then begin
  133.             TRadioButton(c).Checked := ini.ReadBool(TRadioButton(c).Name, TRadioButton(c).Name, false);
  134.         end;
  135.     end;
  136.  
  137.     ini.Free;
  138.  
  139.     if self.DisableAutoTune then begin
  140.         self.cbDisableAutoTune.Checked := true;
  141.     end;
  142. end;
  143.  
  144.  
  145.  
  146.  
  147. procedure TFrmOptions.FormShow(Sender: TObject);
  148. begin
  149.     self.FormCreate(self);
  150. end;
  151.  
  152.  
  153.  
  154. procedure TFrmOptions.ProcessRegistry(ReadOnly : boolean; key_value : string; var data : string; isIntegerData : boolean);
  155. var key, value : string;
  156.     i, slashPos : integer;
  157. begin
  158.     if (key_value = '') then EXIT;
  159.  
  160.     slashPos := 0;
  161.     for i := length(key_value) downto 1 do begin
  162.         if (key_value[i] = '\') then begin
  163.             slashPos := i;
  164.             BREAK;
  165.         end;
  166.     end;
  167.  
  168.     if (slashPos <> 0) then begin
  169.         // chopy before and after the last slash
  170.         key := Copy(key_value, 1, slashPos - 1);
  171.         value := StringReplace(key_value, key + '\', '',[]);
  172.         key := IncludeTrailingPathDelimiter(UnitMyKeys.SR_HOME_KEY) + key;
  173.     end else begin
  174.         key := UnitMyKeys.SR_HOME_KEY;
  175.         value := key_value;
  176.     end;
  177.  
  178.     if ReadOnly then begin
  179.         try
  180.             data := r.GetDataString(key, value);
  181.         except on e : exception do begin
  182.             try
  183.                 data := IntToStr(r.GetDataInteger(key, value));
  184.             except on e : exception do begin
  185.                 ShowMessage(
  186.                     e.message + #13#10 +
  187.                     'Unable to read registry item: ' + value
  188.                     );
  189.                 end;
  190.             end;
  191.  
  192.             end;
  193.         end;
  194.     end else begin
  195.         try
  196.             if IsIntegerData then begin
  197.                 r.SetDataInteger(key, value, StrToInt(data));
  198.             end else begin
  199.                 r.SetDataString(key, value, data);
  200.             end;
  201.         except on e : exception do
  202.             begin
  203.                 ShowMessage('Registry write failed' +#13#10 +
  204.                     e.message);
  205.             end;
  206.         end;
  207.     end;
  208. end;
  209.  
  210. function TFrmOptions.ProcessRegistryRead(key_value : string) : string;
  211. var data : string;
  212. begin
  213.     ProcessRegistry(True, key_value, data);
  214.     result := data;
  215. end;
  216. procedure TFrmOptions.ProcessRegistryWrite(key_value : string; data : string);
  217. begin
  218.     ProcessRegistry(False, key_value, data);
  219. end;
  220.  
  221.  
  222.  
  223. procedure TFrmOptions.ProcessRegistryWrite(key_value: string;
  224.   data: integer);
  225. var s : string;
  226. begin
  227.     s := IntToStr(data);
  228.     ProcessRegistry(False, key_value, s, true);
  229. end;
  230.  
  231. procedure TFrmOptions.SetAutoTuneDisabled;
  232. begin
  233.     self.cbDisableAutoTune.Checked := true;
  234.     self.DisableAutoTune := true;
  235. end;
  236.  
  237. end.
  238.