Fehler beim vergrößern eines StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: Fehler beim vergrößern eines StringGrid
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 |
Re: Fehler beim vergrößern eines StringGrid
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. |
Re: Fehler beim vergrößern eines StringGrid
Hi,
der Fehler kann eigentlich nur hier liegen:
Delphi-Quellcode:
Weil '' nicht zu Integer umgewandelt werden kann.
StringGrid1.Cells[x,i] := IntToStr(StrToInt(StringGrid1.Cells[0,x])*StrToInt(StringGrid1.Cells[i,0]));
Cheerio |
Re: Fehler beim vergrößern eines StringGrid
aber woher kommt denn das '' das ist doch kein Wert der irgendwo vorkommt
|
Re: Fehler beim vergrößern eines StringGrid
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 :zwinker: |
Re: Fehler beim vergrößern eines StringGrid
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; |
Re: Fehler beim vergrößern eines StringGrid
Ich habe mal genauer nach geschaut, der Fehler kommt, wenn das programm die 7. spalte schreibt
|
Re: Fehler beim vergrößern eines StringGrid
Hallo,
Delphi-Quellcode:
Du nutzt col als Argument für ARow und row als Argument für ACol,in der Eigenschaft Cells.
property Cells[ACol, ARow: Integer]: string;
Zitat:
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. |
Re: Fehler beim vergrößern eines StringGrid
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
du machst dir das Leben unnötig schwer:
Delphi-Quellcode:
Beim Vergleich findest du deine Fehler.
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; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:47 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