Problem z checkBox'ami

redhot5
  • Rejestracja: dni
  • Ostatnio: dni
0

witam mój problem polega na tym że po starcie programu tym kodem

Kopiuj
 Rejestr.RootKey:=(HKEY_CURRENT_USER);
 Rejestr.OpenKey('Software\Start Page IE',False);
 if Rejestr.ReadString('Autostart')='True' then
 Begin
  CheckBox1.Checked:=true;
  CheckBox4.Enabled:=true;
 End
 Else
 Begin
  CheckBox1.Checked:=false;
 End;
 if Rejestr.ReadString('Autoskanowanie')='True' then
 Begin
  CheckBox2.Checked:=true;
 End
 Else
 Begin
  CheckBox2.Checked:=false;
 End;
 if Rejestr.ReadString('Autonaprawa')='True' then
 Begin
  CheckBox3.Checked:=true;
 End
 Else
 Begin
  CheckBox3.Checked:=false;
 End;

progrm włącz tylko 1 ( i zawsze tylko 1 ) checkbox'a mimo że powinien włączyć 3. Czemu? Z góry dzięki.

Adam.Pilorz
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2998
0

Nie byłoby czytelniej, gdybyś nie pisał jednoinstrukcjowych bloków? I jakbyś używał wcięć? Tak to ja nic nie widzę...

ŁF
  • Rejestracja: dni
  • Ostatnio: dni
0

sam sobie znajdź błąd: http://4programmers.net/article.php?id=557

TH
  • Rejestracja: dni
  • Ostatnio: dni
0

Tak BTW, to ten kod jest koszmarny... :)
Zamiast tego:

Kopiuj
 if Rejestr.ReadString('Autostart')='True' then
 begin
  CheckBox1.Checked:=true;
  CheckBox4.Enabled:=true;
 end
 else
 begin
  CheckBox1.Checked:=false;
 end;

można napisać:

Kopiuj
CheckBox1.Checked:=Rejestr.ReadString('Autostart')='True';
CheckBox4.Enabled:=not CheckBox1.Checked;

:P

Szymek
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam lepsze rozwiązanie:

Kopiuj
Procedure TForm1.FormCreate(Sender: TObject);
Var R:TRegistry;
    I:Integer;
Begin
  R:=TRegistry.Create;
  R.RootKey:=(HKEY_CURRENT_USER);
  R.OpenKey('Software\MyApp',True);
  For I:=0 To ComponentCount-1 Do
    If Components[I] Is TCheckBox Then
      Try
        TCheckBox(Components[I]).Checked:=R.ReadBool(Components[I].Name);
      Except
        on Exception Do;
      End;
  R.Free;
End;

Procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
Var R:TRegistry;
    I:Integer;
Begin
  R:=TRegistry.Create;
  R.RootKey:=(HKEY_CURRENT_USER);
  R.OpenKey('Software\MyApp',True);

  For I:=0 To ComponentCount-1 Do
    If Components[I] Is TCheckBox Then
      R.WriteBool(Components[I].Name,TCheckBox(Components[I]).Checked);
  R.Free;
End;

Nie trzeba dbać o zapisanie każdego CheckBoxa. Procedury same zapiszą i odczytają ustawienia.

Przy pierwszym uruchomieniu tylko w IDE może się pluć jeśli nie będzie zapisów w rejestrze, ale jak tylko zostaną zapisane wszystko będzie OK.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.