![]() |
stringgrid-komponente
ich hab da ein problemchen :firejump: , und zwar hab ich ein programm auf wunsch einer person geschrieben, wo man nach und nach etwas in einer stringgrid-komponente eintragen kann. Das kann man dann auch alles ändern oder löschen und so. Bloss frag ich mich nur wie ich die einträge am besten speichere, bzw. dann laden lasse! kann mir da einer helfen! Is ne Kennwortliste, weil man ja da auch mal nen Überblick verlieren kann :mrgreen: danke schonmal |
Ist die Spaltenzahl variabel?
|
na knapp daneben, die spaltenzahl ist konstant bei 3 (Verwendung-Benutzename-Passwort), die zeihlenanzahl ändert sich hingegen (anfangs 2: 1. für kopfzeile....2.für ersten eintrag). dann kann man mit hinzufügen-knopf immer mehr zeilen erstellen! bis ende von byte, aber ich denke es geht kaum über 20 hinaus!
|
Hallo Haegar,
also, wenn Du die Einträge speichern willst, solltest Du sie vielleicht in einer Datenbank ablegen. Dazu benutzt Du am besten eine DBGrid-Komponente aus dem Folder "Datensteuerung" und verknüpfst es mit einer Datasource- und Table- Komponente, die den Datenbankzugriff steuern. Den Rest machen die DB-Komponenten (Laden und speichern). Ah, eine kleine Tabelle DBase oder Excel, oder Paradox solltest du dir noch anlegen und mit der Table Komponente verknüpfen. Hoffe Du kommst klar ... Hacki |
tja mit klarkommen is sone sache. in der schule habe wir letztes jahr (12.) mit TP angefangen lol, dann sind wir dieses jahr auf delphi umgestiegen, und behandeln gerade rekursion und so. hab zwar ein buch aus der schule mitgehen lassen, und mir noch kleinigkeiten angeeignet, aber das hilft mir nun nicht mehr weiter! und das dicke delphi-buch bekomm ich erst zu weihnachten ;)
fazit-> bin so ziemlich völliger anfänger, also ich will damit sagen, das ich meiner meinung nach mit der stinggrid-k. den einfachsten weg gewählt habe (wegen tabellenform), aber ich denke mal eurer meinung nach den schwierigsten oder? ;) |
Warum für sowas auf die BDE zurückgreifen?
Nimm ne Ini Datei! Da mußt du einmal die Zeilenanzahl speichern und dann speicherst du den Inhalt der Einzelnen Zellen über ne Schleife z.B. unter einem Namen wie Zelley-x. Dann sieht die Ini z.B. wi folgt aus: Anzahl=1 Zelle1-1=blabla Zelle1-2=blabla2 Zelle1-3=blabla3 Das Einlesen kannst du auch leicht über ne Schleife wieder machen, da du ja dir Zeilenanzahl gespeichert hast. Nimm das als Anhaltspunkt, damit müßte es leicht zu schaffen sein (frei Hand geschrieben):
Code:
StringGrid1.RowCount:=anzahl;
For y:=1 to anzahl do For x:=1 to 3 do StringGrid1.Cells[y,x]:=Ini.ReadString('Text','Zelle'+InttoStr(y)+'-'+InttoStr(x),''); |
@ Tpercon
StringGrid1.Cells[y,x]:=Ini.ReadString('Text','Zelle'+InttoStr(y)+'-'+InttoStr(x),''); kannste mir den teil mal erklären (den linken versteh ich ja aber den rechten net)?? und soll das jetzt schon mit speichern und so sein?? also ich bin eigentlich an jenem punkt! ButtonSave.click... und nu? :roll: |
Oder Einfach eine Textdatei:
Delphi-Quellcode:
//------------- SPEICHERN ----------------
procedure TForm1.Button4Click(Sender: TObject); var i,y :integer; list : TStringlist; begin list := TStringlist.Create; for i:=0 to stringgrid1.colcount-1 do begin for y := 0 to stringgrid1.RowCount-1 do begin list.Add(stringgrid1.Cells[i,y]); end; end; list.SaveToFile('C:\Strings.txt'); list.Free; end; //-------- LADEN --------- procedure TForm1.Button5Click(Sender: TObject); var i,y :integer; ffile:textfile; st:string; begin assignfile(ffile,'C:\Strings.txt'); reset (ffile); for i:=0 to stringgrid1.colcount-1 do begin for y := 0 to stringgrid1.RowCount-1 do begin readln(ffile,st); stringgrid1.cols[i].add(st); end; end; closefile(ffile); end; |
Und nochmal ne andere Ladelösung:
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var i,y,count :integer; list : TStringlist; begin list := TStringlist.Create; list.LoadFromFile('C:\Strings.txt'); count := -1; for i:=0 to stringgrid1.colcount-1 do begin for y := 0 to stringgrid1.RowCount-1 do begin inc(count); stringgrid1.Cells[i,y]:=list.strings[count]; end; end; list.Free; end; |
Zitat:
Das Beispiel von FuckRacism ist auch recht einfach und hat den Vorteil man brauch Ini nicht unter Uses einbinden. Ansonsten vielleicht etwas schwieriger zum Verstehen. Außerdem wird da die Anzahl Zelen nicht berücksichtigt, was aber auch nur eine Zeile Ergänzung wäre. Gruß |
ja musste auch grad feststellen, das er immer nur die erste zeile läd, ich denke speichern tut er sie alle, wenn ich mir den quelltext so anschaue, nu gut, muss dann mal ins bett!
danke nochmals und das er alle zeilen läd bekomm ich hoffenltich irgendwie hin ;) ciao |
Hi Haegar,
bin eben auf die entsprechenden Routinen gestoßen, die dir geziehlt weiterhelfen. Schau mal unter ![]() Dort gibt es eine Prozedur zum Speicher in ein File und zum Laden aus dieser Datei. Hacki |
Das sit der gleiche Weg wie der von FuckRacism, nur jetzt mit der Größe der StringGrid noch dabei, also jetzt empfehlenswert!
|
alles klar, bin grad inner schule, aber wenn ich mal zeit hab werd ich das dann mal probiere, wenn das dann auch geht, is mein programm feddich ;))
danke nochmal is echt spitze das forum |
ok habs mit ner eigenen zusammengebastelten version gemacht
Delphi-Quellcode:
procedure Tfrm_haupt.Speichern1Click(Sender: TObject);
var row:byte; hilfliste:TStringlist; begin hilfliste:=TStringlist.Create; try begin for row:=1 to strgrid1.RowCount-1 do begin hilfliste.Add(strgrid1.Rows[row].CommaText); hilfliste.SaveToFile(filename); end; end; finally hilfliste.Destroy; end; end; procedure Tfrm_haupt.Laden1Click(Sender: TObject); var hilfliste :TStringlist; row, extraabstand, i :byte; begin hilfliste:=TStringlist.Create; try begin hilfliste.LoadFromFile(filename); strgrid1.RowCount:=hilfliste.Count+1; if strgrid1.RowCount>=11 then frm_haupt.Height:=frm_haupt.height+((strgrid1.RowCount-10)*strgrid1.DefaultRowHeight); strgrid1.Height:=strgrid1.RowCount*strgrid1.DefaultRowHeight+(3+strgrid1.RowCount*1); if strgrid1.RowCount>2 then begin for i:=2 to strgrid1.RowCount-1 do begin extraabstand:=i-1; RadioButton[i]:=TRadioButton.Create(frm_haupt); RadioButton[i].parent:=self; RadioButton[i].Left:=384; RadioButton[i].width:=15; RadioButton[i].Top:=65+((i-1)*16)+extraabstand; RadioButton[i].Name:='RadioButton'+IntToStr(i); end; end; for row:=1 to strgrid1.rowcount-1 do strgrid1.Rows[row].CommaText:=hilfliste[row-1]; end; finally hilfliste.Destroy; end; end; |
Moin Haegar,
das mit dem Destroy ist gut gedacht, und dürfte hier auch keine Probleme machen. Sicherer allerdings wäre es die Methode Free aufzurufen, oder, da Du ja ein D6 Version hast, die Prozedur FreeAndNil(...). |
alles klar, ich werds versuchen, da ja das grundlegende nu funktioniert, kann ich mich an sachen wie Speicherpfadwahl machen und so, is ja bisher festgelegt! und vielleicht noch was zu sortieren, und vielleicht noch was suchen lassen, aber die liste wird ja erstmal net so gross, so das man darauf noch verzichten kann.
kann man auch solche simplen programme veröffentlichen, oder is das mehr für schwierigere sachen gedacht. wenn nicht, dann würd ich das bei gelegenheit mal reinstellen wollen. mal sehen. ciao bis zum nächsten problem ;) Haegar |
Hallo Haegar,
Zitat:
:wink: |
Du solltest beim Speichern wohl das hilfliste.SaveToFile(filename); aus der Schleife nehmen und anschließend verwenden! Außerdem würde ich den Code vom Link von FuckRacism nehmen, da da auch die StringGird- Spalten- und Zeilenanzahl berücksichtigt wird!
|
wie meinste das mit berücksichtigt? is doch alles drin (spaltenzahl=konstant bei 3), und zeilenanzahl is doch mit strgrid1.rowcount in abhängigkeit gestellt worden.
|
OK, hab mich beim kurzen überfliegn vom Source vertan, du nimmst ja doch die Anzahl Zeilen (Count+1), ist also doch OK.
Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 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