Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi stringgrid-komponente (https://www.delphipraxis.net/1585-stringgrid-komponente.html)

Haegar 10. Dez 2002 21:09


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

Tpercon 10. Dez 2002 21:24

Ist die Spaltenzahl variabel?

Haegar 10. Dez 2002 21:29

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!

hacki 10. Dez 2002 21:29

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

Haegar 10. Dez 2002 21:32

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? ;)

Tpercon 10. Dez 2002 21:44

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),'');

Haegar 10. Dez 2002 21:52

@ 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:

RomanK 10. Dez 2002 21:53

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;

RomanK 10. Dez 2002 22:03

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;

Tpercon 10. Dez 2002 22:05

Zitat:

Zitat von Haegar
@ Tpercon

StringGrid1.Cells[y,x]:=Ini.ReadString('Text','Zelle'+InttoStr(y)+'-'+InttoStr(x),'');
[color=#000000]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??

Das war natrülich nur das Laden (daher .ReadString!). Schau dir mal die Hilfe zu den Ini's an! Ist ganz einfach!
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ß

Haegar 10. Dez 2002 22:10

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

hacki 11. Dez 2002 09:18

Hi Haegar,

bin eben auf die entsprechenden Routinen gestoßen, die dir geziehlt weiterhelfen. Schau mal unter


http://www.tipps.delphi-source.de/ob...010805-6.shtml

Dort gibt es eine Prozedur zum Speicher in ein File und zum Laden aus dieser Datei.

Hacki

Tpercon 11. Dez 2002 11:07

Das sit der gleiche Weg wie der von FuckRacism, nur jetzt mit der Größe der StringGrid noch dabei, also jetzt empfehlenswert!

Haegar 11. Dez 2002 12:34

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

Haegar 11. Dez 2002 16:52

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;

Christian Seehase 11. Dez 2002 17:05

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(...).

Haegar 11. Dez 2002 20:59

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

Daniel 11. Dez 2002 21:05

Hallo Haegar,

Zitat:

Zitat von Haegar
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.

Du darfst -solange es legal und virenfrei ist- hier gerne jedes Deiner Programme veröffentlichen. Dazu ist die entsprechende Sparte schliesslich da.
:wink:

Tpercon 11. Dez 2002 21:28

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!

Haegar 12. Dez 2002 12:53

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.

Tpercon 12. Dez 2002 15:11

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 11:14 Uhr.

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