![]() |
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 |
Re: Problem mit StringGrid
Um Dir helfen zu können müsste man wissen, wie dieses Einsortieren denn implementiert ist.
|
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 |
Re: Problem mit StringGrid
Dann solltest Du aber auch überprüfen, ob die Zeile auch existiert.
|
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 :( ) |
Re: Problem mit StringGrid
Das ist aber immer noch falsch :zwinker:
|
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:
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:
Zeile=StringGrid1.RowCount
|
Re: Problem mit StringGrid
Siehste, geht doch :lol:. Aber wir sollten nun erst einmal abwarten, was der TE zu sagen hat.
|
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. |
Re: Problem mit StringGrid
Du hast immer noch nicht gezeigt, wie Dein Einsortieren eigentlich aussieht.
|
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.:( |
Re: Problem mit StringGrid
Ich verstehe nicht, was du mit Buchstaben.StringGrid1.cells sagen möchtest?
|
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?
|
Re: Problem mit StringGrid
Zitat:
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)) |
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.
|
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; |
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