Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit StringGrid (https://www.delphipraxis.net/148278-problem-mit-stringgrid.html)

star_votes 26. Feb 2010 14:57


Problem mit StringGrid
 
Hallo,

ich bräuchte einmal eure Hilfe bezüglich eines StringGrids.
Ersteinmal erläuter ich euch mein Problem:

Ich habe ein Programm entworfen, in dem man in ein paar Edits etwas einträgt und das dort Eingetragene, wird (durch einen Button) in eine StringGrid einsortiert. Nun kann man diese StringGrid abspeichern und gegebenfalls wieder öffnen.

Das Problem liegt jetzt darin:

Wenn man die StringGrid nun wieder öffnet und weitere Einträge einsortieren möchte, überschreibt er den ersten Eintrag ganz oben und geht wieder abwärts.
Deshalb wollte ich fragen wie man hinter den letzten Eintrag eine Art "Marke" setzen kann, damit Delphi nicht wieder von ganz oben anfängt etwas in die StringGrid einzusortieren und somit die alten Einträge überschreibt.
Ich habe leider keine wirkliche Idee, da ich auch noch nicht der "Erfahrenste" bin.

Wäre toll wenn jemand vielleicht eine einfache nachvollziehbare Lösung parat hätte.

Vielen lieben Dank für jede Antwort.:)

MFG

DeddyH 26. Feb 2010 15:12

Re: Problem mit StringGrid
 
Um Dir helfen zu können müsste man wissen, wie dieses Einsortieren denn implementiert ist.

Salazriel 26. Feb 2010 16:19

Re: Problem mit StringGrid
 
Ich denke mal, du könntest ihn überprüfen lassen, ob in dem Feld schon was steht und nur wenn nichts darin steht (--> '' )dann darf er reinschreiben, wenn was drinsteht, soll er einfach weitergehen

Delphi-Quellcode:
---Button1Click---
Zeile:=-1; //damit es nach dem ersten Inkrementieren 0 ist
Repeat
  inc(Zeile);
Until (StringGrid1.cells[Zeile,Spalte]<>'') or (Zeile=StringGrid1.RowCount-1)
StringGrid1.cells[Zeile,Spalte]:=Edit1.text;     //Spalte wäre 0, wenn du ganz links meinst

DeddyH 26. Feb 2010 16:28

Re: Problem mit StringGrid
 
Dann solltest Du aber auch überprüfen, ob die Zeile auch existiert.

Salazriel 26. Feb 2010 16:43

Re: Problem mit StringGrid
 
Was meinst du denn :angel:

Ich habs jetzt editiert, so dass er es auch überprüft.
(Besonders ärgerlich: zuerst hatte ich es in einer While-Schleife, die ich dann umgeschrieben habe auf Repeat weil mir spontan nicht eingefallen ist, wie ich das überprüfen kann, dann habe ich es umgeschrieben und vergessen, wobei mir jetzt auch klar ist, wie man das ganze mit while machen könnte :( )

DeddyH 26. Feb 2010 16:50

Re: Problem mit StringGrid
 
Das ist aber immer noch falsch :zwinker:

Salazriel 26. Feb 2010 16:57

Re: Problem mit StringGrid
 
Gedanken beim Lesen deiner polemischen Kritik :wink: :
Achja, Zeile darf ja nicht größer als die Anzahl der Zeilen sein,dass Ganze fängt bei 0 an, also darf Zeile nicht größer als rowcount-1 sein, es kommt immer von 0 aus, also.......
tatsächlicher Quelltext:

Delphi-Quellcode:
Zeile=StringGrid1.RowCount
aber ich habe ja hier schon in irgendeiner Signatur gelesen, dass Programme nicht dass machen, was deine Absicht ist, sondern was deine Befehle sind :wall: :wall:

DeddyH 26. Feb 2010 17:00

Re: Problem mit StringGrid
 
Siehste, geht doch :lol:. Aber wir sollten nun erst einmal abwarten, was der TE zu sagen hat.

star_votes 26. Feb 2010 17:23

Re: Problem mit StringGrid
 
Hey ja also die Idee ist echt gut und einfach :)
Klingt simpel, aber leider klappt es nicht:(

Ich weiß nicht wo da das Problem liegen könnte.
Den Inhalt der StringGrid lasse ich ganz einfach als Textdatei speichern, wenn das vllt. noch zur Problemlösung beitragen kann.(Leider kann ich dabei auch nicht die Zeilen zählen lassen, da beim Speichern die Textdatei sehr unübersichtlich ist...)

So habe ich das jetzt mit eingebunden
Delphi-Quellcode:
          i:=-1;
              Repeat
                  inc(i);
              Until ((StringGrid1.cells[i,0]<>'') or (i=StringGrid1.RowCount));
    With Buchstaben do
       begin
          StringGrid1.Cells[0,i] := a;
          StringGrid1.Cells[1,i] := b;
          StringGrid1.Cells[2,i] := c;
          StringGrid1.Cells[3,i] := d;
          StringGrid1.Cells[4,i] := e;
          StringGrid1.Cells[5,i] := f;
       End;
end;


Also es gibt keine Fehlermeldung, aber beim Öffnen und dann beim Einsortieren werden die alten Einträge einfach überschrieben.

DeddyH 26. Feb 2010 17:26

Re: Problem mit StringGrid
 
Du hast immer noch nicht gezeigt, wie Dein Einsortieren eigentlich aussieht.

star_votes 26. Feb 2010 17:40

Re: Problem mit StringGrid
 
Naja zeigen geht schlecht^^
Oben es steht ja schon mal der Quelltext...

Es funktioniert so, dass man einfach etwas in die 6 Edits eingibt.
Dann geht man auf einen Botton.
Anschließend werden die 6 Einträge in die 1. Zeile, jeweils in eine Spalte eingetragen...also in eine Zeile mit 6 Spalten mit jeweils 6 Einträge. Ebenfalls wird noch die Zeilenzahl um 1 erhöht (inc(i)).
Somit wird beim nächsten Klick auf den Botton die Zeile darunter mit den 6 Spalten vollgeschrieben...

Ja und wenn ich das jetzt Speicher habe ich bspw. 2 Zeilen voll und will beim nächsten Aufruf der StringGrid die 3. Zeile "vollschreiben". Das geht eben leider nicht.:(

Salazriel 26. Feb 2010 17:43

Re: Problem mit StringGrid
 
Ich verstehe nicht, was du mit Buchstaben.StringGrid1.cells sagen möchtest?

DeddyH 26. Feb 2010 17:44

Re: Problem mit StringGrid
 
Ich weiß nicht, ob ich zu blöd bin, Deiner Beschreibung zu folgen oder Du nicht in der Lage bist, das Problem genauer zu beschreiben. Also, per Button befüllst Du die Grid zeilenweise, richtig? Dann speicherst Du das Ganze in eine Datei, auch richtig? Was soll denn nun weiter geschehen? Lädst Du den Inhalt wieder aus der Datei? Sollen dann weitere Einträge dahinter geschrieben werden, oder was ist genau das Problem?

star_votes 26. Feb 2010 17:49

Re: Problem mit StringGrid
 
Zitat:

Zitat von DeddyH
Also, per Button befüllst Du die Grid zeilenweise, richtig? Dann speicherst Du das Ganze in eine Datei, auch richtig? Was soll denn nun weiter geschehen? Lädst Du den Inhalt wieder aus der Datei? Sollen dann weitere Einträge dahinter geschrieben werden, oder was ist genau das Problem?

Ja genau...beim wiederherausladen der Datei in die StringGrid sollen hinter den alten Einträgen neue folgen.
Doch momentan überschreibt er die alten einfach ...

Tut mir leid, aber ich bin nicht der beste "Erklärer".
Ich hoffe jetzt ist euch klar was ich meine.

...achso und Buchstaben = Buch ... ich hab den Quelltext falsch übernommen...(Buch=record))

DeddyH 26. Feb 2010 17:53

Re: Problem mit StringGrid
 
Gut, damit kann ich endlich etwas anfangen. Beim Laden der Datei schreibst Du ja zeilenweise in die Grid. Dabei kannst Du ja dann einfach mitzählen, wie viele Zeilen dabei beschrieben werden. Dementsprechend setzt Du dann einfach ggf. den RowCount des StringGrids hoch und schreibst in die entsprechende Zeile.

star_votes 26. Feb 2010 18:22

Re: Problem mit StringGrid
 
Leider macht er bei mir mehr Schleifendurchläufe beim einlesen der Datei als Zeilen vorhanden sind und somit ist der mitgezählte Wert unbrauchbar.

Kann man da vllt. was am Quelltext machen, damit das hinhaut?

Delphi-Quellcode:
with StringGrid1 do
                 begin
                   Readln(f, n);
                   StringGrid1.colcount:=n;
                   Readln(f, n);
                   StringGrid1.rowcount:=n;
                   for col:=0 to stringGrid1.colcount-1 do
                       for row:=0 to StringGrid1.rowcount-1 do
                           begin
                             readln(f, d);
                             StringGrid1.Cells[r, k]:=d;
                           end;
                 end;

DeddyH 27. Feb 2010 08:44

Re: Problem mit StringGrid
 
Speicherst Du jede Zelle als einzelne Zeile ab? Dann würde ich über ein anderes Format (z.B. CSV) nachdenken.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz