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 viele viele Checkboxes (https://www.delphipraxis.net/1309-viele-viele-checkboxes.html)

Pilrich 13. Nov 2002 09:57


viele viele Checkboxes
 
Hab ein kleines Problem:
Ich hab 16 CheckBoxes deren Zustand checked oder not checked abspeichern will.
Wie geht das am einfachsten ohne dass man für CheckBox1, CheckBox2 etc. eine Abfrage schreiben muss?

if sender.checked = true then --> funktioniert nicht

Danke für eure Hilfe!
Pilrich

Yheeky 13. Nov 2002 10:13

Hi,

meinst du das?

Code:
procedure TForm1.CheckBoxClick(Sender: TObject);
begin
if TCheckBox(Sender).Checked = True then
Memo1.Lines.Add(TCheckBox(Sender).Caption);

end;
Du musst jeder betreffenden CheckBox bei OnClick diese Procedure zuweisen, dann klappt´s...

Gruß Yheeky

Pilrich 13. Nov 2002 11:19

ja genau das hab ich gebraucht! Dankeschön!

Und geht es auch irgendwie in eine Datei die Zustände von den Checkboxen zu speichern und aus der Datei wieder auszulesen? Ohne dass man so auf die Art das machen muss wie:

if Datei.Strings[0] = '0' then
CheckBox1.Checked := false;
else
CheckBox1.Checked := true;

if Datei.Strings[1] = '0' then
CheckBox2.Checked := false;
else
CheckBox2.Checked := true;

a.) gibt es eine Möglichkeit mit einer Variablen zu arbeiten??
if Datei.Strings[variable] = '0' then
CheckBox(variable).Checked := false;
else
CheckBox(variable).Checked := true;

b.) sollte man es völlig anders abspeichern und laden??


Pilrich

sakura 13. Nov 2002 11:28

Wenn Du die Checkboxen von 1 bis z.B. 15 durchnummerierst (CheckBox__), dann

Delphi-Quellcode:
procedure TForm1.SaveCheckBoxes;
var
  I: Integer;
begin
  for I := 1 to 15 do
    Datei.Add(IntToStr(Integer(TCheckBox(FindComponent('CheckBox' + IntToStr(I))).Checked)));
end;

procedure TForm1.LoadCheckBoxes;
var
  I: Integer;
begin
  for I := 1 to 15 do
    TCheckBox(FindComponent('CheckBox' + IntToStr(I))).Checked := Datei[I] = '-1';
end;

Christian Seehase 13. Nov 2002 11:53

Moin Zusammen,

das Speichern/Laden liesse sich mit Hilfe einer INI Datei unter Verwendung von WriteBool/ReadBool noch etwas vereinfachen.

Das direkte Setzen der Eigenschaft Checked kann allerdings von Nachteil sein, wenn man eine TCheckBox.OnClick Routine für die Checkboxen benutzt, da durch die Zuweisung eines Wertes an Checked diese ausgelöst wird.

Das setzen von State bzw. die Verwendung von
SendMessage(CheckBox.Handle,BM_SETCHECK,BST_CHECKE D oder BST_UNCHECKED,0);
kann hier Abhilfe schaffen.

sakura 13. Nov 2002 12:00

@Christian

Zitat:

Zitat von Christian Seehase
Das direkte Setzen der Eigenschaft Checked kann allerdings von Nachteil sein, wenn man eine TCheckBox.OnClick Routine für die Checkboxen benutzt, da durch die Zuweisung eines Wertes an Checked diese ausgelöst wird.

:shock: Man(n) lernt ja nie aus - der war mir wirklich neu. Da habe ich einfach noch nie drauf geachtet - aber das erklärt so manches. Ist wohl so, wenn man nur selten Front-Apps entwickelt.

Danke :firejump:

...:cat:...

Christian Seehase 13. Nov 2002 12:13

Moin sakura,

Zitat:

Zitat von sakura
aber das erklärt so manches

ja, so manche Endlosschleifen haben ganz seltsame Ursachen. ;-)

Eine Einschränkung hatte ich noch vergessen:
Das Event wird nur ausgelöst, wenn sich durch die Zuweisung der Wert vo n Checked ändert.

sakura 13. Nov 2002 12:18

Hi

Zitat:

Zitat von Christian Seehase
ja, so manche Endlosschleifen haben ganz seltsame Ursachen. ;-)

Endlosschleifen hatte ich dadurch zwar noch nicht, dann hätte ich es wohl gemerkt, aber wirklich (bis heute) unerklärliche Nebeneffekte. :lol:

Jens Schumann 18. Jul 2004 15:11

Zitat:

Zitat von Christian Seehase
Moin sakura,

Zitat:

Zitat von sakura
aber das erklärt so manches

ja, so manche Endlosschleifen haben ganz seltsame Ursachen. ;-)

Eine Einschränkung hatte ich noch vergessen:
Das Event wird nur ausgelöst, wenn sich durch die Zuweisung der Wert vo n Checked ändert.

Dummerweise wird aber der Wert von Checked nicht verändert !!!
Von
Code:
SendMessage(CheckBox.Handle,BM_SETCHECK,BST_CHECKED oder BST_UNCHECKED,0);
wird nur der Haken gezeichnet o. glöscht.

SirThornberry 18. Jul 2004 15:41

Re: viele viele Checkboxes
 
das einfachste ist in der OnClick-Procedure der Checkboxes einen Bool abzufragen ob gerade aus den einstellungen geladen wird und wenn das laden abgeschlossen ist kann dieser bool geändert werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr.
Seite 1 von 2  1 2      

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