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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 06.03.18 15:56 
Guten Tag drache999,

so, du speicherst in der ersten Zeile der .DAT Datei die .RowCount (Zeilen-Anzahl), in der zweiten Zeile die .ColCount (Spalten-Anzahl) und in den restlichen Zeilen einen Komma-Text aus den jeweiligen Zeilen deines StringGrid.

Wenn du beim Laden dem StringGrid die Zeilen- und Spaltenanzahl entsprechend zuweist (ab Zeile 44):

ausblenden Delphi-Quelltext
1:
2:
StringGrid.RowCount := StrToInt(F[0]);
StringGrid.ColCount := StrToInt(F[1]);

... dann kann die Schleife aber nicht bei 0 anfangen:

ausblenden Delphi-Quelltext
1:
2:
for i := 0 to (StringGrid.RowCount - 1do
StringGrid.Rows[i].CommaText := F[i + 2];

... sondern sollte bei i := 2 anfangen, sowie F[i], statt F[i + 2].

Du musst bedenken, dass die Schleife hier die Gesamtlänge von 0 bis .RowCount - 1 durchläuft.
Wenn du dabei F[i + 2] aufrufst, bist du jedes Mal um 2 Stellen zu weit, und gegen Ende der Schleife überschreitest du den Index um 2. Du liest somit irgendetwas aus dem Speicher, was du garnicht lesen solltest.

Was mich außerdem verwundert, ist die Zeile 72. Was soll das sein?

ausblenden Delphi-Quelltext
1:
StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size;					


Probier's mal so:

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:
procedure SaveStringGridToFile(StringGrid: TStringGrid; const FileName: string);
var
  list: TStringList;
  i: Integer;
begin
  list := TStringList.Create;
  try
    list.Add(IntToStr(StringGrid.RowCount));
    list.Add(IntToStr(StringGrid.ColCount));
    for i := 0 to StringGrid.RowCount - 1 do
      list.Add(StringGrid.Rows[i].CommaText);
    list.SaveToFile(FileName);
  finally
    list.Free;
  end;
end;

procedure LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: string);
var
  list: TStringList;
  i: Integer;
begin
  list := TStringList.Create;
  try
    list.LoadFromFile(FileName);
    StringGrid.RowCount := StrToInt(list[0]);
    StringGrid.ColCount := StrToInt(list[1]);
    for i := 2 to StringGrid.RowCount - 1 do
      StringGrid.Rows[i - 2].CommaText := list[i];
  finally
    list.Free;
  end;
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 13.03.18 01:04 
Da hast du recht. Die letzten 2 Zeilen werden garnicht geladen. Dann eben so:

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:
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    btnGenerieren: TButton;
    btnLoeschen: TButton;
    btnSpeichern: TButton;
    btnLaden: TButton;
    procedure FormCreate(Sender: TObject);
    procedure btnGenerierenClick(Sender: TObject);
    procedure btnSpeichernClick(Sender: TObject);
    procedure btnLadenClick(Sender: TObject);
    procedure btnLoeschenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    FilePath: string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SaveStringGridToFile(StringGrid: TStringGrid; const FileName: string);
var
  list: TStringList;
  i: Integer;
begin
  list := TStringList.Create;
  try
    list.Add(IntToStr(StringGrid.RowCount));
    list.Add(IntToStr(StringGrid.ColCount));
    for i := 0 to StringGrid.RowCount - 1 do
      list.Add(StringGrid.Rows[i].CommaText);
    list.SaveToFile(FileName);
  finally
    list.Free;
  end;
end;

procedure LoadStringGridFromFile(StringGrid: TStringGrid; const FileName: string);
var
  list: TStringList;
  i: Integer;
begin
  list := TStringList.Create;
  try
    list.LoadFromFile(FileName);
    StringGrid.RowCount := StrToInt(list[0]);
    StringGrid.ColCount := StrToInt(list[1]);
    for i := 0 to StringGrid.RowCount - 1 do
      StringGrid.Rows[i].CommaText := list[i + 2];
  finally
    list.Free;
  end;
end

procedure TForm1.btnGenerierenClick(Sender: TObject);
const
  AUSGABE = 'Zeile %d || Spalte %d';
var
  colId, rowId: Integer;
begin
  for rowId := 1 to StringGrid1.RowCount do
    for colId := 1 to StringGrid1.ColCount do
      StringGrid1.Rows[rowId - 1].Add(Format(AUSGABE, [rowId, colId]));
end;

procedure TForm1.btnLadenClick(Sender: TObject);
begin
  LoadStringGridFromFile(StringGrid1, FilePath);
end;

procedure TForm1.btnLoeschenClick(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to StringGrid1.RowCount - 1 do
    StringGrid1.Rows[i].Clear;
end;

procedure TForm1.btnSpeichernClick(Sender: TObject);
begin
  SaveStringGridToFile(StringGrid1, FilePath);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FilePath := ExtractFilePath(Application.ExeName) + 'daten.dat';
end;

ausblenden Delphi-Quelltext
1:
StringGrid1.Cols[0].Add(Trim(Edit1.Text)).Size// ".Size" am Ende macht keinen Sinn, außer der Wert wird z.B. einer Variable zugewiesen					

Und wenn beim nächsten Mal etwas "nicht funktioniert", dann gehe etwas genauer darauf ein. Sollte eine Fehlermeldung auftreten, dann schreib' bitte dazu, in welcher Zeile der Fehler auftritt und wie die Fehlermeldung heißt.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 14.03.18 00:39 
Was soll im Edit und im Memo passieren oder ausgegeben werden?
Wenn du jene Zeile meinst, wo der Memo-Text übergeben wird:

ausblenden Delphi-Quelltext
1:
StringGrid1.Cols[1].Add(Trim(Memo1.Lines.Text));					

... dann solltest du wissen, dass im Memo1.Lines.Text ebenso der Zeilenumbruch als Zeichen (#13#10) enthalten ist.
Mit Trim() bekommst du zwar Leerzeichen weg, jedoch nicht den Zeilenumbruch, daher:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
// neue Delphi Versionen
begin
  StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, '')); // sLineBreak = #13#10
end;

// alte Delphi Versionen
var
  s: string;
begin
  s := StringReplace(Memo1.Lines.Text, sLineBreak, '', [rfReplaceAll]); 
  StringGrid1.Cols[1].Add(s);
end;

Außerdem solltest du den Delphi-Styleguide einhalten - heißt hier vorallem richtig einrücken.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 15.03.18 20:04 
Das Problem mit dem Zeilenumbruch sollte nun mit meiner vorherigen Antwort gelöst sein.
Und den Quellcode bekommst du formatiert mit:
ausblenden Quelltext
1:
[delphi]StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, ''));[/delphi]					

ausblenden Delphi-Quelltext
1:
StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, ''));					

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Do 15.03.18 23:02 
Die Zeilenumbrüche mussten mittels .Replace() oder StringReplace() entfernt / durch Leerzeichen ersetz werden, damit der Memo-Inhalt als ganzer Text gespeichert werden konnte.
So wie du es vorhin hattest:

ausblenden Delphi-Quelltext
1:
StringGrid1.Cols[1].Add(Trim(Memo1.Lines.Text));					

... wurden die Zeilenumbrüche mitgespeichert. Im Anschluss wurde der gespeicherte Inhalt entsprechend "falsch" ins StringGrid mittels LoadStringGridFromFile() geladen.

Um den Zelleninhalt erneut mit Zeilenumbrüchen im Memo auszugeben, musst du den Zelleninhalt wieder zerlegen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
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;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 16.03.18 00:00 
Siehst du hier irgendetwas von einem Edit stehen? :gruebel: Oder hast du eine Frage zum Edit gestellt? :nixweiss:
Sag mir konkret was dein Code machen soll, poste deinen im Moment verfügbaren Code und zeige auf, wo es Probleme gibt.

Und ja, ich habe diesen und jenen Code getestet. Ob er nun "funktioniert", hängt davon ab, was man ihm abverlangt.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 16.03.18 00:11 
So sieht er aus, ok, und was funktioniert da nicht?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 16.03.18 00:37 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.StringGrid1Click(Sender: TObject);
var
  s: string;
  i: Integer;
begin
  if StringGrid1.Col = 0 then
  begin
    Edit1.Clear;
    Memo1.Clear;

    Edit1.Text := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];;
    s := StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row];
    for i := 1 to Length(s) do
      Memo1.Lines.Add(s[i]);
  end;
end;

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Fr 16.03.18 17:34 
Und nun? Scroll mal im Memo komplett nach oben, dann wirst du auch die "verlorene 2" an erster Stelle finden. ;)
Ergänze die StringGridClick() Methode mit:

ausblenden Delphi-Quelltext
1:
SendMessage(Memo1.Handle, WM_VSCROLL, SB_TOP, 0);					

... dann scrollt das Memo automatisch nach oben.

Siehe: WM_VSCROLL

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2105
Erhaltene Danke: 385

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Sa 17.03.18 15:20 
Was willst du dann?
Wenn es wortweise wiedergegeben werden soll, ist nur eine kleine Anpassung notwendig:

ausblenden 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:
uses 
  Types;  // nachtragen

// vorher 
StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, ''));
// nachher
StringGrid1.Cols[1].Add(Memo1.Lines.Text.Replace(sLineBreak, ' '));  

// vorher
var
  s: string;
begin
  s := StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row];
  for i := 1 to Length(s) do
    Memo1.Lines.Add(s[i]); 
end
// nachher
var
  s: TStringDynArray;
begin
  s := SplitString(StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row], ' ');
  for i := 0 to Length(s) - 1 do
    Memo1.Lines.Add(s[i]); 
end;

So wird der mehrzeilige Memo-Text durch ein Leerzeichen(' ') im StringGrid getrennt. Du kannst stattdessen auch ein Komma (','), ein Semikolon (';') oder sonst was benutzen.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)