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



BeitragVerfasst: Mo 19.03.18 21:27 
ausblenden Delphi-Quelltext
1:
s := SplitString(StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row], ' ');					


Beim Kompilieren meckert er "SplitString" an
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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: Mo 19.03.18 21:53 
user profile iconFrühlingsrolle hat folgendes geschrieben:
ausblenden Delphi-Quelltext
1:
2:
uses 
  Types;  // nachtragen

_________________
„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 19.03.18 22:20 
ist drin.


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:
146:
147:
148:
149:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Types, 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: TStringDynArray;
  i: Integer;
begin
  if StringGrid1.Col = 0 then
  begin
    Edit1.Clear;
    Memo1.Clear;
    Edit1.Text := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];;
    s := SplitString(StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row], ' ');
    for i := 0 to Length(s) - 1 do
      Memo1.Lines.Add(s[i]);
    end;
  SendMessage(Memo1.Handle, WM_VSCROLL, SB_TOP, 0);
end;


end.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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: Mo 19.03.18 23:35 
ausblenden Delphi-Quelltext
1:
uses StrUtils // fehlt noch					

_________________
„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 19.03.18 23:52 
ok, jetzt kein fehler. aber immer noch nicht so wie es sein sollte ;(
Einloggen, um Attachments anzusehen!
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



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


kann man nicht ein CR + LF eingeben? Ich weiß das ein String zurück gegeben wird. Aber wie kann man es anders realisieren?
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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 20.03.18 00:08 
Macht langsam keinen Spaß mehr, wenn man jedes Mal raten darf und nie was richtiges dabei ist. Nun ja. Übergib den Memo-Text als CommaText an das StringGrid. Und im Umkehrverfahren, wenn das StringGrid angeklickt ist, muss der CommaText wieder zerlegt und ins Memo aufgenommen werden.
An der Umsetzung darfst du dich jetzt mal selbst versuchen.

_________________
„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 20.03.18 00:14 
danke aber das du die geduld hattest
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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 20.03.18 00:18 
Es geht sogar noch einfacher. Trenn' die Wörter mit z.B. einem Komma anstelle des Leerzeichens, dann macht er es auch "richtig"

delphi_stringgrid2

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

s := SplitString(StringGrid1.Cells[StringGrid1.Col + 1, StringGrid1.Row], ',');
Einloggen, um Attachments anzusehen!
_________________
„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 20.03.18 00:26 
danke dir,
das wäre eine alternative.
aber in dem memo können auch zeichen wie das komma drin vorkommen.
dann würde es automatisch ein zeilenumbruch machen.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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 20.03.18 00:32 
Das ist es ja. Mit irgendetwas muss der Text getrennt werden. Davor sollte man wissen, was für Zeichen im Memo vorkommen werden. Und zu deiner Frage vorhin: Die "Laden" Methode kommt mit dem Zeilenumbruch nicht klar, weil diese den StringGrid Inhalt speichert, nicht aber den TStrings Inhalt des Memos.

_________________
„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 20.03.18 00:37 
wie kann man es ganz anders aufbauen damit der text im memo 1:1 übergeben wird und dann auch wieder so geladen wird.

vielleicht kein StringGrid? Vielleicht eine andere Komponennte?


Zuletzt bearbeitet von drache999 am Di 20.03.18 00:41, insgesamt 1-mal bearbeitet
drache999 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Di 20.03.18 00:40 
ich habe ein "#" eingepflegt. Das wird bestimmt nicht im Memo vorkommen. Und somit funktioniert es !
Ich danke dir vielmals! :)
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2292
Erhaltene Danke: 420

[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 20.03.18 00:49 
Gern geschehen. :zustimm: Und vielleicht könnte dir das hier auch nützlich sein.

_________________
„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)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1169
Erhaltene Danke: 81

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Di 20.03.18 08:58 
Hey, bevor Du dich selber damit rumärgerst das zu implementieren, die TStringList unterstützt das CSV Format.
Dafür weist Du der Eigenschaft CommaText einen String zu oder ließt ihn aus. Jeder Eintrag in der StringList entspricht dann einer Spalte einer Zeile in deiner Tabelle.
Dabei ist es egal ob der Text Kommas, Punkte oder andere Sonderzeichen enthält.
Mit einer zweiten TStringList kannst Du die einzelnen Zeilen deiner Tabelle dann einfach laden und speichern.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.