Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigenschaft von cells in Stringgrid (https://www.delphipraxis.net/70674-eigenschaft-von-cells-stringgrid.html)

Trygve08 2. Jun 2006 14:35


Eigenschaft von cells in Stringgrid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, habe dieses Forum jetzt erst entdeckt, genau das richtige.
Wir nehmen gerade das Sieb des Eratosthenes durch, bei dem man Primzahlen herausfindet, indem man vielfache wegstreicht. Die untenstehende Lösung liefert das nicht, aber ich bin auf ein Problem gestoßen, zu demn ich eure Hilfe brauche.
Bei der Zuweisung eines Cells-Wertes über StrToInt wird ein EConvert-Fehler angegeben,
d.h. der Zelleninhalt hat nicht den String-Inhalt, der dem Integerwert entspricht.
Hier ist der Quellcode:
unit TobiasDaniel;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k: integer;
begin
k:=0;
with StringGrid1 do
for j:=0 to colcount-1 do
for i:=0 to RowCount-1 do
begin
k:=k+1;
Cells[i,j]:=inttostr(k);
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i,k:integer;
begin
with stringgrid1 do
for i:=0 to colcount-1 do
for k:=0 to rowcount-1 do
begin
begin
if (strtoint(cells[i,k])mod 2 =0) or (strtoint(cells[i,k])mod 3 =0) or (
strtoint(cells[i,k])mod 5 =0) or (strtoint(cells[i,k])mod 7 =0)then cells[i,k]:='';
cells[2,1]:='2';
cells[3,1]:='3';
cells[5,1]:='5';
cells[7,1]:='7';
cells[1,1]:='';
end;
end;
end;
end.

Dass i und k zweimal vorkommen, ist nicht entscheidend.
Bereits eine Zuordnung Zahl := StrToInt(Cells[i,k]) löst die gleiche Fehlermeldung aus,
Zahl hat den Typ Integer.

Weiß jemand Hilfe?

bttb930 3. Jun 2006 13:51

Re: Eigenschaft von cells in Stringgrid
 
in Button2Klick musst du i und k vertauschen, dann sollte es klappen (cells[zeile, spalte])

marabu 3. Jun 2006 16:10

Re: Eigenschaft von cells in Stringgrid
 
Herzlich willkommen in der Delphi-PRAXiS.

Du hast wahrscheinlich ein StringGrid mit RowCount = ColCount, so dass dir nicht auffällt, dass du die Zellen im event handler für Button1 falsch adressierst. Auch die Vergabe besserer Namen schützt vor solchen Fehlern:

Delphi-Quellcode:
procedure TMainForm.InitButtonClick(Sender: TObject);
var
  iCol, iRow: Integer;
begin
  with StringGrid do
    for iRow := 0 to Pred(RowCount) do
      for iCol :=0 to Pred(ColCount) do
        Cells[iCol, iRow] := IntToStr(Succ(iRow * ColCount + iCol));
end;
Freundliche Grüße vom marabu

Trygve08 3. Jun 2006 22:39

Re: Eigenschaft von cells in Stringgrid
 
Vielen Dank für die Tipps, ich bin dann selbst drauf gekommen, als ich die angehängte exe-Datei ablaufen ließ. Er akzeptierte '' nicht als Integerwert. Anders als bei Strings, bei denen der leere String als null interpretiert wird, kann die Funktion StrToInt mit dem leeren String nichts anfangen, erkennt ihn nicht als Integerwert. Durch Setzen einer '0' ist das Problem zu beheben.


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