AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Checkboxen machen mich wahnsinnig!

Ein Thema von sonicfire · begonnen am 17. Aug 2006 · letzter Beitrag vom 17. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
sonicfire

Registriert seit: 17. Jan 2006
Ort: Berlin
58 Beiträge
 
#1

Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 14:17
Servus und Hallo!

Schon wieder ein Problemchen *seufz*.

Wie erkläre ich es am besten ... nun...

Ich habe ein Fenster mit 16 Checkboxen und TEdit-Feldern. Beim Start des Programmes ist in diesem Fenster nur die erste(!) Checkbox markiert bzw. gewählt (checked). Die erste Checkbox ist grundsätzlich checked UND disabled. (enabled := false). Alle anderen CheckBoxen (2 - 16) sind per Default nicht checked aber alle enabled.

Wenn ich nun z.b. auf die 10te CheckBox klicke - so soll diese Checked sein UND gleichzeitig auch Enabled. (Geht.)
Und: Von der zweiten bis zur neunten Checkbox soll jeweils Enabled := False UND gleichzeitig checked gesetzt sein. (Geht ebenfalls).

Nun aber zum Problem. Wenn ich jetzt WIEDER auf diese 10te Checkbox klicke, soll das Häkchen weggehen (tut es ja auch so oder so) aber gleichezeitig sollen alle bis dahin marktierten Checkboxen (2 - 9) wieder "Enabled := True" und "Checked := False" sein - und genau da haut es nicht hin und ich weiss nicht wieso ...

Ich habe es mit einem Array of TCheckBox versucht und mit folgendem:
Delphi-Quellcode:
If (Sender is TCheckBox) then
begin
    begin
    if VeloLayers = (Sender as TCheckBox).Tag then
    begin
        For i:=1 to VeloLayers-1 do
        begin
           BoxToCheck[i].Enabled := True;
           BoxToCheck[i].Checked := False;
        end
    end
    else
    begin
        For i:=1 to ((Sender as TCheckBox).Tag-1) do
        begin
            BoxToCheck[i].Enabled := False;
            BoxToCheck[i].Checked := True;
        end;
        VeloLayers := (Sender as TCheckBox).Tag;
        end;
    end;
    end;
end;
In die jeweiligen CheckBoxen habe ich der Reihenfolge nach korrekte Tag-Werte geschrieben, eben einfach 1 bis 16...

Ich weiss einfach nicht, wieso er dann nur zum TEIL die Checkboxen wieder auf "NICHT checked" setzt. Das sieht fast so aus als würde er immer Zweiersprünge machen. Das ist zum Haareraufen!
Miniaturansicht angehängter Grafiken
shot1_101.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 14:33
Checkboxen sin dafür da, mehrere Optionen GLEICHZEITG auszuwählen.

Radiobuttons sind dafür da, nur EINE Option AUS MEHREREN auszuwählen.

Wenn du da jetzt rummurkst, machst dur dir erstens einen Haufen Arbeit und baust zweitens einen Designfehler ein.


EDIT: Ich sehe, du strebst was anderes an... lass mich mal drüber nachdenken.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 14:36
Hab grade versucht das Problem zu lösen aber genau wie du sagst ist das Problem das sobald man Checked ändert wird die OnClick Procedure ausgeführt -.-^^
Bin grad ne Lösung am suchen...

EDIT: Probiers ma ungefähr so:

Delphi-Quellcode:
var
  Form1: TForm1;
  Checks: Array[0..9] of TCheckbox;
  a: Boolean = false; //*

implementation

{$R *.dfm}

procedure TForm1.CheckBoxenClick(Sender: TObject);
var i: Integer;
begin
 if not a then begin //*
  a:= true; //*
  for i:= TCheckBox(Sender).Tag to 9 do
  begin
   Checks[i].Enabled := true;
   Checks[i].Checked := false;
  end;
  for i:= TCheckBox(Sender).Tag-1 downto 0 do
  begin
   Checks[i].Enabled := false;
   Checks[i].Checked := true;
  end;
  TCheckBox(Sender).Checked := true;
  a := false; // *
 end;
 //*) Verhindert das OnClick nochmals während dem OnClick ausgeführt wird
end;

procedure TForm1.FormCreate(Sender: TObject);
var i: Integer;
begin
 for i:= 0 to 9 do
 begin
  Checks[i] := TCheckBox.Create(Self);
  Checks[i].Parent := Self;
  Checks[i].Left := 10;
  Checks[i].Top := i*20;
  Checks[i].Caption := 'Checkbox' + IntToStr(i);
  Checks[i].OnClick := CheckBoxenClick;
  Checks[i].Tag := i;
 end;
end;
Ich glaube das ist nicht 100% das was du willst aber es beantwortet deine Frage

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 15:07
also ich würde einfach ein value-edit machen, und da dann eben "anzahl der layer" eingeben lassen.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 15:10
Zitat von DGL-luke:
also ich würde einfach ein value-edit machen, und da dann eben "anzahl der layer" eingeben lassen.
Ne ich schätze das ist so der Fall das es Optionen werden sollen und das wenn man die 4. Option aktiviert das dann die ersten drei (zwangsweise) auch mitaktiviert werden weil die in der vierten Option praktisch mitdrin ist. Verstehst du?^^
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 15:13
Nein.

Option 1 ist imemr aktiv. wenn 2-9 aktiviert ist, sind alle vorherigen auch aktiv - wenn 4 aktiv, dann auch 2 und 3. also nichts anderes als "wie viele optionen?".
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 15:46
Ja aber wie umständlich ist das bitte für den Benutzer wenn er in einem Spinedit eingeben muss wie viele Optionen aktiviert werden sollen... Da ist es halt wirklich einfacher so wie sonicfire es vorhat und so ist es auch normalerweise üblich
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 16:16
Hallo,

ich verstehe zwar nicht ganz, was der Code bezwecken soll
habe bei CheckBox 10 aufgehört zu zählen,
aber viell. hilft ja folgendes

Delphi-Quellcode:
procedure CheckBox_SetCheck(theCheckBox: TCheckBox; bCheck: Boolean);
var
  TempProc: procedure (Sender: TObject) of object;
begin
  if theCheckBox<>NIL then
  begin
    TempProc:= theCheckBox.OnClick;
    theCheckBox.OnClick:= NIL;
    theCheckBox.Checked:= bCheck;
    theCheckBox.OnClick:= TempProc;
  end
end;
Damit wird das OnClick temporär deaktiviert und stört nicht,
wenn man an den Checkboxen manuell rumfummelt.


Heiko
Heiko
  Mit Zitat antworten Zitat
KrasserChecker

Registriert seit: 21. Jul 2004
120 Beiträge
 
#9

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 16:18
Zitat von Neutral General:
Hab grade versucht das Problem zu lösen aber genau wie du sagst ist das Problem das sobald man Checked ändert wird die OnClick Procedure ausgeführt -.-^^
Stimmt, daher müsste es doch auch eigentlich reichen, wenn Du die erste Schleife umdrehst.

Also statt
Delphi-Quellcode:
...
if VeloLayers = (Sender as TCheckBox).Tag then
    begin
        For i:=1 to VeloLayers-1 do
        begin
           BoxToCheck[i].Enabled := True;
           BoxToCheck[i].Checked := False;
        end
    end
...
einfach
Delphi-Quellcode:
...
if VeloLayers = (Sender as TCheckBox).Tag then
    begin
        For i:=VeloLayers-1 downto 1 do
        begin
           BoxToCheck[i].Enabled := True;
           BoxToCheck[i].Checked := False;
        end
    end
...
  Mit Zitat antworten Zitat
sonicfire

Registriert seit: 17. Jan 2006
Ort: Berlin
58 Beiträge
 
#10

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 16:26
Zitat von KrasserChecker:
Zitat von Neutral General:
Hab grade versucht das Problem zu lösen aber genau wie du sagst ist das Problem das sobald man Checked ändert wird die OnClick Procedure ausgeführt -.-^^
Stimmt, daher müsste es doch auch eigentlich reichen, wenn Du die erste Schleife umdrehst.

Also statt
Delphi-Quellcode:
...
if VeloLayers = (Sender as TCheckBox).Tag then
    begin
        For i:=1 to VeloLayers-1 do
        begin
           BoxToCheck[i].Enabled := True;
           BoxToCheck[i].Checked := False;
        end
    end
...
einfach
Delphi-Quellcode:
...
if VeloLayers = (Sender as TCheckBox).Tag then
    begin
        For i:=VeloLayers-1 downto 1 do
        begin
           BoxToCheck[i].Enabled := True;
           BoxToCheck[i].Checked := False;
        end
    end
...

Bist ECHT ein krasser Checker!! Ich glaubs nicht - so geht es!!
Danke auch an alle anderen!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:18 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