Problem z checkBox'ami

Odpowiedz Nowy wątek
2005-04-13 21:53
0

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

 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.

Pozostało 580 znaków

2005-04-13 22:24
0

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


Grunt to uziemienie...

Pozostało 580 znaków

2005-04-13 22:45
ŁF
0

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


Pozostało 580 znaków

2005-04-13 23:01
0

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

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

można napisać:

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

:P

Pozostało 580 znaków

2005-04-23 01:27
0

Mam lepsze rozwiązanie:

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.


Szymek

<span style="color: blue">"Nie twierdzę, że kobiety są głupie,
zostały stworzone na podobieństwo mężczyzn...
"</span> - George Eliot<span style="color: green">

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0