Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TCheckBox.Checked per Schleife (https://www.delphipraxis.net/159989-tcheckbox-checked-per-schleife.html)

markus5766h 21. Apr 2011 19:15

Delphi-Version: 7

TCheckBox.Checked per Schleife
 
Hallo,

kann mir jemand verraten, warum folgender Konstrukt nicht läuft ? :

Code:
procedure TfrmHost.FormShow(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 26 do
   if frmDetect.HddHost[i] then cbHost[i].Checked := True;
   // HddHost[i] : array[1..26] of Boolean
   // cbHost[i] : array[1..26] of TCheckBox
es wird nur der erste zutreffende Wert in HddHost umgesetzt,
bei
Code:
for i := 26 downto 1 do
. . .
entsprechend nur der letzte

HddHost[i] enthält 8 Werte = True, 18 Werte = False

:gruebel: ich steh' irgendwie auf dem Schlauch


. . . Problem gelöst (siehe Post #8), weiß allerdings nicht wodurch . . .

Klaus01 21. Apr 2011 19:23

AW: TCheckBox.Checked per Schleife
 
Hallo,
läuft es ohne if besser?

Delphi-Quellcode:
procedure TfrmHost.FormShow(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 26 do
    cbHost[i].checked := frmDetect.HddHost[i];
   // HddHost[i] : array[1..26]Boolean
   // cbHost[i] : array[1..26] of TCheckBox
Wo werden denn die Werte für frmDetect.HddHost[i] gesetzt?

Grüße
Klaus

Luckie 21. Apr 2011 19:24

AW: TCheckBox.Checked per Schleife
 
Delphi-Quellcode:
if frmDetect.HddHost[i]
Liefert der Ausdruck, denn einen Wahrheitswert zurück?

markus5766h 21. Apr 2011 19:33

AW: TCheckBox.Checked per Schleife
 
Zitat:

Zitat von Luckie (Beitrag 1096417)
Delphi-Quellcode:
if frmDetect.HddHost[i]
Liefert der Ausdruck, denn einen Wahrheitswert zurück?

definitiv ja (hab' mir 'nen Memo auf's Formular gepappt und
bei True eine '1' ausgeben lassen)

@Klaus01: die Werte werden im Formular frmDetect gesetzt (Ini.ReadBool).

Klaus01 21. Apr 2011 19:37

AW: TCheckBox.Checked per Schleife
 
Zitat:

Zitat von markus5766h (Beitrag 1096418)
@Klaus01: die Werte werden im Formular frmDetect gesetzt (Ini.ReadBool).

.. und wann, ist das Einlesen schon fertig wenn das Ereignis onShow passiert?

Grüße
Klaus

markus5766h 21. Apr 2011 19:37

AW: TCheckBox.Checked per Schleife
 
Zitat:

Zitat von Klaus01 (Beitrag 1096416)
Hallo,
läuft es ohne if besser?
. . .

Grüße
Klaus

ja, direkt abgefragt funktioniert's - ich möchte aber ungern (es kommen noch weitere Controls hinzu, die ebenfalls als array behandelt werden sollen) jedes
Control einzeln ansprechen.

Das Einlesen geschieht auf dem Formular frmDetect, die obige Schleifenprozedur ist
auf einer anderen Form (sonst würde ich ja ohne frmDetect aufrufen). Das Memo zum
überprüfen habe ich mir ebenfalls auf das Formular mit den CheckBoxen gelegt, die
Werte sind zum Zeitpunkt des Aufrufs vorhanden, werden nur nicht in einem
array of TCheckBox umgesetzt.

Klaus01 21. Apr 2011 19:49

AW: TCheckBox.Checked per Schleife
 
Delphi-Quellcode:
if frmDetect.HddHost[i] then cbHost[i].Checked := True;
mit dem obigen Code wird die Checkbox in der Liste nur gesetzt wenn hddHost[i] true ist,
wenn er false ist hat die Checkbox einen zufälligen Wert.

Grüße
Klaus

markus5766h 21. Apr 2011 19:55

AW: TCheckBox.Checked per Schleife
 
Zitat:

Zitat von Klaus01 (Beitrag 1096425)
Delphi-Quellcode:
if frmDetect.HddHost[i] then cbHost[i].Checked := True;
mit dem obigen Code wird die Checkbox in der Liste nur gesetzt wenn hddHost[i] true ist,
wenn er false ist hat die Checkbox einen zufälligen Wert.

Grüße
Klaus

. . . mir ging's ja in erster Linie auch nur um das Setzen (Checked) bei HddHost[i] = True, auch mit einer Erweiterung der Abfrage auf 'False' bin ich nicht weitergekommen - hab allerdings in der Zwischenzeit die Prozedur vervollständigt :
Code:
procedure TfrmHost.FormShow(Sender: TObject);
var
  i : Integer;
begin
  for i := 1 to 26 do
    begin
      if frmDetect.HddHost[i] then cbHost[i].Checked := True else cbHost[i].Checked := False;
      if frmDetect.HostEnabled[i] then
       begin
         cbHost[i].Enabled := True;
         cbHost[i].Caption := Char(i +64) + ' ' + GetDriveModelName(Char(i +64));
       end
         else
           begin
             cbHost[i].Enabled := False;
             cbHost[i].Caption := Char(i +64) + ' ';
           end;
    end;
end;
. . . und komischer Weise werden jetzt alle Checkboxen richtig gesetzt. ?:gruebel:

DeddyH 22. Apr 2011 09:41

AW: TCheckBox.Checked per Schleife
 
Zitat:

Delphi-Quellcode:
if frmDetect.HddHost[i] then cbHost[i].Checked := True else cbHost[i].Checked := False;

-->
Delphi-Quellcode:
cbHost[i].Checked := frmDetect.HddHost[i];
Das ist nicht nur kürzer, sondern IMHO auch noch verständlicher.

markus5766h 22. Apr 2011 09:46

AW: TCheckBox.Checked per Schleife
 
.. danke, ja ist verständlicher . . . war wohl schon etwas zu spät.:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.

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