kolor tekstu + styl xp = nie dziala :/

0

Mam taki problem. Na formie mam dużo checkboxów i jesli mają stan inny niż początkowy zapisany w tablicy to zmienia się kolor tekstu na niebieski. Wszystko pięknie działa ale jak dodam komponent xpman żeby włączyć style xp to kolor się juz nie zmienia. Co jest grane? Czy da sie to jakoś ominąć?

procedure Tokno_glowne.sprawdz_checkbox(Sender: TObject);
var
I:integer;
begin
 for I:=0 to ComponentCount-1 do
    if Components[I] is TCheckBox  then
      begin
        if Tablica_CheckBox[I]=TCheckBox(Components[I]).Checked then        
            TCheckBox(Components[I]).Font.Color:=clBlack      
        else         
            TCheckBox(Components[I]).Font.Color:=clBlue;          
      end;
end;
0

chyba bardziej powinno być:

procedure Tokno_glowne.sprawdz_checkbox(Sender: TObject);
var
I,J:integer;
begin
  J:=0;
  for I:=0 to ComponentCount-1 do
    if Components[I] is TCheckBox  then begin
      if (J<Length(Tablica_CheckBox)) and
       (Tablica_CheckBox[J]=TCheckBox(Components[J]).Checked) then        
        TCheckBox(Components[J]).Font.Color:=clBlack      
      else         
        TCheckBox(Components[J]).Font.Color:=clBlue;          
      Inc(J);
    end;
end;

a może kolor przyjmuje już kolor ze stylu XP bo komponent jest zwalony, przypisujesz te kolory w oncreate czy gdzie ? spróbuj pod jakiś button wsadzić bo w oncreate może się ten komponent podpina. Swoją drogą to wydaje mi się że twój kod dobrze działać może tylko jak masz szczęście albo na formie są same checkboxy, może odczytuje ten komponent i już masz sieczkę w pętli to tym bardziej popraw na moją wersję - tylko wymaga ona też odp sposobu zapisywania bo nie wiem jak ty zapisujesz
swoją drogą to ten komponent dodaje manifest czy robi "styl XP" pod każdym win'em ? jeśli to pierwsze to spróbuj dodać osobny plik "*.exe.manifest" zamiast tego komponentu

// tak się zastanawiając to powinieneś otrzymać Access Violation jak na formie jest więcej komponentów więc jakim cudem po prostu zostaje kolor ?

0

Twoja procedurka raczej nie bedzie działac bo pod J nie zawsze bedzie checkbox... ale nie sprawdzałem jej. Moja jest jak najbardziej prawidłowa. Przy starcie z rejestru odczytuje pozycje checkboxów po czym dodaje ich stany do tablicy

for I:=0 to ComponentCount-1 do
    if Components[I] is TCheckBox then Tablica_CheckBox[I]:= TCheckBox(Components[I]).Checked;

potem podpinam tą procedurke w onclick kazdego checkboxa

procedure Tokno_glowne.sprawdz_checkbox(Sender: TObject);
var
I:integer;
begin
 for I:=0 to ComponentCount-1 do
    if Components[I] is TCheckBox  then
      begin
        if Tablica_CheckBox[I]=TCheckBox(Components[I]).Checked then
          TCheckBox(Components[I]).Font.Color:=clBlack
        else
          TCheckBox(Components[I]).Font.Color:=clBlue;
        end;
end;

i tym sposobem wiem które checkboxy się zmieniły. Problem w tym że chyba kolory ze stylu są ważniejsze niż te nadawane programowo czy nawet w trakcie tworzenia w object inspoctorze. Więc czy jakiś sposób zeby to ominąć?

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