Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » Eigene Dateien für Daten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
15.06.2006, 21:21 Uhr
dmueller



Hallo,

habe eine Frage zum C++ Builder von Borland. (Habe Vers. 6.0) Habe auch schon bereits hier im Forum nach dem Thema gesucht und gegooglet, aber bin nicht fündig geworden. Außer dass es irgendwas mit der Windows Registry zu tun hat. Könnte ich doch mit TRegistry umsetzen, oder mit TRegIniFile? Damit könnte ich die Endung registrieren damit diese beim Doppelklick auch meine Programm startet, glaub ich mal.

Also, bei mir ist es so, bin gerade dran ein Programm zu erstellen womit mehrere Arbeiten sollen, und auf mehreren Arbeitsplätzen installiert werden soll, also hat jeder seine eigene Installation. Aus einer Datenbank sollen die Daten für Berechnungen kommen.
Nun startet der Anwender das Programm, hat jede Menge eingabfelder wo er Daten eingeben kann, im Hintergrund wird dann mit den Daten Abfragen in der DB gemacht und daraus kommt ein Ergebnis, was ich nun gerne wissen möchte, ist es möglich, diese Daten die der Benutzer eingibt in einer Datei zu speichern? Beispielsweise in der Datei mein_project.ami (wobei ami meine eigene Endung ist).
Also einen eigenen Dateityp.
Vergleichbar mit anderen Windowsanwendungen, beim Öffnen des Programms werden die Daten bis zum 1. Speichern in einer Temporären Datei abgelegt, dann kann man arbeite ohne die Daten zu speichern und beim schließen des Programms sind die Daten wieder weg, außer man speichert die Daten in eine *.ami Datei.
Der Sinn der Sache soll dieser sein, dass der eine diese Datei erstellt, und ein andere an einem anderen Arbeitsplatz die Datei öffnen kann und evlt. noch änderungen vornehmen kann.

Hoffe ihr habt mich richtig verstanden? Gibts dafür vielleicht irgendein Tutorial?

Meine Frage nochmal zusammengefasst:
Wie kann ich eingegebene Daten an eine Datei geben mit eigener Endung, die beim Öffnen das Programm mit startet und die gespeicherten Daten wieder an das Programm übergibt um bereits abgeschlossene Berechnungen nochmal aufzurufen?

Kann mir da vielleicht jemand weiterhelfen???

Vielen Dank für Hilfe im Voraus!!

Schöne Grüße

Daniel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.06.2006, 22:37 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Der Aufbau, oder die Art der Datei ist eigentlich wurscht (ich würde eine typisierte vorziehen)
Dann diese unter HKEY_CLASSES_ROOT anmelden.
Bsp.
www.bytesandmore.de/rad/index.htm
unter "Win32 API\Dateitypen registrieren(...)"
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 15.06.2006 um 22:39 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.06.2006, 03:13 Uhr
dmueller



Hi,

danke für die Antwort, hab ich doch direkt getestet und hat mich schonmal ein gutes Stück weiter gebracht, hab jetzt meine Dateiendung.

Aber was ich noch nicht verstanden habe, wie kann ich jetzt Meine Daten in diese Datei Speichern? Bzw, da steht, dass diese endung auf die Dateien verweist die geöffnet werden solln. Wie kann ich dem Programm sagen dass der die Werte aus den Felder A, B und C in die Datei speichern soll, und beim öffnen der Datei auch wieder in diesen Feldern anzeigen soll?

Da ist ja auf der Seite ein Beispiel, wenn ich das Ausführe zeigt der mir im Memo Feld den Pfad zur Datei ein, aber die Datei hat 0KB, also ist Leer?

Dieser Post wurde am 16.06.2006 um 03:15 Uhr von dmueller editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.06.2006, 09:56 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
hab den abgedruckten Quelltext mal übeflogen. CreateFileAssociation(...) erzeugt hier einen Eintrag in der Registry unter HKEY_CLASSES_ROOT\DeineDateiBeschreibung\shell\open\command
Dort sollte dann eigentlich der Path zu Deinem Programm und ein Platzhalter (%1) für einen Übergabeparameter stehen.
Bei Doppelklick im Explorer wird Dein Programm aufgerufen, der Übergabeparameter enthält den Path zu Deiner Datei.
IMO (VCL bin ich nicht mehr so fit) kannst du den Parameter über die Function ParamStr(int Index) auswerten. Auf dem Index 1 solltest du den Path Deiner Datei finden.
Jetzt liegt es an Dir diese Datei zu öffnen und zu verarbeiten.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 16.06.2006 um 09:58 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.06.2006, 14:08 Uhr
dmueller



Hi,

danke für die Antwort, das hab ich nun Begriffen. So kann ich den Pfad zu meiner eigenen Datei ermitteln. Habe also einen Parameter den ich an das Programm geben kann und das ist der Pfad zur Datei.
Wie ist das nun wenn ich im Programm selbst Eingaben mache, z. B. in einem Memo Feld speichern will, müsste ich den Inhalt mit Verweis auf das Feld doch in die Datei mitspeichern könnten? und zwar, dass ich es naher wieder ausgeben kann?

MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.06.2006, 16:37 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
ungetestet, ohne Fehlerbehandlung, Registryeintrag schon vorhanden und als einfachste Variante!!!:
Drei TEdit txtA, txtB, txtC
Inifile:
[MyValues]
A=0
B=0
C=0

Header:

C++:
private:
AnsiString strFile;


Implementierung

C++:
void __fastcall TForm1::FormShow(TObject *Sender)
{
    if(ParamCount())
    {
        strFile = ParamStr(1);
        TIniFile* Ini = new TIniFile(ParamStr(1)); // strFile
        txtA->Text = Ini->ReadString("MyValues","A","");
        txtB->Text = Ini->ReadString("MyValues","B","");
        txtC->Text = Ini->ReadString("MyValues","C","");
        delete(Ini);
    }
}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (strFile == "") {
        strFile = ExtractFileDir(Application->ExeName) + "\\my.ami";
    }
    TIniFile* Ini = new TIniFile(strFile);
    Ini->WriteString("MyValues","A",txtA->Text);
    Ini->WriteString("MyValues","B",txtB->Text);
    Ini->WriteString("MyValues","C",txtC->Text);
    delete(Ini);
}


Try it.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 16.06.2006 um 16:47 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
17.06.2006, 15:01 Uhr
dmueller



Hey, danke für die Antwort. Muss das noch Testen, bin im Moment für mein Programm, dass ich erstellen will, einen Plan am aufstellen.

mfg
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
17.06.2006, 21:54 Uhr
dmueller



Hi,

hab das nun mal getestet. Leider gibt der mir bei TIniFile einen Fehler "Undefiniertes Symbol". woran kann das liegen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
17.06.2006, 22:06 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,
Schau mal in der Hilfe was Du includieren musst (#include <inifiles.hpp> oder so ähnlich)

Bearbeitung:

Anmerkung
Das .ami File muss natürlich so aufgebaut sein, wie unter "Inifile" beschrieben...

--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 17.06.2006 um 22:11 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
17.06.2006, 22:42 Uhr
dmueller



Hi,

habs sofort ausprobiert.

Den Aufbau einer Ini Datei sieht doch so aus?

Code:
[Section]
[Ident] = [Value]



Beim Speichern in die Datei da sagt der mir "In kann nicht geschrieben werden", und wenn ich das Feld das ich übetragen will leer lasse sagt der mir "Variante des Typs (Null) konnte nicht in Typ (String) umgewandelt werden."

Beim Öffnen passiert rein garnichts.

Also ich hab die 2 Prozeduren auf Buttons auf das OnClick Event gelegt, so sieht das bei mir aus:
Zum Speichern:

C++:
void __fastcall TForm1::Button5Click(TObject *Sender)
{
    if(strFile == "") {
       strFile == "test.ami";
    }
    TIniFile* Ini = new TIniFile(strFile);
    Ini->WriteString("MyValues","ID",Table1->FieldByName("ID")->Value);
    Ini->WriteString("MyValues","ID",Table1->FieldByName("Typ")->Value);

    delete(Ini);
}


und zum Öffnen:

C++:
void __fastcall TForm1::Button6Click(TObject *Sender)
{
    if(ParamCount())
    {
      strFile = "test.ami";
      TIniFile* Ini = new TIniFile(strFile);
      Table1->FieldByName("ID")->Value = Ini->ReadString("MyValues","ID","");
      Table1->FieldByName("Typ")->Value = Ini->ReadString("MyValues","Typ","");
      delete(Ini);
    }
}


Hab ich jetzt großen Misst gemacht??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: