Auf in Form1 erzeugte Ini in Form4 zugreifen
-
hm ich weiss nicht ob diese Vorgehensweise besonders sinnvoll ist.
Ich mach das in meinen Programmen so, dass ich beim Programmstart die Ini-Datei einlese und die Daten in einer Struktur oder Klasse speichere. Beim Programmende schreibe ich (sofern geändert) die Daten zurück in die Ini. Normalerweise gebe ich dem User noch die Möglichkeit zu entscheiden, ob die geänderten Einstellungen gespeichert werden sollen.
-
Joe_M. schrieb:
hm ich weiss nicht ob diese Vorgehensweise besonders sinnvoll ist.
Ich mach das in meinen Programmen so, dass ich beim Programmstart die Ini-Datei einlese und die Daten in einer Struktur oder Klasse speichere. .......
Das mach im Prinziep genau so und bin bisher gut damit gefahren.
Es kann aber bei dem Einbinden der h-Files Schwierigkeiten geben, wenn z.B. in Form1 die Formen 2 bis n und IniFile generiert werden. In dem Fall erstelle ich in den Formen 2 bis n eine Variable
public: TIniFile* ini;und schreibe dann in Form1:
// h-File Form1 public: TIniFile* IniFile; // cpp-File Form1 IniFile = new TIniFile(astrIniFile); Form2->ini = IniFile;Das ist sicher nicht die ganz tolle Lösung aber sie funktioniert und ich kann aus jeder Form auf die Daten und Funktionen des Ini-File zugreifen.
Viel Erfolg
Evi48
-
Hallo,
Ich halte es für wenig sinnvoll das Inifile wärend des gesamten Programmablaufs offen zu lassen. Mal abgesehen davon was passiert wenn das Programm unerwartet abbricht.
Warum merkt ihr euch nicht einfach den Namen des Inifiles und macht es nur bei Bedarf auf und zu?Ciao
-
Braunstein schrieb:
... wenig sinnvoll das Inifile wärend des gesamten Programmablaufs offen zu lassen...
Sag ich doch...
Braunstein schrieb:
... was passiert wenn das Programm unerwartet abbricht.
Dann sollte man sich den Source noch mal ansehen, da hat sich dann wohl ein (oder mehrere) Fehler eingeschlichen.
Braunstein schrieb:
Warum merkt ihr euch nicht einfach den Namen des Inifiles und macht es nur bei Bedarf auf und zu?
Weil das Einlesen und das Schreiben sinnvollerweise an einer ZENTRALEN Stelle stattfinden sollte.
-
Allgemein:
Das Einbinden der Header Dateien darfst du natürlich nicht vergessen!

-
Also die Ini erstelle ich hier:
#include <vcl.h> #pragma hdrstop #include "Query.h" #include "DBArray.h" #include "pwaendern.h" #include "DBKompos.h" #include "benutzeranl.h" #include "bdaendern.h" #include "bauswahl.h" #include "prgverw.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" #include <inifiles.hpp> TForm4 *Form4; TIniFile *Ini = new TIniFile ("C:\\programming\\The_Manager\\Testmodule2\\Login\\INI\\startup.ini"); //--------------------------------------------------------------------------- __fastcall TForm4::TForm4(TComponent* Owner) : TForm(Owner) { }und benutzt wird sie weiter unten in der selben .cpp:
void __fastcall TForm4::FormShow(TObject *Sender) { static int i = Ini->ReadInteger("Form","Zähler",i); { Ini->WriteInteger("Form","Zähler",(++i)); } if (i>=100) { ShowMessage (""); Application->Terminate(); } String sektion = "User"; String bezeichnung = "LastUser"; String wert = Form3->Query1->FieldByName("LName")->AsString; Ini->WriteString(sektion,bezeichnung,wert); delete Ini; }wie gesagt, in der selben form kein prob, aber in anderen!
Ich bitte um eine einfache (muss nicht die beste und eleganteste sein) Lösung.
Also danke schonmal!
-
Nun ja, einfach ist relativ. Vom Standpunkt der Wartbarkeit und Fehleranalyse ist mein Vorschlag der Geeignetste.
Natürlich kannst Du auch den Weg der Public Variable für das Ini-File gehen, das ist auf den ersten Blick einfacher zu realisieren, nur wenn es dann um Änderungen oder Anpassungen geht, wirst Du viel mehr Probleme haben, als Du dir möglicherweise jetzt vorstellen kannst.
-
Naja aber ehrlich gesagt weis ich dich wied du das meinst...kannst mir vielleicht mal ein codebeispiel geben bitte?
Dunkel...
-
Hi,
da ich nicht so viele Ini-Dateien verwende, weiss ich gar nicht, ob ich ein passendes Codebeispiel hab'. Ich schau morgen früh auf der Arbeit mal nach...
-
Und schon was gefunden Joe? *ungeduldig wart*

-
Sorry, bin heute etwas im Stress und ich hab so speziell nix gefunden...
Aber so grundsätzlich: In der OnCreate des Mainform die INI-Datei einlesen (in Variablen des Mainforms). In der OnClose oder OnCloseQuery diese Variablen zurückschreiben in die INI-Datei. Die Variablen sollten private sein und über public Eigenschaften (Property) les- und schreibbar gemmacht werden.
Dann brauchst Du in allen Forms, die Zugriff auf die Variablen aus der INI-Datei haben sollen, nur die Mainform zu 'includieren'.Schöner wäre es natürlich, eine eigene Klasse zu entwerfen, die die Variablen aus der INI verwaltet, inkl. Schreib- und Lesemethoden.
-
@Joe
Ok ich werds mal probieren, aber wenn du nich so viel stress hast würde ich mich freuen wenn du mir da mal was gibst?Od schreibst mir per mail...wenn du willst geb ich dir Addy...
Dunkelseher
-
@Joe
Also ich bekomms einfach nich hin...Vielleicht kannst ja mal nen kleines beispiel so schreiben?
Wo in Unit1 eine Ini erzeugt wird und auch etwas gefüllt....und in Unit2 ich eben auch was reinschreibe?
Würd mich echt freuen!
Wenn Mail willst einfach sagen...
Dunkelseher
-
Hallo
was hast du probiert
Zeig uns doch ein wenig Details dazu
Dann hilft dir sicher gerne jemandMfG
Klaus
-
Ok fang ich mal an (ich werd aber einfachheitshalber nich meine Unitnamen verwenden,sondern nur Uint1,Unit2...)!
Also hab in Unit 1 eine Ini erstellt
#include <inifiles.hpp> TIniFile *Ini = new TIniFile ("c:\\INIS\test.ini");dann in Unit1 beim OnCreate Ereigniss etwas in die Ini geschrieben!
static int i = Ini->ReadInteger("test","test",i); { Ini->WriteInteger("test","test",(++i); } ...und jetzt wollte ich auch in Unit2 auf die Ini zugreifen und etwas reinschreiben:
Unit2.cpp #include "Unit1.h" ... Form1->Ini->WriteInteger(.....);geht nicht...also Form1->Ini, dieser String geht wohl nicht!
Dann in der Unit1.h
public: // Anwender-Deklarationen TIniFile *Ini; __fastcall TForm11(TComponent* Owner);Und dann in Unit2.cpp
Ini->WriteInteger(....);geht anscheinend auch nicht...
hm....weiß nich so richtig weiter....
-
Hallo
einen Rat an dich
Bitte les alle Beitraege nochmal durch
und wenn du dann noch Fragen hats ....MfG
Klaus
-
Ah @Klaus!
Hast recht,danke habs gesehen....sorry vielmals!