Ustalenie stylu dla wyłączonych RadioButtonów.

0

Witam. Piszę program w Delphi. Może zacznę od tego, że ten program to zbiór testów multimedialnych.
Obecnie pisze moduł sprawdzający odpowiedzi, które są wybierane poprzez RadioButtony. Ustaliłem więc, że po kliknięciu na przycisk Sprawdź następuje zablokowanie RadioButtonów. Następnie instrukcja pobiera poprawną odpowiedź z pliku i porównuję ją z danym RadioButtonem, na koniec zmienia kolor czcionki na zielony (clGreen). Problem w tym, że po zablokowaniu RadioButtony nie chcą zmienić koloru. Załączam fragment kodu poniżej:

  procedure TExamForm.btnChkAnsClick(Sender: TObject);
    var
      TF : TextFile;
      Chk : String;
    begin
      radAnsA.Enabled := False;
      radAnsB.Enabled := False;
      radAnsC.Enabled := False;
      radAnsD.Enabled := False;

      AssignFile(TF, 'Data\CheckAns.txt');
      Reset(TF);
      Readln(TF, Chk);
      CloseFile(TF);

      if Chk = 'A' then radAnsA.Font.Color := clGreen
        else if Chk = 'B' then radAnsB.Font.Color := clGreen
        else if Chk = 'C' then radAnsC.Font.Color := clGreen
        else if Chk = 'D' then radAnsD.Font.Color := clGreen;
    end;
1

To logiczne. Zmieniasz kolor fontu, a ten przy Enabled ustawionym na False nie będzie uwzględniony. Dlatego jeśli już to zmieniaj własnośc Color całego komponentu. Poza tym to co kombinujesz z if'ami da się zrobić jedną linijką korzystając z funkcji FindComponent.

1

Dokładnie tak jak pisze @olesio, jeżeli komponent jest zablokowany to nie zmienisz mu koloru; Nie wiem, jak jest w podstawowym stylu Windows, ale w Luna jeszcze więcej komponentów jest kontrolowanych i nie można im tak łatwo zmieniać kolorów itp.; Jeżeli chcesz cokolwiek zrobić to odblokuj komponent i dopiero zmień kolor; Jak to Ci nie będzie pasować to rozdziel napis od przycisku i blokuj sam przycisk, a napisowi zmieniaj kolor; Wtedy nie będziesz musiał się bawić z dodatkowym blokowaniem;

Kod podany wcześniej przez Ciebie można skrócić do tego:

procedure TExamForm.btnChkAnsClick(Sender: TObject);
var
  TF : TextFile;
  Chk : String;
  cCounter: Char;
begin
  for cCounter := 'A' to 'D' do
    TRadioButton(FindComponent('radAns' + cCounter)).Enabled := False;

  AssignFile(TF, 'Data\CheckAns.txt');
  Reset(TF);
  Readln(TF, Chk);
  CloseFile(TF);

  for cCounter := 'A' to 'D' do
    if Chk = cCounter then
      TRadioButton(FindComponent('radAns' + cCounter)).Font.Color := clGreen;
end;

W każdym razie ten kod i tak nie zadziała, bo zablokowany komponent nie zmieni koloru; Podałem Ci jedynie sposób, w jakim możesz za pomocą pętli i funkcji FindComponent skrócić kod;

Tak jak pisałem wcześniej rozdziel napis od przycisku i blokuj jedno, a koloruj drugie;

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