![]() |
Stringgrid mag keine Dateinamen?!
Hallo,
bastel grad an einem Telefonbuch, das text und auch bilder speichern kann. momentan habe ich ein paar editfelder und ein stringgrid. in die editfelder werden die kontaktdaten eingetragen und durch den "übernehmen" button ins stringgrid kopiert. dieses wird dann als *.txt zelle für zelle als neue zeile beim beenden des programms gespeichert. funktioniert auch alles wunderbar nur....er speichert keinen dateipfad von einem bild. beispielsweise endet der string 'C:\Dokumente und Einstellungen\user\desktop\bild.jpg' als leere zeile in meiner textdatei. wenn ich manuell einen buchstabensalat ins stringgrid eintrage, wird dieser problemlos gespeichert. eine verschwörung oder ist edit.text nicht gleich edit.text? alle anderen funktionieren. nochmal kurz wie ichs momentan realisiert hab: openpicturedialog -> .filename wird in editfeld gespeichert -> bei buttonklick wird das editfeld ins stringgrid kopiert -> bei beenden des programmes wird das stringgrid mit jeder zelle als neue zeile in textdatei gespeichert. vielen dank im voraus |
Re: Stringgrid mag keine Dateinamen?!
da ein Dateiname auch nur ein String ist, sollte es da keinen Unterschied geben, es sei denn du hast irgendeinen Implementationsfehler drin. um dem auf die Spur zu kommen, bräuchten wir schon bisschen code.
oder versuchst du das bild mit in die gleiche Datei zu schreiben? dann geht das nicht mit "Textdateien", da bildformate normalerweise (außer svg u.ä.) binärdateien sind und somit Zeichen enthalten, die im Textformat nicht sichtbar sind (afair < #31). #0 z.b. "schneidet" in der Anzeige alles nachfolgende ab. Gruß Frank |
Re: Stringgrid mag keine Dateinamen?!
Wenns weiter hilft...hier mal die relevanten prozeduren.
kann da eigentlich nichts besondres entdecken.
Delphi-Quellcode:
//Bild wird geladen und der Dateiname im Editfeld gespeichert (funktioniert)
procedure TForm1.BBildClick(Sender: TObject); begin if OpenPictureDialog1.Execute then begin Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); EBildPfad.Text := OpenPictureDialog1.FileName; OpenPictureDialog1.FileName := ''; end; end;
Delphi-Quellcode:
//Daten aus den Editfeldern werden ausgelesen und im Stringgrid gespeichert (funktioniert)
procedure TForm1.EintragSpeichern; var i : integer; liste : TStrings; begin liste := TStringList.Create; liste.Add(EVorname.Text); ... //noch ca. 20 andere liste.Add(EBildPfad.Text); for i := 0 to liste.Count - 1 do begin SGListe.Cells[i, SGListe.Row] := Liste.Strings[i]; end; end;
Delphi-Quellcode:
Hatte inzwischen den Gedanken, dass es evtl. an writeln() liegt und dort keine Pfade benutzt werden können. Kann natürlich auch völliger Unsinn sein. Wie gesagt, jedmöglicher Buchstabensalat funktioniert. Dateipfade nicht. Wenn du willst, kann ich dir auch gern das ganze projekt als rar schicken.
//Stringgrid wird Zelle für Zelle in einer Textdatei gespeichert. (funktioniert nicht vollständig)
procedure TForm1.DateiSchreiben; var f: TextFile; i, k: Integer; begin AssignFile(f, 'inhalt.txt'); Rewrite(f); with SGListe do begin Writeln(f, ColCount); Writeln(f, RowCount); for i := 0 to ColCount - 1 do for k := 0 to RowCount - 1 do Writeln(F, Cells[i, k]); end; CloseFile(F); end; Edit: nein, es wird nur der Pfad gespeichert. Das Bild bleibt wo es ist. |
Re: Stringgrid mag keine Dateinamen?!
Bei AssignFile solltest Du auf jeden Fall einen absoluten Pfad benutzen.
|
Re: Stringgrid mag keine Dateinamen?!
und das bringt mir bei meinem problem genau was?
|
Re: Stringgrid mag keine Dateinamen?!
Hallo,
ein kleines Bsp.-Programm funktioniert (c:\tmp muss existieren)
Delphi-Quellcode:
Das Problem ist, dass WriteLn nur 255 Zeichen schreiben kann,
procedure TForm1.Button1Click(Sender: TObject);
var TxtFile: TextFile; sLine : String; begin sLine:= 'C:\Dokumente Und Einstellungen\bla.txt'; AssignFile(TxtFile, 'c:\tmp\test.txt'); Rewrite(TxtFile); WriteLn(TxtFile, sLine); CloseFile(TxtFile); end; wenn String verwendet wird (auch wenn der String länger ist). Umweg über PChar.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var TxtFile: TextFile; sLine : String; sLine2 : String; i : Integer; szLine2 : PChar; begin sLine:= 'C:\Dokumente Und Einstellungen\bla.txt'; sLine2:= ''; for i:= 1 to 30 do begin sLine2:= sLine2+'1234567890'; end; // sLine2 hat jetzt 300 Zeichen. GetMem(szLine2, Length(sLine2)+1); StrPCopy(szLine2, sLine2); AssignFile(TxtFile, 'c:\tmp\test.txt'); Rewrite(TxtFile); WriteLn(TxtFile, sLine); WriteLn(TxtFile, szLine2); CloseFile(TxtFile); FreeMem(szLine2); end; Heiko PS: try finally fehlt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz