zliczanie zaznaczonych w checklistbox

Odpowiedz Nowy wątek
2011-08-01 13:46
Dlna
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ć?

Pozostało 580 znaków

2011-08-01 14:46
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;

Pozostało 580 znaków

2011-08-02 09:27
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;

_


char mander; bool basaur;
edytowany 2x, ostatnio: TomRiddle, 2011-08-02 09:31

Pozostało 580 znaków

2011-08-02 09:27
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;

tak, masz rację... - TomRiddle 2011-08-02 09:27

Pozostało 580 znaków

2011-08-02 10:05
0

Można prościej

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

Pozostało 580 znaków

2011-08-02 10:42
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...


Nie pisz do mnie PM o czymś co nie dotyczy bezpośrednio mnie. | Nie rozmawiaj ze mną jeśli brak Ci kultury (wystarczy że mi brakuje) | Nie jestem zły, jestem po prostu zły.
edytowany 1x, ostatnio: payl, 2011-08-02 10:42
Coś taki nie w sosie dziś? - O_o 2011-08-02 10:57
Ja zawsze taki jestem. Ale nie wyspałem się więc mam mniejszą poprzeczkę pomiędzy debilizm_ale_ujdzie a debilzm_ktory_trzeba_tepic. ;) - payl 2011-08-02 11:08

Pozostało 580 znaków

2011-08-02 13:09
Dlna
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

Pozostało 580 znaków

2011-08-02 13:27
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.


char mander; bool basaur;
edytowany 1x, ostatnio: TomRiddle, 2011-08-02 13:31

Pozostało 580 znaków

2011-08-02 14:14
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ę".


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2011-08-02 18:32
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.

A ja mam jakieś zboczenie psychiczne, i nie lubię jak jest dużo kodu (@olesio: lub dużo tekstu) - TomRiddle 2011-08-02 19:05

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