Autor Beitrag
drache999
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 04.03.18 20: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:
ausblenden volle Höhe Delphi-Quelltext
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:
// ###################################
// # 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 - 1do
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 - 1do
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;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Datenbanken verschoben am So 04.03.2018 um 22:00
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 06.03.18 15:56 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 12.03.18 22: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



BeitragVerfasst: Di 13.03.18 01:04 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 13.03.18 22: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



BeitragVerfasst: Mi 14.03.18 00:39 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 15.03.18 19: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



BeitragVerfasst: Do 15.03.18 20:04 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 15.03.18 21: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



BeitragVerfasst: Do 15.03.18 23:02 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Do 15.03.18 23: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



BeitragVerfasst: Fr 16.03.18 00:00 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 16.03.18 00:07 
ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// ###################################
// #  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 - 1do
      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 - 1do
      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);
var
  s: string;
begin
  //s := StringReplace(Memo1.Lines.Text, sLineBreak, '' [rfReplaceAll]);
  StringGrid1.RowCount := StringGrid1.RowCount + 1;
  StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size;
  //StringGrid1.Cols[1].Add(s);
  StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, ''));
  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;
}


procedure TForm1.StringGrid1Click(Sender: TObject);
var
  s: string;
  i: Integer; // Variante 1
  c: Char;    // Variante 2
begin
  Memo1.Clear;
  s := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
   Variante 1
  for i := 1 to Length(s) do
    Memo1.Lines.Add(s[i]);
//   Variante 2
//  for c in s do
//    Memo1.Lines.Add(c);
end;


so sieht es im moment aus
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 16.03.18 00:11 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 16.03.18 00: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



BeitragVerfasst: Fr 16.03.18 00:37 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Fr 16.03.18 00:46 
habe es mal ausprobiert.
Screenshot

Moderiert von user profile iconNarses: BMP->PNG, im Beitrag angezeigt
Einloggen, um Attachments anzusehen!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 16.03.18 17:34 
- Nachträglich durch die Entwickler-Ecke gelöscht -
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 17.03.18 09: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



BeitragVerfasst: Sa 17.03.18 15:20 
- Nachträglich durch die Entwickler-Ecke gelöscht -