Speichern in Datei ohne Überschreiben...
-
Hallo Malcolm15,
dein Fehler ist außerdem noch, daß du bei "FileExists()" auch den kompletten Pfadnamen abfragen mußt, d.h.
AnsiString filepath; filepath = ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + ".dls"; if(FileExists(filepath)) { int counter = 2; while(filepath = ExtractFilePath(ParamStr(0)) + "Texte\\" + Memo2->Text + counter + ".dls", FileExists(filepath)) counter++; } list->SaveToFile(filepath);
-
Hoi
also ich habe mein Code jetzt ganz gut hinbekommen dank eure hilfe, ich habe aber dennoch ein kleinen Fehler...
Könnt ihr mir sagen was ich in meinem Code Falsch habe !?
Falls ein Bild nicht vorhanden ist soll er Image2 zeigen was unsichtbar war,
macht er auch nur er lädt dann die Datei nicht mehr in den Feldern ein.Also steht in den Feldern die daten von einer anderen Datei...
(hoffe ich versteht was ich meine).
void __fastcall TForm6::onclick(TObject *Sender) { Image2->Visible=false; Edit1->Text = ListBox1->Items->Strings[ListBox1->ItemIndex]; AnsiString zFile; Graphics::TBitmap *bmp = new Graphics::TBitmap(); zFile="Bilder\\" + Edit1->Text + ".bmp"; if(FileExists(zFile)==false){ Image2->Visible=true; //ShowMessage("File nicht gefunden!?\r\r=> "+zFile); delete bmp; return; } bmp->LoadFromFile(zFile); Image1->Picture->Bitmap=bmp; delete bmp; Integer iInd; AnsiString zTxt; iInd=ListBox1->ItemIndex; if(iInd==-1){ //ShowMessage("Keine Auswahl"); return; } zTxt=ListBox1->Items->Strings[iInd]; zFile="Bilder\\" + Edit1->Text + ".bmp"; //ShowMessage("Fileauswahl: "+zFile); TStringList* textlist = new TStringList(); textlist->LoadFromFile("Texte\\" + Edit1->Text + ".dls"); Edit2->Text= textlist->Strings[61]; Edit3->Text= textlist->Strings[62]; Edit4->Text= textlist->Strings[63]; Edit5->Text= textlist->Strings[64]; Edit6->Text= textlist->Strings[65]; Edit7->Text= textlist->Strings[66]; Edit8->Text= textlist->Strings[67]; Edit9->Text= textlist->Strings[68]; Edit10->Text= textlist->Strings[69]; Edit11->Text= textlist->Strings[70]; Edit12->Text= textlist->Strings[71]; Edit13->Text= textlist->Strings[72]; Memo1->Text= textlist->Strings[73]; Edit14->Text= textlist->Strings[2]; Edit15->Text= textlist->Strings[3]; Edit16->Text= textlist->Strings[1]; Edit17->Text= textlist->Strings[5]; Edit18->Text= textlist->Strings[6]; Edit19->Text= textlist->Strings[4]; Edit20->Text= textlist->Strings[8]; Edit21->Text= textlist->Strings[9]; Edit22->Text= textlist->Strings[7]; Edit23->Text= textlist->Strings[11]; Edit24->Text= textlist->Strings[12]; Edit25->Text= textlist->Strings[10]; Edit26->Text= textlist->Strings[14]; Edit27->Text= textlist->Strings[15]; Edit28->Text= textlist->Strings[13]; Edit29->Text= textlist->Strings[17]; Edit30->Text= textlist->Strings[18]; Edit31->Text= textlist->Strings[16]; Edit32->Text= textlist->Strings[20]; Edit33->Text= textlist->Strings[21]; Edit34->Text= textlist->Strings[19]; Edit35->Text= textlist->Strings[23]; Edit36->Text= textlist->Strings[24]; Edit37->Text= textlist->Strings[22]; Edit38->Text= textlist->Strings[26]; Edit39->Text= textlist->Strings[27]; Edit40->Text= textlist->Strings[25]; Edit41->Text= textlist->Strings[29]; Edit42->Text= textlist->Strings[30]; Edit43->Text= textlist->Strings[28]; Edit44->Text= textlist->Strings[32]; Edit45->Text= textlist->Strings[33]; Edit46->Text= textlist->Strings[31]; Edit47->Text= textlist->Strings[35]; Edit48->Text= textlist->Strings[36]; Edit49->Text= textlist->Strings[34]; Edit50->Text= textlist->Strings[38]; Edit51->Text= textlist->Strings[39]; Edit52->Text= textlist->Strings[37]; Edit53->Text= textlist->Strings[41]; Edit54->Text= textlist->Strings[42]; Edit55->Text= textlist->Strings[40]; Edit56->Text= textlist->Strings[44]; Edit57->Text= textlist->Strings[45]; Edit58->Text= textlist->Strings[43]; Edit59->Text= textlist->Strings[47]; Edit60->Text= textlist->Strings[48]; Edit61->Text= textlist->Strings[46]; Edit62->Text= textlist->Strings[50]; Edit63->Text= textlist->Strings[51]; Edit64->Text= textlist->Strings[49]; Edit65->Text= textlist->Strings[53]; Edit66->Text= textlist->Strings[54]; Edit67->Text= textlist->Strings[52]; Edit68->Text= textlist->Strings[56]; Edit69->Text= textlist->Strings[57]; Edit70->Text= textlist->Strings[55]; Edit71->Text= textlist->Strings[59]; Edit72->Text= textlist->Strings[60]; Edit73->Text= textlist->Strings[58]; } //---------------------------------------------------------------------------
-
Hallo
Sag mal, hast Du die ganzen Edit-Felder zur Entwurfszeit erstellt?
Dann wirds aber Zeit, sich mal ein Tutorial über "dynamisch erzeugte Objekte"
und deren Event-Auswertung anzusehen.
Habe gerade keinen passenden Link zur Hand.
Google ist dein Freund.
wNw
-
Hallo
Das dynamische Erzeugen von Controls und deren Verwendung als Array in einer Schleife wird zum Beispiel in der FAQ hier im Forum beschrieben.
bis bald
akari
-
Malcolm15 schrieb:
Hoi
.. ich habe aber dennoch ein kleinen Fehler...
...Also steht in den Feldern die daten von einer anderen Datei...Hi,
Um deine Frage zu beantworten:
Leere einfach die TEdits mit EditX->Text = ""; zu Beginn des ClickEvent.Was mir weiter auffällt:
zFile="Bilder\\" + Edit1->Text + ".bmp";
ist zweimal definiert.
Diese Codezeilen sollten ganz nach oben, um sofort auszusteigen:
iInd=ListBox1->ItemIndex; if(iInd==-1){ //ShowMessage("Keine Auswahl"); return; }
Zum Erstellen der TEdits teile ich die Meinung von wNw und akari.
mfg
kpeter
-
Huhu
Also danke euch für die Hilfe und die Tipps ich werde diesbezüglich nochmal nächste woche schauen..
Ich habe jetzt folgendes gemacht:
Ich habe kpeter s vorschläge umgesetzt indem ich EditX->Text=""; gemacht habe ..
Das Programm löscht die Inhalte und ich habe kein Fremd Text mehr super..
zFile="Bilder\\" + Edit1->Text + ".bmp";
das war doppelt und wurde einmal auskommentiert...
iInd=ListBox1->ItemIndex; if(iInd==-1){ //ShowMessage("Keine Auswahl"); return; }
wurde ganz am anfang des click events gesetzt...
Das Problem besteht weiterhin sobald er kein eigenes Foto lädt sondern das Image2 sichtbar macht lädt er die textdatei nicht mehr ein obwohl diese vorhanden ist :(.
was ist denn da noch falsch ?
LG
Malcolm
-
Malcolm15 schrieb:
Das Problem besteht weiterhin sobald er kein eigenes Foto lädt sondern das Image2 sichtbar macht lädt er die textdatei nicht mehr ein obwohl diese vorhanden ist ...
Hi,
weil du, wenn die Bild-Datei nicht vorhanden ist, die Funktion mit return verlässt und damit nix weiter passiert.
Du müsstest also in etwa so schreiben:if(FileExists(zFile)==false){ Image2->Visible=true; // ShowMessage("File nicht gefunden!?\r\r=> "+zFile); // delete bmp; // darf dann hier nicht mehr stehen // return; // hier kommentieren } else { bmp->LoadFromFile(zFile); Image1->Picture->Bitmap=bmp; } delete bmp;
mfg
kpeter
-
vielleicht solltest du aus Zeile 18 mal das return rausnehmen, da du damit die gesamte Funktion verläßt...
[Edit] etwas zu langsam
-
Superrr genau ja es funktioniert jetzt
Hab eine Letzte frage damit diese Form Fertig ist :S.
Es kann ja sein das es eine Zeile nicht gibt, ich weise aber diese Zeile zu und es kommt zu einem Fehler was logisch ist.(Da nicht vorhanden)
z.B.
Edit2->Text= textlist->Strings[61];
gibt es aber keine Zeile 61 kommt der Fehler, nun muss ich also abfragen ob es
diese Zeile gibt, wenn ja soll er sie in Edit2 schreiben, wenn nicht soll er nix tun.ich dachte auf der shcnelle an sowas
if (textlist->Strings[73]>0){ Memo1->Text= textlist->Strings[73]; } else{ }
Nur hier soll das Programm in der Zeile 74 gehen und schauen ob der größer als
0 ist, was er nicht kann wenn die Zeile nicht vorhanden ist.Meine Frage welche funktion soll ich nehmen habt ihr ein tipp ?
Danke für eure Geduld und das Helfen.
Liebe Grüße
Malcolm
-
eigentlich wärs besser du würdest die StringList in einer Schleife von 0 bis Count durchgehen und dabei deine dynamsichen Komponenten befüllen, dann passiert der Überlauf garnicht erst
alternativ:
try { Memo1->Text= textlist->Strings[73]; } catch (...) { }
-
Hallo
Danke für die Info ich versuche schon die ganze zeit (da ich ganz neu anfange mit BCB) es hin zubekommen was ich geschafft habe ist das:
TStringList *liste=new TStringList(); liste->LoadFromFile("Texte\\test.dls"); int Anzahl=liste->Count; for (int i = 0; i < Anzahl; i++) { }
Also ich Lade die datei in liste ich zähle wieviele zeilen die liste hat.
Jetzt muss ich abfragen existiert zeile 1 ? wenn ja kopier es in edit1..
und das mit allen zeilen...Da ich neu bin hab ich in mom. keine ahnung wie ich den nächsten schritt mache kannst du mir noch ein tipp geben damit ich weiter komme ?
Liebe Grüße
Malcolm
-
Hi,
einfach vorher ermitteln, ob in textlist der jeweilige String Zeichen enthält.
. if (textlist->Strings[62] != "" ) Edit3->Text= textlist->Strings[62]; . if (textlist->Strings[73] != "" ) Memo1->Text= textlist->Strings[73]; .
mfg
kpeter
-
@kpeter
wenn die Zeile garnicht vorhanden ist, kommt bei der Abfrage ob sie leer ist eine Exception, siehe den Beitrag nach meinem ersten Post@Malcolm
das mit der Schleife geht natürlich nur wenn du die Edits dynamisch erzeugst oder in einem Arry verwaltest, z.B.:TEdit *EditArray[] = {Edit1, Edit2, Edit3, Edit4 /*usw*/}; //in der Reihenfolge in der du befüllen willst int Anzahl=liste->Count; for (int i = 0; i < Anzahl; i++) { EditArray[i]->Text = liste->Strings[i]; }
Hier mußt du jetzt nur noch darauf achten, dass nicht weniger Edits als Textzeilen vorhanden sind
zum dynamischen Erzeugen von Komponenten und Arrays von Komponenten gibt es einige Beiträge in den FAQ