Laden in ein Programm
-
Hallo,
ich habe folgendes Programm geschrieben, doch habe ich es nicht hinbekommen, dass er in den Speicher lädt, sondern nur, dass er in das Memo Feld lädt.
Nun wie bekomme ich es hin, dass er die geladene Datei in den Speicher tut?
Man sieht, unten den Code mit einem Laden, dass aber nur ins Memo Feld lädt.
somit bitte ich um Hilfe, am besten sogar am code.mfg
Ewar//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "LoadSave_Unit.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; const MAX=3; AnsiString Nachname[MAX]={"Maier","Kahl","Leier"}; double Groesse[MAX]={1.75,1.82,1.68}; int Datum[3][3]={{16,8,1984},{25,2,1986},{8,11,1985}}; TDateTime GebDat[MAX]; //--------------------------------------------------------------------------- void Zeige() { frmMain->Memo->Clear(); for (int i=0;i<MAX;i++) frmMain->Memo->Lines->Add(Nachname[i]+"\t"+FloatToStr(Groesse[i])+"\t"+GebDat[i].DateString()); } //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { for (int i=0;i<MAX;i++) GebDat[i]=EncodeDate(Datum[i][2],Datum[i][1],Datum[i][0]); Zeige(); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::mnuSpeichernClick(TObject *Sender) { TStringList *SL=new TStringList; // Objekt mit Load/Save-Methoden SL->Add(Nachname[0]+"\t"+FloatToStr(Groesse[0])+"\t"+GebDat[0].DateString()); // Daten, die gespeichert werden sollen SL->Add(Nachname[1]+"\t"+FloatToStr(Groesse[1])+"\t"+GebDat[1].DateString()); SL->Add(Nachname[2]+"\t"+FloatToStr(Groesse[2])+"\t"+GebDat[2].DateString()); SaveDialog->Execute(); // Dialog zur Angabe des Dateinamens SL->SaveToFile(SaveDialog->FileName); // Speichern delete SL; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::mnuLadenClick(TObject *Sender) { Nachname[0]=""; // Wert soll von Datei geladen werden TStringList *SL=new TStringList; // Objekt mit Load/Save-Methoden OpenDialog->Execute(); // Dialog zur Angabe des Dateinamens Memo->Clear(); SL->LoadFromFile(OpenDialog->FileName); // Laden Nachname[0]=SL->Strings[0]; // geladene Daten delete SL; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::mnuEndeClick(TObject *Sender) { Application->Terminate(); } //---------------------------------------------------------------------------
-
Sl->SaveToFile( AnsiString FileName );
grüssle
-
Ich versteh nicht warum du einen neuen Thread deswegen aufmachst, aber egal.
Ich hatte also recht mit meiner Vermutung, du verwendest eine Art Feld um die Daten zu verwalten (Zeile 13-15). Zum Thema "globale Variablen" gibt es einen interessanten Beitrag in den FAQ. Besser wäre wahrscheinlich ein Struct zu verwenden, da die Daten ja auch einen Zusammenhang haben, z.B.
struct Personen { String NachName; double Groesse; TDateTime Datum; };
davon kannst du dir dann entweder ein dynamisches Feld (new/delete) oder einen vector anlegen.
Um die Daten wieder in dese Struktur zu bekommen kannst du die AnsiString-Methoden verwenden, z.B. aus dem Memo:
Personen Person[3]; // das ist kein dynamisches Feld und auch kein vector ! String MemoZeile = Memo1->Lines->Strings[0]; // 1. Zeile aus dem Memo Person[0].NachName = MemoZeile.SubString(1,MemoZeile.Pos("\t")-1); MemoZeile.Delete(1,MemoZeile.Pos("\t")); Person[0].Groesse = StrToFloat(MemoZeile.SubString(1,MemoZeile.Pos("\t")-1)); MemoZeile.Delete(1,MemoZeile.Pos("\t")); Person[0].Datum = StrToDate(MemoZeile.SubString(1,MemoZeile.Length()));
das ganze geht natürlich auch als Schleife, und wahrscheinlich auch noch einfacher, aber das kannst du ja mal selbst versuchen
noch einen Hinweis: Was passiert wenn der Nutzer den OpenDialog abbricht? Schau dir mal das Beispiel zu Execute in der BCB-Hilfe an.
Und man kann die Datei direkt in das Memo laden.