Checkbox, Problem beim Status ändern



  • Hi erst mal.
    Also ich habe ein Problem bei dem ich nicht durchblicke, ich sehe den Fehler nicht.

    Also es ist so, ich habe in meine Programm paar Checkboxen, der Status (Checked=true/false)wird per Button klick in eine ini gespeichert und beim Laden der Programm abgeruffen.
    Also geschrieben wird es richtig und abgelesen auch, aber an dem Status ändert sich nichts.

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
       GetModuleFileName(NULL,buf,MAX_PATH);
       *strrchr(buf,'\\') = '\0';
       strcat(buf,"\\randomlol.ini");
    
       //CheckBoxes
       GetPrivateProfileString("lol-Settings","CheckBox1",NULL,checkb1,sizeof(checkb1),buf);
       GetPrivateProfileString("lol-Settings","CheckBox2",NULL,checkb2,sizeof(checkb2),buf);
       GetPrivateProfileString("lol-Settings","CheckBox3",NULL,checkb3,sizeof(checkb3),buf);
       //Enter
       GetPrivateProfileString("lol-Settings","Enter1",NULL,entercb1,sizeof(entercb1),buf);
       GetPrivateProfileString("lol-Settings","Enter2",NULL,entercb2,sizeof(entercb2),buf);
       GetPrivateProfileString("lol-Settings","Enter3",NULL,entercb3,sizeof(entercb3),buf);
       //Checkbox1
       if(checkb1=="1")
       {
    	ersteZeile->Checked=true;
       }
       if(checkb1=="0")
       {
    	ersteZeile->Checked=false;
       }
       //Checkbox2
      if(checkb2=="1")
       {
    	zweiteZeile->Checked=true;
       }
       if(checkb2=="0")
       {
    	zweiteZeile->Checked=false;
       }
       //Checkbox3
      if(checkb3=="1")
       {
    	dritteZeile->Checked=true;
       }
       if(checkb3=="0")
       {
    	dritteZeile->Checked=false;
       }
       //Enter
       if(entercb1=="1")
       {
    	enter1->Checked=true;
       }
       if(entercb1=="0")
       {
    	enter1->Checked=false;
       }
       if(entercb2=="1")
       {
    	enter2->Checked=true;
       }
       if(entercb2=="0")
       {
    	enter2->Checked=false;
       }
       if(entercb3=="1")
       {
    	enter3->Checked=true;
       }
       if(entercb3=="0")
       {
    	enter3->Checked=false;
       }
    }
    

    Komischerweise hab ich genau so vor paar wochen gemacht und es hat funtioniert, jetzt geht es aber nicht.
    Ich habe noch ein paar Edit Fälder da funtioniert es auch prima.
    Ich habe GetPrivateProfileString getestet, es liest alles richtig ab aber danach passiert nichts.

    mfg
    Igromanru



  • Ich kann mich täuschen, aber ich glaube, dass Deine If-Abfragen so nicht funktionieren, da Du auf String vergleichst(? hab grad keine BCB-Hilfe zur Hand). Versuch doch mal die Abfragen so zu gestalten:

    if(CheckBox->Checked == true)
      ...
    


  • igromanru schrieb:

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    ...
    GetPrivateProfileString("lol-Settings","CheckBox1",NULL,checkb1,sizeof(checkb1),buf);
    ...
       //Checkbox1
       if(checkb1=="1")
       {
    	ersteZeile->Checked=true;
       }
       if(checkb1=="0")
       {
    	ersteZeile->Checked=false;
       }
    ...}
    

    Komischerweise hab ich genau so vor paar wochen gemacht und es hat funtioniert, jetzt geht es aber nicht.
    Ich habe noch ein paar Edit Fälder da funtioniert es auch prima.
    Ich habe GetPrivateProfileString getestet, es liest alles richtig ab aber danach passiert nichts.

    mfg
    Igromanru

    Deine Variable checkb1 ist wahrscheinlich ein char array. Da kannst Du nicht mit dem Vergleichsoperator gegen ein Stringliteral vergleichen. Dabei kommt immer false heraus. Du mußt dann schon mit strcmp arbeiten. Also

    if(!strcmp(checkb1,"1"))
       {
    	ersteZeile->Checked=true;
       }
    

    Gleiches gilt dann auch für die anderen Variablen bzw checkboxes.

    mfg Martin



  • Hallo

    Wenn du statt den rohen WinAPI-Funktionen den VCL-Wrapper TIniFile verwendest, kannst du dir diesen Umweg über C-Strings sparen.

    bis bald
    akari



  • mgaeckler schrieb:

    Deine Variable checkb1 ist wahrscheinlich ein char array. Da kannst Du nicht mit dem Vergleichsoperator gegen ein Stringliteral vergleichen. Dabei kommt immer false heraus. Du mußt dann schon mit strcmp arbeiten. Also

    if(!strcmp(checkb1,"1"))
       {
    	ersteZeile->Checked=true;
       }
    

    Gleiches gilt dann auch für die anderen Variablen bzw checkboxes.

    mfg Martin

    Vielen Dank. Es ist wirklich ein array, ich wusste nicht, dass es einfach so zu vergleichen nicht geht. Auf jeden Fall funktioniert es jetzt.

    akari schrieb:

    Hallo

    Wenn du statt den rohen WinAPI-Funktionen den VCL-Wrapper TIniFile verwendest, kannst du dir diesen Umweg über C-Strings sparen.

    bis bald
    akari

    Danke, wusste nicht, dass VLC so was hat, werde bei nächsten Projekt daran denken.


Anmelden zum Antworten