Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   SpinEdit Fehler: Kein gültiger Integewert (https://www.delphipraxis.net/157967-spinedit-fehler-kein-gueltiger-integewert.html)

JadeFox 31. Jan 2011 20:24

Delphi-Version: 5

SpinEdit Fehler: Kein gültiger Integewert
 
Delphie gibt mir bei einer Schleife andauernd eine Fehlermeldung, die das ganze Programm abstürzen, und mich verzweifeln, lässt:

Im Projekt Project1.exe ist eine Exception der Klasse EConvertError aufgetreten. Meldung: ''' ist kein gültiger Integerwert'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Delphi-Quellcode:
var i:Integer;
begin
 if Tipp_ok(Tippzahlen) = true then
 begin
 sortiere_durch_Auswahl(Tippzahlen);
 zeige_Tip(Tippzahlen);
 for i:=1 to StrToInt(SpinEdit7.Text) do {in dieser Zeile liegt der Fehler}
  begin
  bestimme_Gewinnzahlen(Gew, zZahl);
  zeige_Gew(Gew, zZahl);
  zeige_Statistik(Rang(Tippzahlen, Gew, zZahl));
  end;
 end
 else
 ShowMessage('Deine Tippzahlen sind nicht gültig');
end;
Könnte mir jemand helfen? :(

mkinzler 31. Jan 2011 20:26

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Was steht den dann im SpinEdit?

Delphi-Quellcode:
for i:=1 to StrToIntDef(SpinEdit7.Text, 1) do

JadeFox 31. Jan 2011 20:30

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Eine beliebige Zahl, ich hab immer 4 oder so eingegeben.
aber dann ist es doch eig nciht leer!
ich habe vorher nie mit spinedit's gearbeitet,
kann es sein dass man etwas anderes als spinedit7.text schreiben muss?

Luckie 31. Jan 2011 20:31

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Die Text Eigenschaft liefert dir den Wert als Zeichenkette. Entweder wandelst du diese in einen Integer um oder du nimmst gleich die Value Eigenschaft.

JadeFox 31. Jan 2011 20:34

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Hab ich beides versucht
Delphi sagt jedes mal es sei es sei kein gültiger Integerwert

mkinzler 31. Jan 2011 20:35

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Dann schau dir mal im Debugger an, was da drin steht

JadeFox 31. Jan 2011 20:39

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Der Inhalt ist 4, wie angegeben

haentschman 31. Jan 2011 20:54

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Guten Abend...

probier mal:
Delphi-Quellcode:
var i:Integer;
begin
 if Tipp_ok(Tippzahlen) then // = true entfernt
 begin
   sortiere_durch_Auswahl(Tippzahlen);
   zeige_Tip(Tippzahlen);
   SpinEdit7.Enabled:= False; // während der Schleife nicht änderbar
   for i:=1 to SpinEdit7.Value do {in dieser Zeile liegt der Fehler}
   begin
     bestimme_Gewinnzahlen(Gew, zZahl);
     zeige_Gew(Gew, zZahl);
     zeige_Statistik(Rang(Tippzahlen, Gew, zZahl));
   end;
   SpinEdit7.Enabled:= True; // wieder aktiv setzen
 end
 else
 ShowMessage('Deine Tippzahlen sind nicht gültig');
end;
Objektinspektor des SpinEdit:
- Increment auf 1
- EditorEnabled auf False - du kannst manuell nix eintragen sondern nur blättern (verhindert evt. Fehleingaben)
- MinValue mindestens auf 1, da deine Schleife bei 1 beginnt
- ggf. MaxValue setzen

PS: das mit dem Value wurde schon erklärt.

stahli 31. Jan 2011 20:54

AW: SpinEdit Fehler: Kein gültiger Integewert
 
In meiner Erinnerung ist das so:

Wenn man den alten Text (z.B. "14") markiert und dann z.B. "7" tippt, wird erst '' (also ein Leerstring) verarbeitet und dann "7".
Das würde ich als Fehler in der Komponente bezeichnen.

Brich mal die Verarbeitung ab, wenn Text leer ist bzw. arbeite dann mit 0 weiter.

JadeFox 31. Jan 2011 21:06

AW: SpinEdit Fehler: Kein gültiger Integewert
 
ich hab mal das von haentschman versucht (danke )
aber es funktioniert nicht :(
jetzt kommt allerdings auch keine fehlermeldung mehr
ich hab mal versucht im objektinspektor das value auf 1 zu setzten aber es setzt sich immer wieder auf 0 zurück, ist das normal?

@stahli: wie ich soll das programm mit 0 als eingabewert starten?

haentschman 31. Jan 2011 21:10

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

aber es funktioniert nicht
... :gruebel: ein wenig genauer bitte.
Zitat:

ich hab mal versucht im objektinspektor das value auf 1 zu setzten aber es setzt sich immer wieder auf 0 zurück, ist das normal?
- welche Werte haben MinValue und MaxValue ?

Nachtrag: ich kann jeden Wert in Value setzen.

welche Delphiversion benutzt du ?

stahli 31. Jan 2011 21:41

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Hier mal ein Testprojekt.
Einfach ein SpinEdit und ein Memo und schauen, was das SpinEdit an Werten liefert:
Delphi-Quellcode:
unit fTestSpinEdit;

interface

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

type
  TForm1 = class(TForm)
    SpinEdit1: TSpinEdit;
    Memo1: TMemo;
    procedure SpinEdit1Change(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
  Memo1.Lines.Add('"' + SpinEdit1.Text + '"');
end;

end.
Folgende Werte werden verarbeitet:
Zitat:

"1"
"2"
"3"
"4"
""
"5"
Bis 4 habe ich die Button benutzt, dann den Text markiert und 5 gedrückt.
SpinEdit "feuert" dann mit einem Leerstring.

Die Ereignisbehandlung könntest Du dann z.B. abbrechen.
Delphi-Quellcode:
if SpinEdit.Text = '' then Exit;

Luckie 31. Jan 2011 21:57

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

Zitat von stahli (Beitrag 1078663)
Bis 4 habe ich die Button benutzt, dann den Text markiert und 5 gedrückt.
SpinEdit "feuert" dann mit einem Leerstring.

Aber das spielt doch nur eine Rolle, wenn er Code im OnChange des SpinEdits stehen hat.

JadeFox 1. Feb 2011 17:07

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

Zitat von haentschman (Beitrag 1078658)
Zitat:

aber es funktioniert nicht
... :gruebel: ein wenig genauer bitte.
Zitat:

ich hab mal versucht im objektinspektor das value auf 1 zu setzten aber es setzt sich immer wieder auf 0 zurück, ist das normal?
- welche Werte haben MinValue und MaxValue ?

Nachtrag: ich kann jeden Wert in Value setzen.

welche Delphiversion benutzt du ?

er macht alles bis es zur schleife kommt, dann passiert nichts mehr, auch keine fehlermeldung mehr

minvalue hat den wert 1 und maxvalue hab ich nichts angegeben
ich benutze delphie 7

ich hab den Debugger drüberlaufen lassen
das spinedit7.value hat den wert : ([csInheritable], False, False, (0, 0))
sagt euch das was?? :gruebel:

Bbommel 1. Feb 2011 17:53

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

Zitat von JadeFox (Beitrag 1078898)
das spinedit7.value hat den wert : ([csInheritable], False, False, (0, 0))
sagt euch das was?? :gruebel:

Ja, das sagt uns, dass du uns irgendwas anderes angibst, als das "Value" ;) - oder das SpinEdit war in Delphi 7 noch völlig anders umgesetzt.

Zur Erklärung: "Value" ist eigentlich nur ein Integer, sonst nix. Du solltest uns hier als Wert also eigentlich nur eine Zahl angeben können und sonst nix. Hast du dich vielleicht verklickt/vertippt, als du den Wert rausgesucht hast?

Und noch eine Frage, die hier ja schon angesprochen wurde, aber auf die du nicht genau eingegangen bist: An welcher Stelle rufst du diese Funktion eigentlich genau auf?

Bis denn
Bommel

JadeFox 1. Feb 2011 18:28

AW: SpinEdit Fehler: Kein gültiger Integewert
 
hab grad nochmal nachgeguckt, nein ich hab mich nciht verklickt

ich rufe sie ganz am ende meines prpgramms auf.

stahli 1. Feb 2011 18:31

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Wenn Du nur eine (Formular-)Unit hast, dann poste sie hier mal.
Ansonsten häng das Projekt mal als Zip an...

JadeFox 1. Feb 2011 19:21

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Liste der Anhänge anzeigen (Anzahl: 1)
aufgepasst da sind noch einige fehler drin ^^

stahli 1. Feb 2011 19:40

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Ohne mich tiefgreifend damit beschäftigt zu haben ist mir erst einmal aufgefallen, dass Du in der Funktion Neu Result nicht setzt.
Das Programm bleibt daher dort hängen.

So etwas kannst Du finden, indem Du einen Breakpoint setzt und das Programm schrittweise debugst.
Außerdem würde ich auf eine "ordentliche" (also übersichtliche) Formatierung achten (Einrückungen von begin-end-Blöcken usw.).
Man unterschätzt das gern, aber das hilft ungemein bei der Fehlersuche.

Dann brauchst Du auch nicht auf
Delphi-Quellcode:
if Ausdruck = True then ...
prüfen.
Delphi-Quellcode:
If Ausdruck then
oder
Delphi-Quellcode:
if not Ausdruck then
ist viel besser zu lesen.


Schau mal, ob Dir das schon hilft und dann kannst Du ja wieder fragen...

Luckie 1. Feb 2011 19:45

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Also bei mir stürzt die IDE (D2006) ab, wenn ich einen Breakpoint setze.

mkinzler 1. Feb 2011 19:46

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

Dann brauchst Du auch nicht auf if Ausdruck = True then ... prüfen.
Man sollte es auch nicht

JadeFox 1. Feb 2011 19:48

AW: SpinEdit Fehler: Kein gültiger Integewert
 
danke :)
hm ich dachte man könnte eunfach auch den namen der funktion nehmen statt result.
meinst du es dann so:

Delphi-Quellcode:
     
  function neu (Gew: TLottofeld; bisher, wert: Byte): Boolean;
   var bool: boolean;j: Byte;
    begin
      bool:=false;
      for j:=bisher downto 1 do
       begin
        if Gew[j] <> wert then
        bool:=true;
        result:=bool;
       end;
    end;

mkinzler 1. Feb 2011 19:50

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Man kann auch den Funktionsnamen nehmen oder
Delphi-Quellcode:
Result := True;

haentschman 1. Feb 2011 19:53

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Delphi-Quellcode:
procedure TForm1.zeige_Statistik (wert: Byte);
var i:Integer;
begin
 i:= StrToInt(Gridstats.Cells[1,wert]); // hier kommt der "" ist kein Integer Wert Fehler
 inc(i);
 Gridstats.Cells[1,wert] := IntToStr(i);
end;
... ist auch logisch, da das Grid leer ist. Der Fehler hatte nix mit dem SpinEdit zu tun.

Anmerkungen:
- bei den SpinEdit für den Tipp Min und Max setzen. Oder gibts 6 aus 1200 ? 8-)
- Deine Ziehung hat 2 gleiche Zahlen gezogen.
- in Tippzahlen sind verkehrte Werte. 1. immer 0 dann die Tipps, der letzte fehlt. Liegt wahrscheinlich in den 2 Schleifen in Tipp_ok

alles in allem als Empfehlung:
- bringe das Funktionsdurcheinander in Ordnung nicht jeder Kram muß gleich, wenn nur einmal verwendet ausgelagert werden.
- male dir den Programmablauf mal auf Papier.

stahli 1. Feb 2011 19:55

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Oh ja, sorry :oops:
Das "neu" habe ich übersehen.

Aber an der Stelle ging es bei mir nicht weiter.
Offenbar wurde die Bedingung nicht erfüllt und die repeat-Schleife daher nicht verlassen.
Vielleicht musst Du Dir die dortige Logik nochmal anschauen.

Ein Problem mit dem SpinEdit habe ich übrigens nicht festgestellt.

JadeFox 1. Feb 2011 20:01

AW: SpinEdit Fehler: Kein gültiger Integewert
 
hm stimmt es knnte irgednwie an
Delphi-Quellcode:
 if Tipp_ok(Tippzahlen) = true then
aber wenn der fehler bei der Prozedur zeige_Statistik liegt, warum werden dann die Prozeduren davor auch nciht ausgeführt?

Nein das lag am Sortieren, dass habe ich aber bereits behoben.

haentschman 1. Feb 2011 20:03

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

warum werden dann die Prozeduren davor auch nciht ausgeführt?
...die werden ausgeführt. Einmal, bis es in Zeige_Statistik kracht.
Delphi-Quellcode:
bestimme_Gewinnzahlen(Gew, zZahl); // wird ausgeführt
zeige_Gew(Gew, zZahl); // wird ausgeführt
zeige_Statistik(Rang(Tippzahlen, Gew, zZahl)); // kracht wegen leerem Grid + Tippzahlen falsch
Anmerkung: Debuggen mußt du üben, damit du dich selbst (dein Programm) an jeder Stelle prüfen kannst

mkinzler 1. Feb 2011 20:04

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Wie geschrieben, sollte es
Delphi-Quellcode:
if Tipp_ok(Tippzahlen) then
lauten

JadeFox 1. Feb 2011 20:14

AW: SpinEdit Fehler: Kein gültiger Integewert
 
und dann wird gleich davon ausgegangen das Tipp_ok(Tippzahlen) true ist?
das ist ja gut, danke.

ich üb mich ja schon, ich hab den debugger nur falsche gesetzt, aber du hast recht es liegt an der Statistik Prozedur, wenn ich sie ausklammer läuft das Programm.
Weiß jemand was mit der Fehlermeldung dann genau gemeint ist?

haentschman 1. Feb 2011 20:16

AW: SpinEdit Fehler: Kein gültiger Integewert
 
ein Leerzeichen bzw. kein Zeichen (weil dein Grid leer ist), was du aus der Zelle holst willst du mit StrToInt umwandeln. Boing... :stupid:
Zitat:

ich üb mich ja schon, ich hab den debugger nur falsche gesetzt
dann setzt man in jede Zeile, wo man denkt daß der Fehler da liegt, einen Breakpoint und steppt mit F9 durch. Da siehst du genau in welcher Procedure es kracht. Dann nimmt man sich die entsprechende Procedure nach selben Schema vor. Dann hast du die Zeile.

mkinzler 1. Feb 2011 20:26

AW: SpinEdit Fehler: Kein gültiger Integewert
 
Zitat:

und dann wird gleich davon ausgegangen das Tipp_ok(Tippzahlen) true ist?
Jeder Vergleich liefert einen Boolean-Wert zurück, deshalb ist es bei winer Funktion, welche schon einen Boolean zurückliefert, unnötig diesen mit einem Boolean zu vergleichen.
Zudem ist Wahr nicht eindeutig definiert.
Falsch ist 0 und wahr <> 0. So kann es passieren, dass eine c-Funktion -1 zurückliefert ( ist ja <> 0 also wahr) und der Vergleich mit der Konstante True von Delphi ( Wert 1) falsch ergibt, da -1 <> 1 ist


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