zliczanie zaznaczonych w checklistbox

0

Witam. Chcę by w labelu wyświetlało ilość zaznaczonych checkboxów w checklistbox, tak by było to zawsze aktualne, na bieżąco. Jak to mogę zrobić? Jest jakaś funkcja która zwraca to w integer czy muszę to jakoś inaczej napisać?

0

O ile się orientuje to pętla i w niej zliczanie coś w stylu:

function TMainForm.HowManyCLBChecked : integer;
var
  I : integer;
begin
  Result := 0;
  for I := 0 to GalleriesCLB.Items.Count - 1 do
  begin
    if GalleriesCLB.Checked[I] then
    begin
      Result := Result + 1;
    end;
  end;
end;
0

Można prościej

function CountChecked(): Integer;
var I : Integer;
begin
  Result := 0;
  for I := 0 to GalleriesCLB.Items.Count - 1 do
    Inc(Result, - (StrToInt(BoolToStr(GalleriesCLB.Checked[I]))));
end;

_

0

Chyba powinno być:

function CountChecked(): Integer;
var I : Integer;
begin
  Result := 0;
  for I := 0 to GalleriesCLB.Items.Count - 1 do
    Inc(Result, - (StrToInt(BoolToStr(GalleriesCLB.Checked[I]))));

end;

0

Można prościej

  Inc(Result,Integer(GalleriesCLB.Checked[I]));
0

Inc(Result, - (StrToInt(BoolToStr(GalleriesCLB.Checked[I]))));

Można prościej: if GalleriesCLB.Checked[i] then inc(result);
Wasze omijanie ifa robi więcej problemów niż przyśpiesza (tak bardzo istotny element programu) jak zliczanie paru(nastu) checkboxów.

Inc(Result,Integer(GalleriesCLB.Checked[I]));

Można, tylko po co, skoro można zapisać to za pomocą ifa zamiast przez pare(naście?) minut ślęczeć i modyfikować kod?

Widzę że macie spore problemy skoro ze zliczania checkboxów robicie wyścigi...

0

Użyłem pierwszej metody od olesio bo ten kod przynajmniej rozumiem i będę umiał modyfikować, wolę z IF.

Dziękuję, działa super

0
GalleriesCLB.Checked[I]

Checked to jest tablica Boolean, czyli wartości True/False.

Integer(GalleriesCLB.Checked[I]);

To jest rzutowanie na Integer, 1 dla True i 0 dla False.

Inc(Result,Integer(GalleriesCLB.Checked[I]));

Procedura Inc zwiększa zmienną podaną w pierwszym parametrze o wartość drugiego parametru.

0

Nie ma to jak optymalizacja (if czy rzutowanie boolean na integer) aż się płakać chce:
Na if:

user image

Rzutowanie:

user image

Teraz sobie odpowiedźcie sobie sami który kod jest czytelniejszy i co zaoszczędziliście przez tą "optymalizację".

0

To jest tak jasne, że aż się płakać chce.

Chciałem tylko pokazać, że jeżeli już robić to bez if to

Inc(Result,Integer(GalleriesCLB.Checked[I]));

jest lepszym rozwiązaniem, niż

Inc(Result, - (StrToInt(BoolToStr(GalleriesCLB.Checked[I]))));

A wymyślenie tego zajęło mi mniej czasu niż napisanie tego postu.

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