AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

In Stringgrid per Schleife schreiben

Ein Thema von Repatilo · begonnen am 7. Mär 2010 · letzter Beitrag vom 10. Mär 2010
Antwort Antwort
Seite 1 von 2  1 2      
Repatilo

Registriert seit: 7. Mär 2010
4 Beiträge
 
Delphi 7 Personal
 
#1

In Stringgrid per Schleife schreiben

  Alt 7. Mär 2010, 19:24
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

Re: In Stringgrid per Schleife schreiben

  Alt 7. Mär 2010, 19:37
Hallo und Willkommen in der 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

Re: In Stringgrid per Schleife schreiben

  Alt 8. Mär 2010, 12:16
Zitat von Repatilo:
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.
wenn ich Dich richtig verstehe, dann willst Du bzw. Deine Freundin, nur in eine Spalte des Stringgrids etwas schreiben?

Wenn Du so vorgehst ist es etwas einfacher:

Delphi-Quellcode:
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
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Repatilo

Registriert seit: 7. Mär 2010
4 Beiträge
 
Delphi 7 Personal
 
#4

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 18:53
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

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


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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#5

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 19:18
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Repatilo

Registriert seit: 7. Mär 2010
4 Beiträge
 
Delphi 7 Personal
 
#6

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 19:35
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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 19:54
Delphi-Quellcode:
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;
Getippt und nicht getestet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Salazriel

Registriert seit: 13. Feb 2010
33 Beiträge
 
#8

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 20:06
So wie ich das sehe ist der Ansatz von p80286 falsch.

Zitat von p80286:
Delphi-Quellcode:
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
Die Zeile der Zelle steht aber an zweiter Stelle, hier wird die Spalte verändert

Delphi-Quellcode:
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
Ich denke so müsste es klappen
  Mit Zitat antworten Zitat
Repatilo

Registriert seit: 7. Mär 2010
4 Beiträge
 
Delphi 7 Personal
 
#9

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 20:12
soooo ... und wieder einen Schritt weiter 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 ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#10

Re: In Stringgrid per Schleife schreiben

  Alt 9. Mär 2010, 20:14
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:
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;
[/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:23 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