Autor Beitrag
joh
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 11.02.09 11:56 
Liebe Forenmitglieder,
möchte das Format, ZellColor und Schriftgröße und Farbe
in einem txt file speichern und wieder laden.
Bitte um Hilfe
johannes
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 11.02.09 12:07 
Und woran genau hängts?

_________________
PROGRAMMER: A device for converting coffee into software.
joh Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 11.02.09 13:01 
Hallo,
dank für diene meldung...
soweit bin ich
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:
25:
26:
27:
28:
29:
30:
procedure GridSpeichern(grd:TStringGrid;Datei:string);
var sl:TStringlist;
x,y,e:integer;
begin
sl:=TStringlist.create;
sl.add(inttostr(grd.colcount));
sl.add(inttostr(grd.rowcount));

for x:=0 to grd.ColCount-1 do
for y:=0 to grd.RowCount-1 do
sl.add(grd.cells[x,y]);


for x:=0 to grd.ColCount-1 do
sl.add(inttostr(grd.ColWidths[x]));

for x:=0 to grd.RowCount-1 do
sl.add(inttostr(grd.RowHeights[x]));

//Hier hängts... für Farbe ein Array..??
for e:=0 to grd.RowCount-1 do
sl.add(inttostr(grd.Color???);


sl.add(inttostr(grd.clientwidth));
sl.add(inttostr(grd.clientheight));
sl.add(inttostr(ord(grd.ScrollBars)));
sl.savetofile(datei);
sl.free;
end;

funtzt auch bis auf das Format
brauche wahrscheinlich ein dyn.Array für Color und Font
kenn mich aber noch nicht so aus damit

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 11.02.09 13:32 
Du könntest, falls die Dateigröße am Ende nicht die 64 KB überschreitet, ein TIniFile zur Speicherung nutzen (Für größeres dann nach Suche in: Delphi-Forum, Delphi-Library BIGINI suchen ). Dort könntest du zunächst die Größe speichern, wie du es ja schon tust, und dann für jedes Feld eine Section, z.B.
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
[general]
sizeX=2
sizeY=3
[1x1]
content="blah!"
font="blubberfont"
color=*sag gleich was dazu*
[1x2]
content="blah1!"
font="blubberfont1"
color=*sag gleich was dazu*1
und so weiter.
Zur Color: TColor ist Delphi intern ein Integer (iirc), du kannst auf jeden Fall mit ini.WriteInteger("mySection", "myIdentifier", myTColor); einen Color-Wert speichern, lesen müsste so gehen:  myColor := TColor(ini.ReadInteger(...));
Hierbei stellt TColor() ein Typecast dar. Ob der nötig ist, weiß ich nicht, ich glaube nicht :)
Ganz verstanden hab ich dein Problem aber nicht, wegen dem dynamischen Array für die Farbe ... ?

PS: Wär schöner, wenn du kurz deinen Beitrag editieren könntest, und um deinen Code <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG0800b1fdd6270bf2ad11d77dcab97312}</span></span>-Tags schreiben würdest :zustimm:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
joh Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 11.02.09 15:11 
Titel: stringgrid
Habe mich vielleicht nicht gut ausgedrückt,
Im Stringgrid eine Zelle rot ,
der text ist gelb.
Wenn ich nun speichere und wieder lade kommt der text
nicht gelb und die Zellfarbe ist auch nicht rot.
Die Dateigröße ist kein Problem; kann die Daten auch in
eine DB schreiben.
Das Problem ist, wie spreche ich die Zellen im Grid an
damit ich die Zellfarbe, also den Int. der Farbe bekomme
diesen speichere und dann wieder einlese beim laden.
Somit das Grid wieder so erscheint wie es geschlossen wurde.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 11.02.09 15:20 
Mir war nicht klar, dass das Grid die Farben selber managed :nixweiss: Bist du dir sicher, dass jede Zelle eine Farb-Eigenschaft hat?
Meines Wissens muss man für eigene Farben die onDrawCell selbst schreiben, und dann brauchst du natürlich eine eigene Möglichkeit, die Farben zu speichern (2D-Array bietet sich an).

Edit:
Hier mal ein Beispiel-Code zum Selberzeichnen, falls dir das hilft. (Falls nicht, hab ich dein Problem immernoch nicht verstanden :mrgreen: )
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  StringGrid1.Canvas.Brush.Color := clWhite;
  StringGrid1.Canvas.FillRect(Rect);
  if ACol = ARow then
    StringGrid1.Canvas.Font.Color := clRed
  else
    StringGrid1.Canvas.Font.Color := clBlack;

  StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
joh Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 11.02.09 15:40 
ja genau.
Wie mach ich das mit einem 2D-Array, um die
farbe zu speichern.
Das zeichnen mach ich mit dem onDrawCell.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 11.02.09 15:54 
Alles klar, jetzt reden wir Klartext! :zustimm:
Ein Array deklarierst du so:  var myArray: array[anfang .. ende] of TColor; Das ist ein eindimensionales Array mit (ende - anfang) + 1 elementen. Zweidimensional wird's so: var myArray: array[anfang1 .. ende1] of array [anfang2 .. ende2] of TColor
Auf die Elemente greift man wie folgt zu: myArray[1, 1] := clRed;.

Dynamisch geht's so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
 var myArray: array of array of TColor;
begin
  SetLength(myArray, 10); //nun hast du ein array[0 .. 9] of array of TColor. Das sind also 10 dynamische Arrays!
  SetLength(myArray[0], 10); //das erste der dynamischen Arrays sieht nun so aus: array[0 .. 9] of TColor

Nun musst du für jedes deiner Array-Elemente erster Dimension SetLenth aufrufen, damit dein doppelt-dynamisches Array die richtige zweidimensionale Größe hat, am besten mit einer For-Schleife.

Mit den Funktionen High und Low bekommst du immer das oberste/unterste Element deines Arrays:
ausblenden Delphi-Quelltext
1:
2:
 for x := Low(MyArray) to High(MyArray) do
  SetLength(MyArray[x], Laenge);

Und jetzt kannst du auf die Farben zugreifen.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
joh Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: Mi 11.02.09 20:24 
Hallo JyEff,
klappt, my bien !!!
Super Forum, herzlichen Dank
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 11.02.09 23:53 
user profile iconjoh hat folgendes geschrieben Zum zitierten Posting springen:
Hallo JyEff,
klappt, my bien !!!
Super Forum, herzlichen Dank
Aber mit dem allergrößten Vergnügen :zustimm:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.