Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi nimmt meine zahlen nicht im stringgrid trotz strtoint (https://www.delphipraxis.net/126741-nimmt-meine-zahlen-nicht-im-stringgrid-trotz-strtoint.html)

Molzer 1. Jan 2009 16:10


nimmt meine zahlen nicht im stringgrid trotz strtoint
 
warum bekomme ich die fehlermeldung?
"ist kein gültiger integerwert"

Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
try
    a := StrToInt(StringGrid1.Cells[0,1]) ;
    b := StrToInt(StringGrid1.Cells[0,2]) ;
    c := StrToInt(StringGrid1.Cells[0,3]) ;
    d := StrToInt(StringGrid1.Cells[0,4]) ;
except on EConvertError do
      showmessage ('Ungültige Eingabe');
      end;

taaktaak 1. Jan 2009 16:20

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Moin, Moin.

Zunächst einmal ALLEN ein GUTEN NEUES JAHR 2009!

zur Frage: Was steht in den Zellen? Alles Zahlen? Sind vielleicht "unsichtbare" Blanks enthalten?

Matze 1. Jan 2009 16:21

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Die Zelle scheint leer zu sein, doch durch try-except sollte so ein Fehler abgefangen werden.

Vielleicht weil in deinen Delphi-Optionen "Bei Sprach-Exceptions stoppen" aktiviert ist.
Starte die Anwendung mal aus dem Windows-Explorer heraus und schaue, ob die Meldung dann auch erscheint. Wenn nicht, liegt es an der genannten Einstellung.

Molzer 1. Jan 2009 16:30

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
alles zahlen und wenn ich die .exe starte schreibt er die ungültige eingabe!

Molzer 1. Jan 2009 16:35

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
die einstellung "Bei Sprach-Exceptions stoppen" finde ich leider nicht.

wo genau ist diese?

Uwe Raabe 1. Jan 2009 16:38

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Bei den Debugger-Optionen - genauer geht's nur wenn wir deine Delphi-Version wissen.

Hawkeye219 1. Jan 2009 16:44

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Hallo Molzer,

hast du vielleicht Zeilen und Spalten vertauscht? Dein Code erwartet die Daten in der ersten Spalte.

Gruß Hawkeye

Molzer 1. Jan 2009 16:49

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Borland® Delphi® für Microsoft® Windows™ Version 10.0.2288.42451 Update 2 Copyright © 2005 Borland®
Software Corporation. Alle Rechte vorbehalten.

Fussball-Robby 1. Jan 2009 16:50

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Benutze doch zu Testzwecken mal ein
Delphi-Quellcode:
ShowMessage('"' + StringGrid1.Cells[0,1] + '"');
Und das für alle Zellen, die du ausliest. Dann siehst du zumindest, ob in den Zellen, die du ausliest, wirklich nur eine Zahl steht.

Molzer 1. Jan 2009 16:51

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
zeilen und spalten habe ich nicht vertauscht!

Molzer 1. Jan 2009 16:54

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
er gibt mir nur die "" aus
:wall:

Uwe Raabe 1. Jan 2009 16:55

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Zitat:

Zitat von Molzer
Borland® Delphi® für Microsoft® Windows™ Version 10.0.2288.42451 Update 2 Copyright © 2005 Borland®
Software Corporation. Alle Rechte vorbehalten.

Delphi 2006 habe ich gerade nicht installiert, aber in Delphi 2007 findet man das so:
Tools -> Optionen -> Debugger-Optionen -> CodeGear Debugger -> Sprach-Exceptions -> Bei Sprach-Exceptions benachrichtigen

Helmi 1. Jan 2009 16:56

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Hallo,

hast du auch die richtige Zeile ausgewählt?

taaktaak 1. Jan 2009 16:58

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Zitat:

er gibt mir nur die "" aus
- dann stehen in den Zellen also gar keine Zahlen?
Seltsam...

Molzer 1. Jan 2009 17:00

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
nein das "bei sprachexc..." ist nicht dabei!

Helmi 1. Jan 2009 17:03

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
mach mal bitte einen screenshot deiner stringgrid

Molzer 1. Jan 2009 17:03

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Liste der Anhänge anzeigen (Anzahl: 1)
so schauts aus!

jaenicke 1. Jan 2009 17:06

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Die obere linke Zelle hat den Index 0,0 und nicht 0,1. Das wird vermutlich der Fehler sein. ;-)

taaktaak 1. Jan 2009 17:09

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Jooo,
du adressierst mit Cells[Col,Row],
also Col hochzählen, nicht die Zeilen!

Molzer 1. Jan 2009 17:12

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
also doch vertauscht! :wall:

dankeschön!

Helmi 1. Jan 2009 17:13

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Es müsste dann so heissen:

Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
try
    a := StrToInt(StringGrid1.Cells[0, 0]) ;
    b := StrToInt(StringGrid1.Cells[1, 0]) ;
    c := StrToInt(StringGrid1.Cells[2, 0]) ;
    d := StrToInt(StringGrid1.Cells[3, 0]) ;
except on EConvertError do
      showmessage ('Ungültige Eingabe');
      end;
oder um das Except wegzubekommen:
Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
  a := StrToIntDef(StringGrid1.Cells[0, 0], -1) ;
  b := StrToIntDef(StringGrid1.Cells[1, 0], -1) ;
  c := StrToIntDef(StringGrid1.Cells[2, 0], -1) ;
  d := StrToIntDef(StringGrid1.Cells[3, 0], -1) ;

  If (a = -1) or (b = -1) or (c = -1) or (d = -1) then
    ShowMessage ('Ungültige Eingabe');
end;
So wird bei einem Fehler (keine Zahl eingegeben in der StringGrid-Zelle) -1 als Defaultwert zurückgegeben.
Wenn ein Feld -1 beinhaltet, dann kommt die Meldung.
(Da geht natürlich nur, wenn die erlaubte Eingabe > -1 ist, also ab 0 positiv werdend...

Molzer 1. Jan 2009 17:15

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
yep!

Danke Dir!

Helmi 1. Jan 2009 17:16

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Zitat:

Zitat von Helmi
Es müsste dann so heissen:

Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
try
    a := StrToInt(StringGrid1.Cells[0, 0]) ;
    b := StrToInt(StringGrid1.Cells[1, 0]) ;
    c := StrToInt(StringGrid1.Cells[2, 0]) ;
    d := StrToInt(StringGrid1.Cells[3, 0]) ;
except on EConvertError do
      showmessage ('Ungültige Eingabe');
      end;
oder um das Except wegzubekommen:
Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
  a := StrToIntDef(StringGrid1.Cells[0, 0], -1) ;
  b := StrToIntDef(StringGrid1.Cells[1, 0], -1) ;
  c := StrToIntDef(StringGrid1.Cells[2, 0], -1) ;
  d := StrToIntDef(StringGrid1.Cells[3, 0], -1) ;

  If (a = -1) or (b = -1) or (c = -1) or (d = -1) then
    ShowMessage ('Ungültige Eingabe');
end;
So wird bei einem Fehler (keine Zahl eingegeben in der StringGrid-Zelle) -1 als Defaultwert zurückgegeben.
Wenn ein Feld -1 beinhaltet, dann kommt die Meldung.
(Da geht natürlich nur, wenn die erlaubte Eingabe > -1 ist, also ab 0 positiv werdend...

Oder:
Delphi-Quellcode:
var a,b,c,d:integer;
procedure TForm2.Button1Click(Sender: TObject);
begin
  If not TryStrToInt(StringGrid1.Cells[0, 0], a) or
     not TryStrToInt(StringGrid1.Cells[1, 0], b) or
     not TryStrToInt(StringGrid1.Cells[2, 0], c) or
     not TryStrToInt(StringGrid1.Cells[3, 0], d) then
    ShowMessage ('Ungültige Eingabe');
end;
(So wärst unabhängig von der Eingabe - aber auf die Eingabe von Nicht-Zahlen wird trotzdem geprüft...)

taaktaak 1. Jan 2009 17:19

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
da wir jetzt beim Optimieren angekommen sind:
Eine Schleife (und ein Integer-Array) wären in diesem Fall wohl schon überlegenswert...

Hawkeye219 1. Jan 2009 18:38

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
@Helmi: TryStrToInt liefert im Erfolgsfall den Wert True!

Gruß Hawkeye

Helmi 1. Jan 2009 18:44

Re: nimmt meine zahlen nicht im stringgrid trotz strtoint
 
Zitat:

Zitat von Hawkeye219
@Helmi: TryStrToInt liefert im Erfolgsfall den Wert True!

Gruß Hawkeye

Danke - habs repariert


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz