![]() |
In Stringgrid per Schleife schreiben
Hallo Leute,
ich habe ein kleines aber hoffe mal recht einfach zu lösendes Problem. Und zwar - meine Freundin soll für den Info Unterricht ein kleines Programm schreiben. Hier soll ein Edit Feld genutzt werden welches Daten in ein Stringgrid überträgt - soweit so gut, das funktioniert auch. Nun zu meinem Problem: Es soll eine Schleife gebaut werden welche die einzelnen Zeilen abfragt ob beschriftet oder unbeschriftet und wenn die Zeile leer ist den Text aus dem Edit Feld übertragen. Also soll der Text aus dem Edit Feld nur in ein leeres Feld geschrieben werden ... sprich: Zeile 1 ist bereits was drinn, also schreibe in Zeile 2 ... wenn diese auch voll ist ... schreibe in Zeile 3 usw. Nun meine Frage: Wie lässt sich das realisieren ? Ich hoffe Ihr könnt hier weiter helfen. Gruß Repatilo |
Re: In Stringgrid per Schleife schreiben
Hallo und Willkommen in der DP :dp:,
soll es wirklich nur eine Schleife sein? Mit 2 verschachtelten Schleifen (Zeilen und Spalten) ist das nämlich weniger umständlich zu lösen. Die Anzahl der Zeilen steht in StringGrid.RowCount, die Anzahl der Spalten in StringGrid.ColCount. Beide sind 0-indiziert, was bedeutet, dass die letzte Zeile den Index RowCount - 1 und die letzte Spalte den Index ColCount - 1 hat. Der Inhalt einer Zelle steht in StringGrid.Cells[Spalte, Zeile]. Damit hast Du alle Informationen, die Du benötigst. Wenn Du nicht weiterkommst, frag einfach noch einmal nach. |
Re: In Stringgrid per Schleife schreiben
Zitat:
Wenn Du so vorgehst ist es etwas einfacher:
Delphi-Quellcode:
Gruß
for i:=0 to Stringgrid.RowCount-1 do //ggf. i:=1 falls eine fixe Row
if Stringgrid.Cells[i,x]='' then // ist die Zelle leer? stringgrid.Cells[i,x]:=Edit.Text; // dann schreibe K-H |
Re: In Stringgrid per Schleife schreiben
ok vielen dank fürs 1. ...
Leider komme ich nicht wirklich weiter --- immerhinn habe ich Ihn mit dem letzten Beitrag soweit, die vorhandene Spalte nicht einfach zu überschreiben ... nur ... er zählt nicht weiter und schreibt dann in die nächste :( :wiejetzt: Nur zur Erklärung - vorerst möchte ich, das das Programm erstmal nur den Text aus dem Edit2.Text (also buch.Titel) in den Stringgrid schreibt und dann eine Spalte weiter wandert und schaut ob diese leer ist. Rein zum Verständnis halt - wenn das erstmal klappt kann ich mir den rest hoffentlich selbst zusammen reimen ;) Hier der Quältext :P :coder:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, Menus; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; StringGrid1: TStringGrid; Button1: TButton; Edit2: TEdit; Label2: TLabel; Edit3: TEdit; Label3: TLabel; Edit4: TEdit; Label4: TLabel; Edit5: TEdit; Label5: TLabel; Edit6: TEdit; Label6: TLabel; Edit7: TEdit; Label7: TLabel; Edit8: TEdit; Label8: TLabel; Edit9: TEdit; Label9: TLabel; Edit10: TEdit; Label10: TLabel; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TBuch = class public Buchnummer,Erscheinungsjahr:integer; Titel,Autor,Verlag,Auflage:string; function buchangaben:string; end; TUnterhaltungsliteratur = class (TBuch) public Inhaltsangabe:string; function Unterhaltungsliteraturangaben:string; end; TFachbuecher = class (TBuch) public Schlagworte:string; function Fachbuchangaben:string; end; TSchulbuecher = class (TBuch) public Klassenstufe:string; function Schulbuchangaben:string; end; TAusleihe = class (TBuch) public Name,Vorname,Klasse:string; function Ausleihangaben:string; end; var Form1: TForm1; Buch:TBuch; Unterhaltungsliteratur:TUnterhaltungsliteratur; Fachbuecher:TFachbuecher; Schulbuecher:TSchulbuecher; Ausleihe:TAusleihe; Stringgrid1:TStringGrid; i:Integer; x:Integer; Buchangaben,Unterhaltungsangaben,Fachbuchangaben,Schulbuchangaben, Ausleihangaben:string; implementation {$R *.dfm} function TBuch.buchangaben:string; begin end; function TUnterhaltungsliteratur.Unterhaltungsliteraturangaben:string; begin end; function TFachbuecher.Fachbuchangaben:string; begin end; function TSchulbuecher.Schulbuchangaben:string; begin end; function TAusleihe.Ausleihangaben:string; begin end; procedure TForm1.Button1Click(Sender: TObject); begin buch:=TBuch.Create; Unterhaltungsliteratur:=TUnterhaltungsliteratur.Create; Fachbuecher:=TFachbuecher.Create; Schulbuecher:=TSchulbuecher.Create; Ausleihe:=TAusleihe.Create; buch.Buchnummer:=strtoint(edit1.text); buch.Erscheinungsjahr:=strtoint(edit6.Text); buch.Titel:=(edit2.Text); buch.Autor:=(edit3.text); buch.Verlag:=(edit4.Text); buch.Auflage:=(edit5.Text); Unterhaltungsliteratur.Inhaltsangabe:=(edit7.Text); Fachbuecher.Schlagworte:=(edit8.Text); Schulbuecher.Klassenstufe:=(edit9.Text); for x:=1 to Stringgrid1.RowCount-1 do if Stringgrid1.Cells[i,x]='' then stringgrid1.Cells[i,x]:=buch.Titel; end; procedure TForm1.Button2Click(Sender: TObject); begin halt; end; end. |
Re: In Stringgrid per Schleife schreiben
Du hast es für die Laufvariable x gemacht, nun musst Du es noch für i machen. Beide sollten übrigens lokale Variablen sein, Delphi gibt Dir bestimmt eine diesbezügliche Meldung aus.
|
Re: In Stringgrid per Schleife schreiben
jupp das "x" war nen kleiner test ... und jaaa ... delphi sagt mir es möchte doch bitte eine lokale Variable sein ... nur weiß ich damit nichts anzufangen und auch mit dem "i" klappt es nicht :(
|
Re: In Stringgrid per Schleife schreiben
Delphi-Quellcode:
Getippt und nicht getestet.
procedure TDeinForm.Wasweißich;
var Zeile, Spalte: integer; //lokale Variablen der Methode begin for Zeile := StringGrid.FixedRows to StringGrid.RowCount - 1 do //keine fixen Zeilen for Spalte := StringGrid.FixedCols to StringGrid.ColCount - 1 do //keine fixen Spalten if StringGrid.Cells[Spalte, Zeile] = '' then StringGrid.Cells[Spalte, Zeile] := 'Wuppdi'; end; |
Re: In Stringgrid per Schleife schreiben
So wie ich das sehe ist der Ansatz von p80286 falsch.
Zitat:
Delphi-Quellcode:
Ich denke so müsste es klappen
for i:=0 to Stringgrid.RowCount-1 do //ggf. i:=1 falls eine fixe Row
if Stringgrid.Cells[0,i]='' then // ist die Zelle leer? stringgrid.Cells[0,i]:=Edit.Text; // dann schreibe //Spalte=0 damit der Buchtitel in der ersten Spalte steht |
Re: In Stringgrid per Schleife schreiben
soooo ... und wieder einen Schritt weiter :D :bouncing4: Danke !!!!
Nun aber das nächste ... die Schleife geht ja nun automatisch jede Zeile durch und schreibt diese voll ... sie soll aber nur eine zeile voll schreiben und dann aufhören ... kann ich ihr irgendwie sagen, gehe nur eine zeile weiter und sobald du geschrieben hast höre auf ? |
Re: In Stringgrid per Schleife schreiben
Dann nimm doch einfach die Zeilen-Schleife raus und weise der Variablen "Zeile" den Index der gewünschten Zeile zu.
[edit] Also so:
Delphi-Quellcode:
[/edit]
procedure TDeinForm.Wasweißich;
var Zeile, Spalte: integer; //lokale Variablen der Methode begin {for Zeile := StringGrid.FixedRows to StringGrid.RowCount - 1 do //keine fixen Zeilen} Zeile := StringGrid.FixedRows; //das wäre die erste nicht fixierte Zeile for Spalte := StringGrid.FixedCols to StringGrid.ColCount - 1 do //keine fixen Spalten if StringGrid.Cells[Spalte, Zeile] = '' then StringGrid.Cells[Spalte, Zeile] := 'Wuppdi'; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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