Tini



  • Grüße

    In meinem Programm habe ich diverse Checkboxen, nun möchte ich mit der Tini die vom User getätigten Häckchen abspeichern lassen sodass bei neu start das Programm automatisch diese Häcken von User einfügt.

    Ich habe gelesen das dies mittel der Tini funktioniert jedoch ist die Borland Hilfe nicht wirklich nützlich dabei.

    könnte mir jemand ein Beispiel code geben ?

    vom Aufbau des codes bitte :

    Form1 (Hauptfenster)
    Form2 (Subfenster)
    in Form 2 befindet sich die besagte Checkbox

    Digges danke im vorraus.



  • Hallo

    Das die Builder-Hilfe nicht nützlich ist bezweifle ich doch stark, unter der Methode TIniFile::WriteBool findest du ein ganzen Beispiel.

    Und wenn du voraus richtig schreibst dann wird es auch nicht zensiert.

    bis bald
    akari



  • procedure TForm1.FormCreate(Sender: TObject);
    var
      Ini: TIniFile;
    begin
      Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
      try
        Top     := Ini.ReadInteger( 'Form', 'Top', 100 );
     Left    := Ini.ReadInteger( 'Form', 'Left', 100 );
     Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
        if Ini.ReadBool( 'Form', 'InitMax', false ) then
          WindowState = wsMaximized
        else
          WindowState = wsNormal;
      finally
        TIniFile.Free;
      end;
    end;
    procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
    var
      Ini: TIniFile;
    begin
      Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
      try
        Ini.WriteInteger( 'Form', 'Top', Top);
        Ini.WriteInteger( 'Form', 'Left', Left);
     Ini.WriteString( 'Form', 'Caption', Caption );
        Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );
      finally
        TIniFile.Free;
      end;
    end;
    

    so das steht dort wenn ich die Builder hilfe benutze und wie ich bereits sage ich raffs es nicht!

    das einzigste was dort gespeichert wird sind die Größe der beliebigen form ich jedoch habe gefragt wie ich die Checkbox(TRUE bzw FALSE je nach dem was der user anklickt) speichern kann und das steht leider nicht dort.

    Ich habe leider nicht die möglichkeit c++ Studieren bzw in Fachbüchern nach zulesenen.

    eher bin ich der Typ Learning by doing also bitte ich nochmals drum mir meine Frage zu beantworten. danke



  • Hallo

    Also bei meinem BCB5 steht als Beispiel das hier (und kein Delphi-Code)

    TIniFile *GameIni = new TIniFile ("FUNGAME.INI");
    GameIni->WriteBool("Options", "Sound", true);
    GameIni->WriteInteger("Options", "Level", 3);
    GameIni->WriteBool("Configuration", "ShowToolBar", false);
    delete GameIni;
    

    das einzigste was dort gespeichert wird sind die Größe der beliebigen form ich jedoch habe gefragt wie ich die Checkbox(TRUE bzw FALSE je nach dem was der user anklickt) speichern kann und das steht leider nicht dort.

    Du sagst ja selber true oder false. Das bedeutet Datentyp bool. Und dafür kann man die Methode WriteBool benutzen

    bis bald
    akari



  • so hab den dreh raus hat zwar lange gedauert aber es hat gefunkt^^

    so nun das kleine Problem.

    Ini File existiert und wird erfolgreich geschrieben, werte sind ebenfalls ok.

    Ich habe die ini in einen Button speichern implementiert jedoch ist es nicht das was ich genau wollte x.x

    Wie mache ich es das dass Programm das Ini File beim Programm start einließt(falls ini vorhanden) und beim schließen neu speichert bzw erstellt?



  • Hallo

    Für den Programmstart kannst du den Konstruktor des Forms benutzen, für das programmende den Destruktor (den du sicher noch manuell hinzufügen must)

    bis bald
    akari



  • Das auslesen Funktioniert nicht wirklich x.x

    Ich habe nun mittels WriteBool die daten speichern lassen.

    nun möchte ich dies wieder einlesen habe es folgender maßen versucht :

    TIniFile *sysini;
    sysini = new TiniFile (".\\sysini.ini");
    //---------------CheckBox 1 True---------------
    if (sysini->ReadBool ("OPTION", "Checkbox1", 1)
    (
    PagesDlg->CheckBox1->Checked = 1
    )
    //---------------CheckBox 1 False---------------
    if (sysini->ReadBool ("OPTION", "Checkbox1", 0)
    (
    PagesDlg->CheckBox1->Checked = 0
    )
    //---------------CheckBox 2 True---------------
    if (sysini->ReadBool ("OPTION2", "Checkbox2", 1)
    (
    PagesDlg->CheckBox2->Checked = 1
    )
    //---------------CheckBox 2 False---------------
    if (sysini->ReadBool ("OPTION2", "Checkbox2", 0)
    (
    PagesDlg->CheckBox2->Checked = 0
    )
    delete sysini;
    

    So schaut die sysini aus :

    [OPTION]
    Checkbox1=bool
    [OPTION2]
    Checkbox2=bool

    So nun das Problem wenn ich es so einbinde dann funktioniert das nit richtig.

    Wenn ich CheckBox1 Checke und CheckBox2 Un-checke dies Speichere und das Programm neu starte dann checkt er Beide Checkboxen.

    Was klemmt bzw wo liebht mein fehler ?^^



  • Du solltest das was du aus der Inidatei einliest auch verwenden.

    PagesDlg->CheckBox1->Checked = sysini->ReadBool ("OPTION", "Checkbox1", true);
    // etc.
    


  • Hallo

    TIniFile *sysini;
    sysini = new TiniFile (".\\sysini.ini");
    PagesDlg->CheckBox1->Checked = sysini->ReadBool ("OPTION", "Checkbox1", true);
    PagesDlg->CheckBox2->Checked = sysini->ReadBool ("OPTION2", "Checkbox2", true);
    delete sysini;
    

    /Edit : Ach bin ich langsam...

    bis bald
    akari



  • akari schrieb:

    Hallo

    TIniFile *sysini;
    sysini = new TiniFile (".\\sysini.ini");
    PagesDlg->CheckBox1->Checked = sysini->ReadBool ("OPTION", "Checkbox1", true);
    PagesDlg->CheckBox2->Checked = sysini->ReadBool ("OPTION2", "Checkbox2", true);
    delete sysini;
    

    /Edit : Ach bin ich langsam...

    bis bald
    akari

    und was wenn der wert false wäre ?

    müsste dann nicht if bzw else zu treffen, oda reicht des wirklich so aus selbst wenn beide false sind?



  • Hallo

    Lies dir doch bitte mal in der BCB-Hilfe die bedeutung der Parameter und des Rückgabewertes der Methode ReadBool durch. Du bringst da etwas durcheinander.

    bis bald
    akari


Anmelden zum Antworten