CheckBox->checked Status ändern ohne Checkbox->click auszuführen



  • Hallo,

    der Titel sagt schon fast alles. Aber nun nochmal ausführlich 😉

    Ist es möglich die Eigenschaft "checked" einer Checkbox von
    false auf true zu ändern, ohne das die Routine checkbox->click()
    ausgeführt wird?

    Ich habe ein Array aus mehreren Bits. Wenn eine Checkbox aktiviert ist,
    so soll das entsprechende Bit auf 1 gesetzt werden, sonst auf 0.
    Da das Array auch von anderen Fenstern aus geändert werden kann, möchte ich
    das Fenster mit den checkboxen beim öffnen initialisieren.
    Dazu nutze ich:

    ManuellForm->bitBox1->Checked=true;
        ManuellForm->bitBox2->Checked=true; //es folgen noch mehr boxen
        ManuellForm->ShowModal();
    

    in dem ManuellForm Fenster ist die Funktion:

    void __fastcall TManuellForm::bitBox1Click(TObject *Sender){
            schaltBit1(); // schaltet den Status zwischen 0 und 1
        }
    

    Das Problem ist, wenn zb. mein Array {0,1} ist, dann werden beide
    bits umgeschaltet, so dass das Array {1,0} wird.
    Das Array soll aber erhalten bleiben.
    Problem verstanden? 😉



  • wie wärs wenn du mal in die FAQ guckts?

    CheckBox->Haken setzen, ohne OnClick auszulösen



  • Dein Problem habe ich nicht verstanden, aber hast du dir mal den entsprechenden FAQ-Beitrag durchgelesen?



  • Mensch... Die Suche war erfolglos, an die FAQ's hab ich nicht
    gedacht... Danke trotzdem.

    Dann werd ich jetzt mal schaun



  • So, die eine Möglichkeit funktioniert nur halb.
    Ich möchte die Checkbox auch mit der Tastatur schalten können.
    Mit der Möglichkeit funktioniert das aber nicht.

    Und hiermit kann ich garnix anfangen:

    SendMessage(DasHandleDerCheckbox, BM_SETCHECK, BST_CHECKED, 0);
    


  • Dann schau dir am besten mal in der Hilfe ALLE Eigenschaften von TCheckBox an...



  • Und dann??? Werde ich auch nicht schlauer...
    Auf so hilfreiche Tipps wie

    Dann schau dir am besten mal in der Hilfe ALLE Eigenschaften von TCheckBox an...

    kann ich auch verzichten. Sorry, aber so patzige Kommentare lese
    ich hier häufiger. Entweder man gibt nen konkreten Hinweis, oder man
    lässt das Posten direkt bleiben!

    PS: Wenn es nicht patzig gemeint war: sorry 😉



  • Raptor2000 schrieb:

    Und hiermit kann ich garnix anfangen:

    SendMessage(DasHandleDerCheckbox, BM_SETCHECK, BST_CHECKED, 0);
    

    Womit genau hast Du denn Probleme?

    - SendMessage solltest Du in der Hilfe zur Windows-API finden

    - DasHandleDerCheckbox: Das hat "Dasd" wohl als Dein Problem auf-
    gefasst. Mit seinem Hinweis hätte er dann natürlich nicht so ganz
    unrecht. Die Eigenschaft, auf die er Dich dabei stoßen will, steckt
    ja in dem "Variablennamen" schon drin.

    Ich bin mir nicht so ganz sicher, ob die Antwort von "Dasd" patzig gemeint war,
    aber völlig unrecht hat er nicht, wenn Du einfach mal schreibst, dass Du damit
    garnix anfangen kannst. Ich bin mir ziemlich sicher, dass man zu SendMessage
    pfundweise Informationen in der Hilfe, hier im Forum und überall im Internet
    finden kann.
    (Ich hoffe, das war jetzt nicht "patzig")

    Gruß,

    Alexander



  • War nicht patzig gemeint, was ich sagen wollte (wie Alexander Kempf bereits erwähnte) ist, dass alles in der Hilfe erklärt wird und man das Handle der Checkbox eben mit Hilfe der VCL-Referenz finden kann.


  • Mod

    Hallo

    Raptor2000 schrieb:

    Und dann??? Werde ich auch nicht schlauer...
    Auf so hilfreiche Tipps wie

    Dann schau dir am besten mal in der Hilfe ALLE Eigenschaften von TCheckBox an...

    kann ich auch verzichten. Sorry, aber so patzige Kommentare lese
    ich hier häufiger. Entweder man gibt nen konkreten Hinweis, oder man
    lässt das Posten direkt bleiben!

    Du vergisst nur eines DU kommst an und willst von einem anderen eine Hilfe
    wenn dir dann jemand einen Tip gibt und dir nicht sehr ausfuehrlich alles
    erklaert maulst du ihn an und das ist kein sehr guter Stil

    Wir sind hier keine Hotline die du bezahlst !!!

    Falls dir mein Kommentare zu deinem Posting nicht schmecht -> ueberleg erstmal
    Du kannst gerne in einem anderen Unterforum hier mit mir und anderen weiterdiskutieren.

    Aber bitte nicht hier

    MfG
    Klaus



  • So, ok, ihr habt mich überzeugt.
    Sein wir alle wieder Freunde 😉
    Mittlerweile hab ich das Problem einfach anders gelöst, indem ich es
    umgangen habe.

    Und wenn ich richtig gelesen hätte, und brav die Suche-Funktion
    genutzt hätte, wäre ich auf diesen Code gekommen, der genau das
    beinhaltet, was ich haben will:

    void __fastcall TForm1::Button1Click(TObject *Sender) 
    { 
      CheckBox1->Tag = 1; 
      CheckBox1->Checked ^= 1; // das programmatische Umschalten 
    } 
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::CheckBox1Click(TObject *Sender) 
    { 
      if (CheckBox1->Tag)   // nicht vom User direkt gesetzt, 
        CheckBox1->Tag = 0; // also nichts tun 
      else 
      { 
        Beep(); 
        // der normale OnClick-Code 
      } 
    }
    

Anmelden zum Antworten