Announcement

Collapse
No announcement yet.

CheckBox.Checked -- Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CheckBox.Checked -- Problem

    Hallo Leute!

    Neulichst hatte ich mal wieder einen tollen Effekt. Dieser Effekt ist aber auch eigentlich logisch. Ich brauchte nur etwas, um dahinter zu steigen.<br>
    Also, folgendes Problem:<br>
    Ich habe ein kleines Programm geschrieben. Beim Start dieses Programm wird ein Wert aus der Registry ausgelesen. Und je nach dem wie der Wert ausfällt, wird eventuell eine <B>CheckBox</b> auf <b>Checked</b> gesetzt.<br>
    So weit, so gut.<br>
    Diese Funktion alleine läuft auch richtig gut. Das Programm arbeitet so, wie ich mir das vorgestellt hatte.<br>
    Nun möchte ich eine weitere Funktion implementieren. Der Anwender soll auch die Möglichkeit haben, die CheckBox zu betätigen. Darauf hin soll dann der zuvor ausgelesene Wert in der Registry verändert werden. Also baute ich einfach ein <b>OnClick-Ereignis</b> für die <b>CheckBox</b> ein.<br>
    Das schaut dann in etwa so aus:<br>

    procedure TForm5.CheckBox1Click(Sender: TObject);<br>
    begin<br>
    if CheckBox1.Checked=True then ...<br>
    ...<br>
    ...<br>
    else<br>
    ...<br>
    ...<br>
    Tja, da liegt nun aber das eigentliche Problem.<br>
    Wenn ich das Programm so starte, dann läuft mein Programm ins Nirvana.<br>
    Hätte ich nicht W2K, so hätte ich den Rechner bestimmt neustarten müssen.
    Nun habe ich mal Fehleranalyse betrieben und bin der Meinung den Fehler erkannt zu haben.<br>
    Es läuft ja so ab:<br>
    Das Programm startet und prüft einen Wert in der Registry. Steht dort ein bestimmter Wert, so wird die <b>CheckBox</b> auf <b>Checked</b> gesetzt. Und dann kommt der Hammer, das Programm haut sich fest. Wahrscheinlich liegt es daran, dass dieses Setzen des Häckchens als ein <b>OnClick-Ereignis</b> angesehen wird. Aber auf das <b>OnClick-Ereignis</b> erfolgt ja in meinem Programm eine Reaktion. Und fertig ist der Salat.<br>
    Das kuriose ist, dass das ganze aber funktioniert, wenn ich das mit einem Menü-Item mache. Den kann man ja auch wunderbar mit einem Häckchen versehen. Aus bestimmten Gründen kommt so ein Menü-Item für mein Programm aber nicht in Frage. Ich muss unbedingt eine CheckBox verwenden.<br>
    Meine Frage ist nun, ob mir jemand bei diesem Problem helfen kann!<br>
    Für ein paar Tipps wäre ich überaus dankbar.

    mfg

    Torsten

  • #2
    Hallo Torsten,
    wenn ich dich richtig verstanden habe ist also das Problem, das der Aufruf den du machst
    wieder den wert setzt für die Checkbox somit wird das Ereignis wieder aufgerufen (endlos).

    so hab ich das gemacht:

    function TForm1.IsAutoStart(FeldName:String):Boolean;
    function TForm1.UnSetAutoStart(FeldName:String):Boolean;
    function TForm1.SetAutoStart(FeldName:String):Boolean;
    ...

    procedure TForm1.FormCreate(Sender: TObject);
    begin
    AutoStart.Checked:=IsAutoStart('ChatServer');
    end;

    procedure TForm1.AutostartClick(Sender: TObject);
    begin
    if Autostart.Checked then begin
    try
    SetAutoStart('ChatServer');
    except
    // Fehlerausgabe
    exit;
    end;
    end else begin
    try
    UnSetAutoStart('ChatServer');
    except
    // Fehlerausgabe
    exit;
    end;
    end;
    Autostart.Checked:=IsAutoStart('ChatServer');
    end;

    Gruß Andr

    Comment


    • #3
      Hallo Andre!

      Besten Dank für die Antwort. Deine Lösung schaue ich mir mal an. Aber ich denke, dass es so klappen kann.<br>
      Dennoch wundert mich, dass mein oben beschriebenes Problem mit einem Menü-Item funktioniert und nur die CheckBox rumzuckt.
      Naja, mal schauen, was sich da noch so machen lässt.<br>
      Deine Variante werde ich dennoch sofort testen.

      mfg

      Torste

      Comment

      Working...
      X