Ini Datei erstellen
-
Hallo Leute
wenn man nach der Anleitung aus der Borland-Hilfe den Code benutzt, dann wird bei meinem Programm keine Datei beim Beenden erstellt. Erstelle ich eine Datei selbst, dann wird jedoch daraus gelesen.
Wo könnte das Problem liegen?
-
haste auch den code fürs speichern in OnClose geschrieben? wenn ja müsste es eigendlich gehen.
-
Hallo
ich denke, vor dem delete sollte noch ein TIniFile->UpdateFile() erfolgen.
bis bald
akari
-
hm
hab ich auch schon probiert. Leider kein erfolg. Es wird immer noch keine Datei erstellt.
-
Hallo
zeig mal die Codeteile
- erzeugen der ini
- speichern in iniDann koennte dir moelicherweise geholfen werden
MfG
Klaus
-
so hier mein code:
zum lesenTIniFile *ini; ini = new TIniFile( ChangeFileExt(Application->ExeName, ".INI" )); Form1->Top = ini->ReadInteger( "Form", "Top", 100 ); Form1->Left = ini->ReadInteger( "Form", "Left", 100 ); Form1->Width = ini->ReadInteger( "Form", "Width", 47); Form1->Caption = ini->ReadString( "Form", "Caption", "Default Caption" ); ini->ReadBool( "Form", "InitMax", false ) ? WindowState = wsMaximized : WindowState = wsNormal; delete ini;
und zum schreiben
TIniFile *ini; ini = new TIniFile(ChangeFileExt( Application->ExeName, ".ini" ) ); ini->WriteInteger( "Form", "Top", Form1->Top ); ini->WriteInteger( "Form", "Left", Form1->Left ); ini->WriteInteger( "Form", "Width", Form1->Width); ini->WriteString ( "Form", "Caption", Form1->Caption ); ini->WriteBool ( "Form", "InitMax", WindowState == wsMaximized ); ini->UpdateFile(); delete ini;
-
Hallo
und der Schreib-Teil wird auch ausgeführt? Setzt mal ein Breakpoint abeim new und schau, wie der Ablauf ist.
bis bald
akari
-
der code zum schreiben wird irgendwie gar nicht mehr verwendet.
-
Hallo
Wenn du es im Close-Event wie im Beispiel hast: Ist denn der Verweis im Objektinspektor des Forms zu der Funktion noch da? Ansonsten dort neu auswählen.
bis bald
akari
-
Hallo nochmal
also der Eintrag ist noch da
hab jetzt mal den code in einem neuen (leeren) projekt ausprobiert. dort funktioniert er.
-
Hallo
hab auch gerade mal das Beispiel nachgebaut. Funktioniert. Muß also an deinem Einbau liegen. Poste mal die ganze Funktion.
bis bald
akari
-
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) { TIniFile *ini; ini = new TIniFile(ChangeFileExt( Application->ExeName, ".ini" ) ); ini->WriteInteger( "Form", "Top", Form1->Top ); ini->WriteInteger( "Form", "Left", Form1->Left ); ini->WriteInteger( "Form", "Width", Form1->Width); ini->WriteString ( "Form", "Caption", Form1->Caption ); ini->WriteBool ( "Form", "InitMax", WindowState == wsMaximized ); ini->UpdateFile(); delete ini; }
dieser code geht wohl nicht in meinem Projekt
-
Hallo
bei mir geht er.
Wenn natürlich der Breakpoint bei new nicht erreicht wir, mußt du wo anders suchen.bis bald
akari
-
und da ist das Problem.
der breakpoint wird nie erreicht und ich hab keine ahnung warum das so sein könnte.
-
Hallo
1. Die Funktion OnClose ist als Eventfunktion eingetragen?
2. Der Breakpoint ist nicht auf der Deklaration *TIniFile ini;, sondern auf der Zeile mit der Erstellung?
3. Du kompilierst im Debug-Modus?bis bald
akari
-
hab das Problem erkannt!
ich beende das Programm immer über ein Popupmenü und da reagiert es dann irgendwie nicht auf das FormClose.
-
Hallo
versetzt den Schreib-Teil eben in den Destroy-Event, der wird immer aufgerufen.
bis bald
akari
-
Don't use OnCreate and OnDestroy, use C++ constructors and destructors instead
Davon abgesehen deutet das "Überspringen" des OnClose auf einen Fehler an anderer Stelle im Programm hin. Was ist denn mit OnCloseQuery? Und was genau machst du beim Aufruf des Menüeintrages?