Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Checkboxen mit gleichem Boolean-Wert zählen (https://www.delphipraxis.net/80279-checkboxen-mit-gleichem-boolean-wert-zaehlen.html)

Tumm 6. Nov 2006 14:40


Checkboxen mit gleichem Boolean-Wert zählen
 
Hi

Ich habe ein Programm geschrieben, in dem 29 Checkboxen sind. Wie kann ich (anhand eines Integers) alle CheckBoxen mit dem gleichen Boolean-Wert zählen? :?:

Beispiel: Alle Checkboxen zählen, die auf 'False' gesetzt sind.

Tumm

Balu der Bär 6. Nov 2006 14:41

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Mit Hier im Forum suchenFindComponent alle Boxen in einer for-Schleife durchgehen, falls Box auf False steht (was immer du dmit meinst) => Inc(i).

Tumm 6. Nov 2006 14:46

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Das hab' ich schon probiert. Aber Delphi meint, dass die Eigenschaft 'Checked' undefiniert sei.

Balu der Bär 6. Nov 2006 14:46

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Zeig doch mal her was du versucht hast, meine Glaskugeln ist im Urlaub. :zwinker: ;)

Tumm 6. Nov 2006 14:47

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Delphi-Quellcode:
if FindComponent('CheckBox' + IntToStr(c1)).Checked = true then

...

Neutral General 6. Nov 2006 14:48

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Delphi-Quellcode:
if TCheckbox(FindComponent('CheckBox' + IntToStr(c1))).Checked = true then
;)

Tumm 6. Nov 2006 14:49

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Danke, es funzt!

Tumm 23. Nov 2006 17:27

In einer Schleife - Checkboxen auslesen
 
Hi

Ich hab das so angewendet:
Delphi-Quellcode:
while c3 < 29 do begin
Inc(c3);
if TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Checked = true then begin
if durckm.ItemIndex = 1 then
a.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgeben!') else
Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!');
end else begin
if durckm.ItemIndex = 1 then
na.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat nicht abgegeben!');
Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!');
end;
end;
c3 = Integer, a = Tstrings, na = Tstrings, Memo1 = Memo

Aber es geht nich! (Zugriffsverletzung) :(

jakobwenzel 23. Nov 2006 17:47

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Schon mal was von Debuggen gehört?

Neutral General 23. Nov 2006 17:49

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Wo hast du C3 definiert? Lokal oder? Hast du C3 auch vorher auf 0 gesetzt weil sonst ist C3 nicht initialisiert und da kommt nicht viel gutes bei raus ;)

Tumm 23. Nov 2006 17:50

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
nich richtig

ich hab c3 nicht in der Prozedur deklariert. Auf 0 gesetzt hab ichs aber.

Die Muhkuh 23. Nov 2006 17:50

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Was ist nicht richtig?

Tumm 23. Nov 2006 17:51

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Noch nicht richtig was von debuggen gehört.
Is irgendwie noobig, kann ich mir gut vorstellen.

Mumpe 24. Nov 2006 09:07

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Hast Du denn wirklich alle Checkboxen richtig benannt?

Du kannst Deinen Code vielleicht auch so ändern, dass Du zunächst mal prüfst, ob die Checkbox des gesuchten Namens überhaupt vorhanden ist:

Delphi-Quellcode:
while c3 < 29 do begin
Inc(c3);
if FindComponent('CheckBox' + IntToStr(c3))<>nil then begin
   if TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Checked = true then begin
      if durckm.ItemIndex = 1 
         then a.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgeben!')
         else Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!');
   end else begin
       if durckm.ItemIndex = 1 
          then na.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat nicht abgegeben!');
       Memo1.Lines.Add(TCheckbox(FindComponent('CheckBox' + IntToStr(c3))).Caption + ' hat abgegeben!');
   end;
end else ShowMessage('CheckBox' + IntToStr(c3)+' existiert nicht!');
end;

shmia 24. Nov 2006 10:12

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Hallo, das ist ja grausamer Code hier.
Es muss doch auffallen wenn man 6 Mal das Gleiche hinschreibt.
Lokale Variablen sind die Lösung.
Delphi-Quellcode:
var
   comp : TComponent;
   cb : TCheckbox;
....
   comp := FindComponent('CheckBox' + IntToStr(c3));
   if Assigned(comp) then
   begin
      cb := comp as TCheckbox;
      // und jetzt wird nur noch mit cb gearbeitet!!

Tumm 24. Nov 2006 14:52

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Der Quellcode da liefert aber auch nicht das wahre: Delphi meint, dass

Delphi-Quellcode:
comp := FindComponent('CheckBox' + IntToStr(c3));
gefälligst mit einer Klammer statt ':=' (Zuweisungsoperator) geschrieben werden soll.

Delphi-Quellcode:
Assigned(comp)
liefert auch einen Fehler (nein, nein, es liegt nicht am fehlenden Semikolon).

Bei 'as' gibts auch ein Fehler.

Also ich habs insgesamt so angewendet (Vorher natürlich auch lokal die Variablen deklariert):

Delphi-Quellcode:
while c3 < 29 do begin
comp := FindComponent('CheckBox' + IntToStr(c3));
if Assigned(comp) then begin
cb := comp as TCheckbox;
if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else
na.Add(cb.Caption + ' hat nicht abgegeben!');
end;
end;

shmia 24. Nov 2006 15:33

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Zitat:

Zitat von Tumm
Der Quellcode da liefert aber auch nicht das wahre...

Ich verstehe deinen Einwand nicht, am Ende steht doch genau das da, was ich geschrieben habe.
Dass zwischen Variablendeklaration und den Anweisungen nur 4 Punkte stehen, sollte eigentlich zum Mitdenken anregen...

Tumm 24. Nov 2006 15:56

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Ich meine nicht, dass er nicht das gewünschte Ergebnis liefert sondern das diese Fehler auftreten

Mumpe 24. Nov 2006 16:12

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Wow, schwere Geburt. :roll:

Was shmia meint, sieht im Endeffekt dann so aus:
Delphi-Quellcode:
procedure TForm1.wasweissich;
var
   comp : TComponent;
   cb : TCheckbox;
   c3 : integer;
begin
c3:=0;
while c3 < 29 do begin
   comp := FindComponent('CheckBox' + IntToStr(c3));
   if Assigned(comp) then begin
   if cb.CHecked = true then a.Add(cb.Caption + ' hat abgegeben!') else
   na.Add(cb.Caption + ' hat nicht abgegeben!');
   end;
end;
end;
Und wenn Du das so machst, bekommst Du immer noch eine Zugriffsverletzung?

Tumm 24. Nov 2006 16:48

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
So dumm bin ich dann doch wieder nicht.

Ja, es gibt immer noch Fehler.

Balu der Bär 24. Nov 2006 16:57

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Schnell getippt, versuch mal in der Art:
Delphi-Quellcode:
while c3 < 29 do begin
   comp := (FindComponent('Checkbox' + IntToStr(c3)) as TCheckbox);
   if Assigned(comp) then
    begin
     if comp.Checked = true then a.Add(comp.Caption + ' hat abgegeben!') else
      na.Add(comp.Caption + ' hat nicht abgegeben!');
   end;

gmc616 24. Nov 2006 16:58

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Ich würde mich als Delphi auch beschweren, da cb= NULL ist.
du musst comp auf cb als TCheckbox casten.

Delphi-Quellcode:
procedure TForm1.wasweissich;
var
   comp : TComponent;
   cb : TCheckbox;
   c3 : integer;
begin
c3:=0;
while c3 < 29 do begin
  comp := FindComponent('CheckBox' + IntToStr(c3));
  if Assigned(comp) then
  begin
   
    cb := comp as TCheckbox; // <-- 
   
    if cb.CHecked = true then
       a.Add(cb.Caption + ' hat abgegeben!')
    else
       na.Add(cb.Caption + ' hat nicht abgegeben!');
    end;
  end;
  inc (c3); // <-- nicht vergessen
end;

Tumm 24. Nov 2006 17:43

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Manno, funzt immer noch nicht! :(

Balu der Bär 24. Nov 2006 17:45

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Hallo? Liest du auch was ich schreibe?? :roll:

comp := (FindComponent('Checkbox' + IntToStr(c3)) as TCheckbox);

gmc616 24. Nov 2006 17:55

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
laut deinem Screeshot hast in TForm24.Button13Click einen Fehler.

Du hast
Delphi-Quellcode:
comb : TComponent;
deklariert. Es müßte aber
Delphi-Quellcode:
comp : TComponent;
heißen.
comb <> comp!

Wieso sich der Compiler nicht beschwert ... :gruebel:

Tumm 24. Nov 2006 17:58

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Boa, ich nehm zurück dass ich nicht blöd bin...

Ist wahrscheinlich irgendwie ne' Systemvariable oder sowas...

Jetzt geht'ts. Aber ne' Zugriffsverletzung kommt trotzdem noch...

@Balu der Bär
Ich lese deins natürlich auch. Aber es hat halt nicht funktioniert, wegen diesem Abschreibfehler...

Danke! :-D

gmc616 24. Nov 2006 18:01

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Zitat:

Zitat von Tumm
Jetzt geht'ts. Aber ne' Zugriffsverletzung kommt trotzdem noch...

ja was denn nun? Geht's oder geht nicht ?

Balu der Bär 24. Nov 2006 18:05

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Bei welchem Code kommt die Exception?

Mal blind getippt: Bist du sicher das die jeweiligen Checkboxen mit den entsprechenden Nummern auch existieren?

Tumm 24. Nov 2006 18:39

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Also ich bin mir schon mal sicher dass sie existieren. Ich hab sie alle

CheckBox(+X)

genannt.

Tumm 24. Nov 2006 18:41

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Delphi-Quellcode:
c3 := 0;
c3 := 1;
while c3 < 29 do begin
comp := (FindComponent('CheckBox' + IntToStr(c3)) as TCheckbox);
if Assigned(comp) then
begin
cb := comp as TCheckbox; // <--
if cb.CHecked = true then
a.Add(cb.Caption + ' hat abgegeben!')
else
na.Add(cb.Caption + ' hat nicht abgegeben!');
end;
inc (c3); // <-- nicht vergessen
end;
Memo1.Lines.AddStrings(a);
Memo1.Lines.Add('');
Memo1.Lines.AddStrings(na);
Memo1.Lines.Add('');
Memo1.Lines.Add(Label6.Caption);
Memo1.Lines.Add(Label7.Caption);
Memo1.Lines.Add('');
Memo1.Lines.Add('Gesamt: ' + IntToStr(ja + nein));
printer.Canvas.Font.Size := 12;
if f2 = false then begin
for c2 := 0 to memo1.lines.count -1 do Begin
  printer.canvas.textout( 0, c2 * printer.Canvas.TextHeight( Memo1.Lines[c2] ) , Memo1.Lines[c2]);
End;
printer.EndDoc;
f2: Boolean

himitsu 24. Nov 2006 18:44

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
CheckBox0 existiert?

PS: geht doch einfach mal Schrittweise [F7] durch und schau wo und vorallem mit welchen Werten der Fehler auftritt.

Tumm 24. Nov 2006 18:46

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Achso: Delphi sagt außerdem noch, dass

Zitat:

Auf 'c3' zugewiesener Wert wird niemals benutzt
Wird es aber als Bedingung in der While-Schleife und als Counter.

Tumm 24. Nov 2006 18:53

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Ich hab' mal schrittweise gemacht. Aber inerhalb der Fehöer-Prozedur macht er plötzlich einen Sprung im Source als hätte ich einen Goto-Befehl eingesetzt.

Den ersten Teil der Schleife durchläuft er, den zweiten überspringt er irgendwie (Nur das Inc(c3))

Mumpe 24. Nov 2006 18:54

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Zitat:

Zitat von Tumm
Achso: Delphi sagt außerdem noch, dass

Zitat:

Auf 'c3' zugewiesener Wert wird niemals benutzt
Wird es aber als Bedingung in der While-Schleife und als Counter.

Das bezieht sich auf Dein
Delphi-Quellcode:
c3:=0;
Änder mal den Namen der Variablen "comp" in "compo", vielleicht kollidiert das "comp" mit der Typenbezeichnung.

Balu der Bär 24. Nov 2006 18:54

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Vermutlich wird am besten für uns alle sein wenn du dein Projekt mal hier anhängst.

Mumpe 24. Nov 2006 18:57

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Zitat:

Zitat von Balu der Bär
Vermutlich wird am besten für uns alle sein wenn du dein Projekt mal hier anhängst.

:mrgreen: Ein wahres Wort gelassen ausgesprochen.

Tumm 24. Nov 2006 19:01

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Liste der Anhänge anzeigen (Anzahl: 1)
OK

(Ohne .dfm und .dcu)

Tumm 24. Nov 2006 19:08

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
P.S: Es sind einige unendliche lange Absätze drin, da ich schon oft das Problem mit den Checkboxen hatte und deswegen sie nicht in eine Schleife gemacht hab.

Macht aber auf Dauer bischen zu viel Arbeit

Balu der Bär 24. Nov 2006 19:09

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Tut mir Leid aber ich kann mit dem Projekt nichts anfangen, da durch deine Umbenennaktion das Projekt nicht mehr kompiliert werden kann. Da du hier Hilfe von uns erwartest, sollte du vielleicht mal drüber nachdenken den Datenschutz (!) etwas zu reduzieren und uns stattdessen etwas Brauchbares anzubieten. :roll:

P.S.: Du kannst Beiträge auch editieren um Doppelposts zu vermeiden
P.P.S: Schonmal etwas von Codeeinrückung gehört?

Mumpe 24. Nov 2006 19:10

Re: Checkboxen mit gleichem Boolean-Wert zählen
 
Eine Sache fällt mir auf.
Du müsstest die Zeile
Delphi-Quellcode:
while c3 < 29 do begin
in
Delphi-Quellcode:
while c3 <= 29 do begin
ändern, da die Schleife sonst die CheckBox29 nicht erreichen würde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz