AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Fehler beim vergrößern eines StringGrid
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim vergrößern eines StringGrid

Ein Thema von 24jb · begonnen am 6. Mai 2007 · letzter Beitrag vom 7. Mai 2007
Antwort Antwort
24jb

Registriert seit: 6. Apr 2007
27 Beiträge
 
#1

Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 19:27
Hi,

Ich bin gerade für die Schule ein kleines Programm zu schreiben.
Dabei handelt es sich um eine Multiplikationstabelle, im prinzip ganz simple und einfach um zusetzen.

Allerdings stürzt das Programm wenn ich im Programm über ein SpinEdit die Größe der Tabelle ändere ab, und ich weiß nicht, wieso.

Als Fehler kommt: "Project Project1.exe raised exception class EconvertError with message ''' is not a valid integer value"

Vielleicht könnt ihr mir helfen.

Ich seh warscheinlich den Wald vor lauter Bäumen nicht

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin, Grids;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    procedure SpinEdit1Change(Sender: TObject);
    procedure SpinEdit2Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure multiwrite;
   Procedure berechnung;
   Procedure clenup;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
clenup;
StringGrid1.ColCount := SpinEdit1.Value + 1;
multiwrite;
berechnung;
end;

procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
clenup;
StringGrid1.RowCount := SpinEdit2.Value + 1;
multiwrite;
berechnung;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.ColCount := SpinEdit1.Value + 1;
StringGrid1.RowCount := SpinEdit2.Value + 1;
multiwrite;
berechnung;
end;

procedure Tform1.multiwrite;
Var i : Integer;
Begin

   //Die procedure multiwrite schreibe die erste Zeile und Spalte
   StringGrid1.Cells[0,0] := ' x';
    For i := 1 to SpinEdit1.Value do
       StringGrid1.Cells[i,0] := IntToStr(i);

    For i := 1 to SpinEdit2.Value do
       StringGrid1.Cells[0,i] := IntToStr(i);
End;

Procedure TForm1.berechnung;
var i, x : Integer;
Begin
   //berechnung berechnet und schreib die Werte in StringGrid1
      For i := 1 to (SpinEdit2.Value) do
    Begin
       For x := 1 to (SpinEdit1.Value) do
       Begin
        StringGrid1.Cells[x,i] := IntToStr(StrToInt(StringGrid1.Cells[0,x])*StrToInt(StringGrid1.Cells[i,0]));
       end;
    end;
End;

Procedure TForm1.clenup;
var i, x : Integer;
Begin
   //leert jedes Feld des Stringgrids
   For i := 1 to (SpinEdit2.Value) do
    Begin
       For x := 1 to (SpinEdit1.Value) do
       Begin
        StringGrid1.Cells[x,i] := '';
       end;
    end;
End;

end.
Angehängte Dateien
Dateityp: zip aufgabe_3_510.zip (240,8 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 19:32
Hi,

ich denke das Problem liegt in clenup.

Hier löscht du über die NEUE Anzahl von Zeilen/Spalten,
besser wäre hier StringGrid.Rowcount-1 und StringGrid.ColCount - 1 als Schleifenende zu verwenden.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
24jb

Registriert seit: 6. Apr 2007
27 Beiträge
 
#3

Re: Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 19:49
Hi,
ich hab das geändert, aber an sich hat sich nicht geändert.

Ich bin mal mit der F7-Taste alles schritt für schritt durch gegangen, und das Programm stürtz bei der Procedure Berechnung ab. ab wo genau hab ich nicht herausgefunden.
  Mit Zitat antworten Zitat
Benutzerbild von pilic
pilic

Registriert seit: 10. Aug 2006
Ort: Aschbach
131 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 20:45
Hi,

der Fehler kann eigentlich nur hier liegen:

        StringGrid1.Cells[x,i] := IntToStr(StrToInt(StringGrid1.Cells[0,x])*StrToInt(StringGrid1.Cells[i,0])); Weil '' nicht zu Integer umgewandelt werden kann.

Cheerio
  Mit Zitat antworten Zitat
24jb

Registriert seit: 6. Apr 2007
27 Beiträge
 
#5

Re: Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 21:46
aber woher kommt denn das '' das ist doch kein Wert der irgendwo vorkommt
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Fehler beim vergrößern eines StringGrid

  Alt 6. Mai 2007, 23:32
Hallo,


das '' deutet auf eine leere Zelle.

Benenn mal Deine SpinEdits (z.B SpEdCol ...) und die Variablen i und x (z.B. col ...).
Dann schau Dir TForm1.berechnung noch mal genau an
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
24jb

Registriert seit: 6. Apr 2007
27 Beiträge
 
#7

Re: Fehler beim vergrößern eines StringGrid

  Alt 7. Mai 2007, 10:13
Ich hab die Variablen und so umbenannt und die Berechnung von StringGrid1.ColCount und StringGrid1.RowCount abhängig gemacht.

Allerdings startet das Programm nicht mehr, sondern der alt bekannte Fehler kommt sofort.

Delphi-Quellcode:
Procedure TForm1.berechnung;
var col, row : Integer;
Begin

For row := 1 to StringGrid1.RowCount do
Begin
      For col := 1 to StringGrid1.ColCount do
   Begin
       StringGrid1.Cells[row,col] := IntToStr(StrToInt(StringGrid1.Cells[row,0])*StrToInt(StringGrid1.Cells[0,col]))
    end;
end;

End;
  Mit Zitat antworten Zitat
24jb

Registriert seit: 6. Apr 2007
27 Beiträge
 
#8

Re: Fehler beim vergrößern eines StringGrid

  Alt 7. Mai 2007, 11:02
Ich habe mal genauer nach geschaut, der Fehler kommt, wenn das programm die 7. spalte schreibt
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#9

Re: Fehler beim vergrößern eines StringGrid

  Alt 7. Mai 2007, 12:32
Hallo,

property Cells[ACol, ARow: Integer]: string; Du nutzt col als Argument für ARow und row als Argument für ACol,in der Eigenschaft Cells.
Zitat:
StringGrid1.Cells[row,col] := IntToStr(StrToInt(StringGrid1.Cells[row,0])*StrToInt(StringGrid1.Cells[0,col]))
dadurch greifst Du auf Zellen zu die außerhalb von row/ColCount liegen und noch keinen Wert enthalten, daher die Meldung ''' is not a valid integer value".

RowCount und ColCount ist nicht die Grenze des Arrays Cells.
Man kann beispielsweise bei RowCount = 10 und ColCount = 10 auf Cells[1000000,1000000] zugreifen.
Das Ergebnis ist ein Leerstring sofern diese Zelle nicht vorher mit einem String belegt wurde.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Fehler beim vergrößern eines StringGrid

  Alt 7. Mai 2007, 12:34
Hallo,

du machst dir das Leben unnötig schwer:

Delphi-Quellcode:
procedure TMultiForm.Berechnung;
var
  iCol, iRow: Integer;
begin
  with StringGrid do
  for iRow := 1 to Pred(RowCount) do
    for iCol := 1 to Pred(ColCount) do
      Cells[iCol, iRow] := IntToStr(iCol * iRow);
end;
Beim Vergleich findest du deine Fehler.

Grüße vom marabu
Angehängte Dateien
Dateityp: zip aufgabe_3_981.zip (2,0 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:22 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