Hallo Leute,
ich habe ein Problem mit meiner StringGrid.
Ich habe ein Edit und ein Memo. (Später sollen auch weitere Edits im Programm vorhanden sein). Jetzt aber nur das Minimale.
Ich möchte die Einträge des Edits und des Memos in mein StringGrid rein bringen. Das macht es auch.
Ich speichere es in eine Datei. Das macht es.
Wenn ich in meinem Memo mehr als eine Zeile habe, so wird es auch in mein StringGrid gespeichert.
Solange ich das Programm nicht schließe und in meine erste Spalte im StringGrid klicke, kann ich meine Daten zurück holen und anzeigen lassen.
Doch jetzt kommt mein Problem:
Wenn ich das Programm schließe und meine Daten lade, so werden die Einträge meiner Memo in mehrere Zeilen des StringGrid aufgeteilt.
Sie werden gesplittet.
Was mache ich falsch?
anbei der Code:
// ###################################
// # SaveStringGrid2File speichern #
// ###################################
// Anfang
procedure SaveStringGridToFile(StringGrid: TStringGrid; const FileName: String);
var
F: TStringList;
i: Integer;
begin
F := TStringList.Create;
try
F.Add(IntToStr(StringGrid.RowCount));
F.Add(IntToStr(StringGrid.ColCount));
for i := 0 to (StringGrid.RowCount - 1) do
F.Add(StringGrid.Rows[i].CommaText);
F.SaveToFile(FileName);
finally
F.Free;
end;
end;
// ###################################
// # SaveStringGrid2File speichern #
// ###################################
// Ende
procedure TForm1.Button2Click(Sender: TObject);
begin
SaveStringGridToFile(StringGrid1, '.\daten.dat');
end;
// ###############################
// # SaveStringGrid2File laden #
// ###############################
// Anfang
procedure LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: String);
var
F: TStringList;
i: Integer;
begin
F := TStringList.Create;
try
F.LoadFromFile(FileName);
StringGrid.RowCount := StrToInt(F[0]);
StringGrid.ColCount := StrToInt(F[1]);
for i := 0 to (StringGrid.RowCount - 1) do
StringGrid.Rows[i].CommaText := F[i + 2];
finally
F.Free;
end;
end;
// ###############################
// # SaveStringGrid2File laden #
// ###############################
// Ende
procedure TForm1.Button3Click(Sender: TObject);
begin
if FileExists('.\daten.dat') then LoadStringGridFromFile(StringGrid1, '.\daten.dat');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Clear;
Memo1.Clear;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.RowCount := StringGrid1.RowCount + 1;
StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size;
StringGrid1.Cols[1].Add(Trim(Memo1.Lines.Text));
Edit1.Clear;
Memo1.Clear;
Edit1.SetFocus;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
var
s: string;
begin
// Text der Zelle holen
s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
if Length(s) > 0 then //Länge des Text übeprüfen
begin
Edit1.Text:= s; // Text ausgeben
Memo1.Text:= StringGrid1.Cells[StringGrid1.Col+1, StringGrid1.Row];
end;
end;
Memo2StringGrid
Re: Memo2StringGrid
Einen offensichtlichen Fehler sehe ich nicht. Es sei denn, deine Memo-Texte enthalten irgendwo ein Komma, dann funktioniert das mit dem CommaText natürlich nicht. Welche Lazarus-Version hast du denn? Ich meine es gab da vor einiger Zeit Änderungen mit CommaText o.ä.
Übrigens, das StringGrid hat schon eingebaute Methoden, um den Inhalt in einer CSV-Datei zu speichern bzw. daraus zu lesen:
Übrigens, das StringGrid hat schon eingebaute Methoden, um den Inhalt in einer CSV-Datei zu speichern bzw. daraus zu lesen:
Code: Alles auswählen
procedure SaveToCSVFile(AFileName: string; ADelimiter: Char=','; WriteTitles: boolean=true;
VisibleColumnsOnly: boolean=false);
procedure LoadFromCSVFile(AFilename: string; ADelimiter: Char=',';
UseTitles: boolean=true; FromLine: Integer=0; SkipEmptyLines: Boolean=true);
-
- Beiträge: 844
- Registriert: Sa 12. Sep 2015, 12:10
- OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
- CPU-Target: Win 32/64, Linux64
- Wohnort: Wien
Re: Memo2StringGrid
drache999 hat geschrieben:Wenn ich das Programm schließe und meine Daten lade, so werden die Einträge meiner Memo in mehrere Zeilen des StringGrid aufgeteilt.
Dein Memotext enthält nicht zufällig die gleichen Trennzeichen (Komma) die du als Trenner beim Speichern des Grids verwendest ?
Vor dem Speichern prüfen ob die Zeichen die als Trenner beim Speichern verwendet werden nicht doch im Inhalt eingegeben wurden.
BTW: der Grid kennt eigene Prozeduren zum Speichern und Laden
http://wiki.freepascal.org/Grids_Reference_Page#Differences_between_Lazarus_and_Delphi_grids
z.B. unter "procedure SaveToCSVFile"
Edit: da war ich wohl zu langsam
Re: Memo2StringGrid
ich arbeite mit Delphi XE4
Re: Memo2StringGrid
drache999 hat geschrieben:ich arbeite mit Delphi XE4
Hier ist nicht Delphi.
Falsches Forum?