Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TStringgrid zählt nur bis 10 (https://www.delphipraxis.net/205779-tstringgrid-zaehlt-nur-bis-10-a.html)

akazukilp 15. Okt 2020 18:01

Delphi-Version: 5

TStringgrid zählt nur bis 10
 
Hallo zusammen,

ich bin neu was das programmieren angeht und versuche heute ein Programm zu schreiben, dass in einem Stringgrid das 75 Col und 10 Rows hat diese von 1 bis 750 zu befüllen.
Mein Problem ist jetzt, dass wen ich das Programm ausführe, zählt er in der 1 Zeile nur bis 10 und nicht bis 75.
Woran liegt das?

Delphi-Quellcode:
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i, J, z : Integer;
begin
   z:=0;
  with StringGrid1 do
    for I := 1 to ColCount - 1 do
      for J:= 1 to RowCount - 1 do

        begin
          if Cells[j,i] = '' then begin
          inc(z);
          Stringgrid1.Cells[j,i] := IntToStr(z);

          end;
        end;
end;

end.
Danke schon mal im voraus für die Antworten.
Grüße Basti

hoika 15. Okt 2020 18:11

AW: TStringgrid zählt nur bis 10
 
Hallo,
ich sehe im Code keine 10 ??
Das muss du dem StringGrid schon sagen.


procedure TForm1.FormCreate(Sender: TObject);
var
i, J, z : Integer;
begin
z:=0;

StringGrid1.ColCount:= 75;
StringGrid1.RowCount:= 10;

with StringGrid1 do

Und ausserdem:
for I := 1 to ColCount - 1 do
Die Zählung begibt bei 0, nicht bei 1.

stifflersmom 15. Okt 2020 18:24

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von hoika (Beitrag 1475569)
Hallo,

Und ausserdem:
for I := 1 to ColCount - 1 do
Die Zählung begibt bei 0, nicht bei 1.

Wenn er eine Fixed Row und eine Fixed Col übergehen will, weil dort Spalten und Zeilenbezeichner stehen, macht eine Zählung von 1 an schon Sinn.

mmw 15. Okt 2020 18:26

AW: TStringgrid zählt nur bis 10
 
hallo,
vielleicht funktioniert dies -

Delphi-Quellcode:
var
  i, j, z: Integer;
begin

 z := 0;

  with StringGrid1 do
  begin
    for i := 0 to StringGrid1.RowCount - 1 do
      for j := 0 to stringgrid1.ColCount - 1 do

      begin
        if Cells[j, i] = '' then
        begin
          inc(z);
          Stringgrid1.Cells[j, i] := IntToStr(z);
        end;
      end;
  end;
end;
'Delphi Hilfe'

property Cells[ACol, ARow: Integer]:

Gruß

hoika 15. Okt 2020 20:19

AW: TStringgrid zählt nur bis 10
 
Hallo,
das habe ich ja sogar übersehen

if Cells[j,i]

Cells[Col,Row] und nicht umgekehrt.

scrat1979 15. Okt 2020 20:48

AW: TStringgrid zählt nur bis 10
 
Kleine Anmerkung meinerseits: Nirgends erwähnt der TE, dass die Zahl nur eingetragen werden soll wenn die Zelle(n) leer ist/sind. Falls das zutrifft würde ich die IF-Abfrage komplett streichen - oder übersehe ich da was?!?

hoika 15. Okt 2020 21:03

AW: TStringgrid zählt nur bis 10
 
Hallo,
ja, das if Cells[i, j] = '' (gleich mal die Parameter richtig vertauscht) ist etwas komisch,
zumal im FormCreate nichts im Grid stehen sollte.

akazukilp 16. Okt 2020 15:23

AW: TStringgrid zählt nur bis 10
 
Ok danke das klappt jetzt soweit.
Wen ich das jetzt rückwärts machen will.
Also ich starte von unten und gehe nach oben funktioniert es nicht was mach ich falsch.
Code:
procedure TForm1.Button1Click(Sender: TObject);
 var
  i, j, z: Integer;
begin

 z := 750;

  with StringGrid1 do
  begin
    for i := 750 to StringGrid1.RowCount - 1 do
      for j := 750 to stringgrid1.ColCount - 1 do

      begin
        if Cells[j, i] = '' then
        begin
          z := (z-1);
          Stringgrid1.Cells[j, i] := IntToStr(z);
        end;
      end;
  end;
end;

mmw 16. Okt 2020 15:46

AW: TStringgrid zählt nur bis 10
 
Halllo,

Zitat:

Also ich starte von unten und gehe nach oben

die for Schleifen sagen aber was anderes.

das hier ist ganz nüztlich

https://www.delphi-treff.de/object-pascal/schleifen/

Gruß

akazukilp 16. Okt 2020 19:06

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von mmw (Beitrag 1475629)
Halllo,

Zitat:

Also ich starte von unten und gehe nach oben

die for Schleifen sagen aber was anderes.

das hier ist ganz nüztlich

https://www.delphi-treff.de/object-pascal/schleifen/

Gruß

Danke das Problem mit dem runterzählen hab ich jetzt gelöst.
Aber ich find den Fehler nicht warum mir nichts reingeschrieben wird wen ich den Knopf drücke

Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, J, z : Integer;
begin
  z := 751;
    with StringGrid1 do
    begin

      for i := 750 downto 1 do
         for J := 750 downto 1do

          begin
            if Cells[J,i] = '' then
            begin
              z := (z)-1;
              Stringgrid1.Cells[J, i] := IntToStr(z);

            end;
          end;
    end;
end;

scrat1979 16. Okt 2020 19:31

AW: TStringgrid zählt nur bis 10
 
Stelle doch das Projekt mal als zip rein dann können wir es uns anschauen.

Du scheinst wieder was falsch gemacht zu haben. Vermutlich musst du von 749 bis 0 runterzählen. Außerdem gehen deine beiden Schleifen jetzt von 750 aus...

mmw 16. Okt 2020 19:45

AW: TStringgrid zählt nur bis 10
 
hallo,

Die 750 können nicht stimmen. Lieber so machen.

Delphi-Quellcode:
for i := StringGrid1.RowCount-1 downto 0 do
 for J := StringGrid1.ColCount-1 downto 0 do
Gruß

himitsu 16. Okt 2020 21:02

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von akazukilp (Beitrag 1475630)
Aber ich find den Fehler nicht warum mir nichts reingeschrieben wird wen ich den Knopf drücke

Antwort #2 schon gelesen?

akazukilp 17. Okt 2020 11:47

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von himitsu (Beitrag 1475633)
Zitat:

Zitat von akazukilp (Beitrag 1475630)
Aber ich find den Fehler nicht warum mir nichts reingeschrieben wird wen ich den Knopf drücke

Antwort #2 schon gelesen?

Ja habe ich. Aber mein Problem ist ein neues. Ich hab meine Fehler mit dem Button, dass ich wenn ich auf den Button klicke, dass ganze sich umdrehen soll, also dass oben 750 und unten 1 stehen soll, aber er zählt von -86 zu 672.

hoika 17. Okt 2020 11:55

AW: TStringgrid zählt nur bis 10
 
Hallo,
beschäftige dich mal mit F5, F7 und F8.
Dazu gibt es in Google schöne Videos.

akazukilp 17. Okt 2020 12:09

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von hoika (Beitrag 1475646)
Hallo,
beschäftige dich mal mit F5, F7 und F8.
Dazu gibt es in Google schöne Videos.

Debugen? Gut veruch ich mal

akazukilp 17. Okt 2020 17:41

AW: TStringgrid zählt nur bis 10
 
Hm klappt immer noch nicht.
kann mir jemand einen Hint geben was genau ich falsch mache
Code:
procedure TForm1.Button1Click(Sender: TObject);
var
  i, J, z : Integer;
begin
  z := 751;
    with StringGrid1 do
    begin

      for i := 1 downto Stringgrid1.Rowcount -1 do
         for J := 1 downto Stringgrid1.ColCount -1 do

          begin
            z := (z)-1;
            Stringgrid1.Cells[J, i] := IntToStr(z);
          end;
    end;
end;

bcvs 17. Okt 2020 18:15

AW: TStringgrid zählt nur bis 10
 
Zitat:

Delphi-Quellcode:
for i := 1 downto Stringgrid1.Rowcount -1 do

Anders rum natürlich. Schau dir Post #12 nochmal genau an. Von 1 kannst du nicht mehr weit runterzählen.

Mit dem Debugger und F8 hättest du das sofort gefunden.

hoika 18. Okt 2020 01:26

AW: TStringgrid zählt nur bis 10
 
Hallo,
Debuggen. Ja.
F5 auf die z:= 751-Zeile.

Dann mit F8 loslegen.
Deine .-Cells-Zele wird wahrscheinlich nie angesprungen.

akazukilp 18. Okt 2020 09:07

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von hoika (Beitrag 1475657)
Hallo,
Debuggen. Ja.
F5 auf die z:= 751-Zeile.

Dann mit F8 loslegen.
Deine .-Cells-Zele wird wahrscheinlich nie angesprungen.

ja danke. hab gesehen wo das Problem liegt. Er Springt auch auf die Zelle 0 drauf. Kann man das irgendwie umgehen mit einer property?

scrat1979 18. Okt 2020 10:37

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von akazukilp (Beitrag 1475664)
Zitat:

Zitat von hoika (Beitrag 1475657)
Hallo,
Debuggen. Ja.
F5 auf die z:= 751-Zeile.

Dann mit F8 loslegen.
Deine .-Cells-Zele wird wahrscheinlich nie angesprungen.

ja danke. hab gesehen wo das Problem liegt. Er Springt auch auf die Zelle 0 drauf. Kann man das irgendwie umgehen mit einer property?

Kommt darauf an wie du zählst. Also in der Schleife entweder erst ab 1 bzw. beim rückwärts zählen statt zur 0 eben nur bis zur 1 zählen...

akazukilp 22. Okt 2020 07:01

AW: TStringgrid zählt nur bis 10
 
Danke euch allen hat geklappt.:-D:-D
Gruss Basti

haentschman 22. Okt 2020 07:09

AW: TStringgrid zählt nur bis 10
 
Moin...:P
Zitat:

Danke euch allen hat geklappt
...mit der Nachbarin? :zwinker: :stupid:

Debuggen funktioniert?
aktueller Code?
:wink:

akazukilp 22. Okt 2020 09:48

AW: TStringgrid zählt nur bis 10
 
Jap hat funktioniert. Aber hab jetzt neue Probleme.:-D

himitsu 22. Okt 2020 17:43

AW: TStringgrid zählt nur bis 10
 
Zitat:

Zitat von haentschman (Beitrag 1475933)
Debuggen funktioniert?
aktueller Code?
:wink:

Der nette Heerwollte damit nett darauf hinweisen, dass du doch bitte die Lösung nochmal nennst.

Denn wenn irgendwann jemand ein gleiches/ähnliches Problem hat, die SuFu benutzete und hier dann zwar sein Problem, aber keine Lösung findet, dann freut er sich bestimmt. :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:55 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