Autor |
Beitrag |
drache999
Beiträge: 18
|
Verfasst: So 04.03.18 21:28
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:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90:
| 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;
procedure TForm1.Button2Click(Sender: TObject); begin SaveStringGridToFile(StringGrid1, '.\daten.dat'); end;
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;
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 s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]; if Length(s) > 0 then begin Edit1.Text:= s; Memo1.Text:= StringGrid1.Cells[StringGrid1.Col+1, StringGrid1.Row]; end; end; |
Moderiert von Narses: Delphi-Tags hinzugefügtModeriert von Narses: Topic aus Datenbanken verschoben am So 04.03.2018 um 22:00
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 06.03.18 16:56
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Mo 12.03.18 23:50
Hallo Frühlingsrolle,
danke für die Antwort. Doch leider funktioniert es nicht so, wie du es geschrieben hast. Ich habe den Code eingepflegt.
Du fragtes, was ich mit dem Code meine:
StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size;
Geht es um das "TRIM" )
Es soll alle vorangegangene Leerzeichem im Edit löschen.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 13.03.18 02:04
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Di 13.03.18 23:38
Hallo Frühlingsrolle,
soweit sieht es gut aus. Doch hast du es mal mit einem Edit und einem Memo ausprobiert?
Bei meinem Programm funktioniert es solange ich in der Memoeingabe nur eine Zeile rein schreibe.
Wenn ich aber im Memo ein Enter mache, dann macht er es auch richtig solange ich das Programm nicht neu starte.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 14.03.18 01:39
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Do 15.03.18 20:42
Hallo Frühlingsrolle,
danke für deine Geduld.
Ok,
Eingabe: Ausgabe:
Edit --> StringGrid Spalte 1
Memo --> StringGrid Spalte 2
Und das dann Zeile für Zeile
Sobald ich eine Zelle im StringGrid Spalte 1 anklicke sollen die Einträge der Zeile (Spalte1 + 2) wieder in das Edit und in das Memo übergeben werden.
Mein Problem ist folgendes:
Sobald ich im Memo ein Zeilenumbruch mache mit Enter, so wird es richtig in das StringGrid übergeben. Klicke ich in die erste Spalte so
werden die Daten wieder richtig in das Edit und das Memo übergeben.
Schließe ich das Programm, und öffne es wieder, klicke dann in die erste Spalte, so bekomme ich nicht alles in das Memo zurück.
PS: Wenn ich einen Quellcode hier reinbringen möchte, wie mache ich das richtig? Ich meine, das es nicht als normalen Text angezeigt wird.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 15.03.18 21:04
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Do 15.03.18 22:46
OK, jetzt wird es zumindest alles im Memo übergeben. Nichts wird in der nächsten Zelle vom StringGrid übergeben.
Doch im Memo werden jetzt jegliche Zeilenumbrüche ignoriert. Sie wurden entfernt
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 16.03.18 00:02
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Fr 16.03.18 00:22
Mal ne Frage.
Hast du alles selber mal ausprobiert? Hast du das Programm mal in Delphi geladen?
Jetzt ist es so, das die erste Spalte vom StringGrid nicht im Edit sondern im Memo geladen wird.
Und der Text untereinander.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 16.03.18 01:00
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Fr 16.03.18 01:07
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145:
| unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.ComCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; StringGrid1: TStringGrid; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure StringGrid1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm}
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;
procedure TForm1.Button2Click(Sender: TObject); begin SaveStringGridToFile(StringGrid1, '.\daten.dat'); end;
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;
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); var s: string; begin StringGrid1.RowCount := StringGrid1.RowCount + 1; StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size; StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, '')); Edit1.Clear; Memo1.Clear; Edit1.SetFocus; end;
procedure TForm1.StringGrid1Click(Sender: TObject); var s: string; i: Integer; c: Char; begin Memo1.Clear; s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row]; Variante 1 for i := 1 to Length(s) do Memo1.Lines.Add(s[i]); end; |
so sieht es im moment aus
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 16.03.18 01:11
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Fr 16.03.18 01:19
es soll sein:
beim laden der datei soll beim anklicken der spalte 1 vom stringgrid
folgendes übergeben werden.
spalte 1 in edit
spalte 2 in das memo
jetzt passiert aber folgendes:
spalte 1 wird in das memo übergeben. und der text oder das wort untereinander
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 16.03.18 01:37
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Fr 16.03.18 01:46
habe es mal ausprobiert.
Moderiert von Narses: BMP->PNG, im Beitrag angezeigt
Einloggen, um Attachments anzusehen!
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 16.03.18 18:34
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
drache999
Beiträge: 18
|
Verfasst: Sa 17.03.18 10:29
Hallo,
ok, jetzt wird alles im Memo übergeben. Aber wenn ich vorher einen Text im Memo eingegeben habe, so möchte ich doch nicht,
das er Zeichen für Zeichen untereinander wieder ausgegeben wird.
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 17.03.18 16:20
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|