Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringgrid mag keine Dateinamen?! (https://www.delphipraxis.net/121779-stringgrid-mag-keine-dateinamen.html)

bkgmjo 4. Okt 2008 12:25


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

_frank_ 4. Okt 2008 15:23

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

bkgmjo 4. Okt 2008 17:39

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:
//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;
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.

Edit: nein, es wird nur der Pfad gespeichert. Das Bild bleibt wo es ist.

Die Muhkuh 4. Okt 2008 18:29

Re: Stringgrid mag keine Dateinamen?!
 
Bei AssignFile solltest Du auf jeden Fall einen absoluten Pfad benutzen.

bkgmjo 4. Okt 2008 19:33

Re: Stringgrid mag keine Dateinamen?!
 
und das bringt mir bei meinem problem genau was?

hoika 5. Okt 2008 12:58

Re: Stringgrid mag keine Dateinamen?!
 
Hallo,

ein kleines Bsp.-Programm funktioniert
(c:\tmp muss existieren)

Delphi-Quellcode:
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;
Das Problem ist, dass WriteLn nur 255 Zeichen schreiben kann,
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 00:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz