| Autor |
Beitrag |
maniac_89
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 16:59
Hi,
ich habe ein Problem und wenn ich dieses Programm hier ausführen möchte und auf einen Button klicke zum berechnen kommt immer Folgende Fehlermeldung: "", ist kein gültiger Integerwert. Warum, ich bin wirklich dieses Programm 1000 mal durchgegangen habe aber kein Fehler entdeckt  .
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178: 179: 180: 181: 182: 183: 184: 185: 186: 187:
| type bruch = record nenner1, nenner2: integer; zeahler1, zeahler2: integer; end;
var SDIAppForm: TSDIAppForm; ergebnis1, ergebnis2, zealnenner1, zealnenner2, temp : integer; brueche: bruch;
implementation
uses SysUtils, About;
{$R *.DFM}
function ggt (z1, z2: integer): integer; var divid, rest, restalt: integer; begin divid := z1; rest := z2; while rest > 0 do begin restalt := rest; rest := divid mod rest; divid := restalt; end; ggt := restalt; end;
function einlesen: bruch; var zeinlesen: bruch; begin zeinlesen.zeahler1 := strtoint (SDIAppForm.Edit1.text); SDIAppForm.Label1.caption := Floattostr (zeinlesen.zeahler1); end;
procedure anzeige; begin SDIAppForm.label1.caption := FloatToStr (ergebnis1); SDIAppForm.label2.caption := FloatToStr (ergebnis2); end;
procedure fehler; begin application.messagebox ('Fehler: Entweder wurden zu wenig Werte eingetragen oder es wurden ungültige Zeichen eingegeben', 'Fehler bei der Berechnung', 0+64); end;
procedure TSDIAppForm.ShowHint(Sender: TObject); begin end;
procedure TSDIAppForm.ExitItemClick(Sender: TObject); begin Close; end;
procedure TSDIAppForm.OpenItemClick(Sender: TObject); begin OpenDialog.Execute end;
procedure TSDIAppForm.SaveItemClick(Sender: TObject); begin SaveDialog.Execute; end;
procedure TSDIAppForm.About1Click(Sender: TObject); begin AboutBox.ShowModal; end;
procedure TSDIAppForm.FormCreate(Sender: TObject); begin Application.OnHint := ShowHint; end;
procedure TSDIAppForm.Button1Click(Sender: TObject); begin try brueche := einlesen; ergebnis1 := brueche.zeahler1 * brueche.zeahler2; ergebnis2 := brueche.nenner1 * brueche.nenner2;
temp := ggt(ergebnis1, ergebnis2); ergebnis1 := ergebnis1 div temp; ergebnis2 := ergebnis2 div temp; anzeige; except fehler; end; end;
procedure TSDIAppForm.Button2Click(Sender: TObject); begin try brueche := einlesen; ergebnis1 := brueche.zeahler1 * brueche.nenner2; ergebnis2 := brueche.zeahler2 * brueche.nenner1;
temp := ggt(ergebnis1, ergebnis2); ergebnis1 := ergebnis1 div temp; ergebnis2 := ergebnis2 div temp; anzeige; except fehler; end; end;
procedure TSDIAppForm.Button3Click(Sender: TObject); begin try brueche := einlesen;
if brueche.nenner1 <> brueche.nenner2 then begin ergebnis2 := brueche.nenner1 * brueche.nenner2; zealnenner1 := brueche.zeahler1 * brueche.nenner2; zealnenner2 := brueche.zeahler2 * brueche.nenner1; ergebnis1 := zealnenner1 - zealnenner2;
temp := ggt(ergebnis1, ergebnis2); ergebnis1 := ergebnis1 div temp; ergebnis2 := ergebnis2 div temp;
end else begin ergebnis1 := brueche.zeahler1 - brueche.zeahler2; ergebnis2 := brueche.nenner1; end; anzeige;
except fehler; end; end;
procedure TSDIAppForm.Button4Click(Sender: TObject); begin try brueche := einlesen; anzeige; if brueche.nenner1 <> brueche.nenner2 then begin ergebnis2 := brueche.nenner1 * brueche.nenner2; zealnenner1 := brueche.zeahler1 * brueche.nenner2; zealnenner2 := brueche.zeahler2 * brueche.nenner1; ergebnis1 := zealnenner1 + zealnenner2;
temp := ggt(ergebnis1, ergebnis2); ergebnis1 := ergebnis1 div temp; ergebnis2 := ergebnis2 div temp; end else
begin ergebnis1 := brueche.zeahler1 + brueche.zeahler2; ergebnis2 := brueche.nenner1; end; anzeige;
except fehler; end; end;
procedure TSDIAppForm.Button5Click(Sender: TObject); begin brueche := einlesen; SDIAppForm.label1.caption := FloatToStr (brueche.nenner1); end;
end. |
Ich hoffe ihr könnt mir Helfen.
Steffen, Maniac_89
Moderiert von UGrohne: Delphi-Tags hinzugefügt.Moderiert von UGrohne: Topic aus Sonstiges verschoben am Mo 21.02.2005 um 18:00
|
|
dr-girl
Hält's aus hier
Beiträge: 15
|
Verfasst: Mo 21.02.05 17:02
wo gibt er dir denn die Fehlermeldung aus?
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mo 21.02.05 17:03
Delphi-Tags. Ich lese sonst nichts.
Und Fehlerstelle angeben. Das machts leichter.
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mo 21.02.05 17:09
kann ja nur bei einem strtoint passieren, einfach mal nen strtointdef(...,0) nehmen, wobei die 0 der default wert ist wenn der text keine zahl ist - btw. adde mal die delphi tags
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 17:15
Die Fehlermeldung kommt immer wenn ich die Zahlen in die Edit Felder eingeben habe, und dann zum Beispiel auf den Button zum Addieren klicke.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 17:25
Was steht denn genau im
SDIAppForum.Edit1.text?
Mach mal vor der Zeile mit dem strtoint folgendes:
Delphi-Quelltext 1: 2:
| with SDIAppForm.Edit1 do ShowMessage(inttostr(length(Text))+':'+Text); |
und sag was du siehst.
Danke
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 17:32
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Mo 21.02.05 17:51
Richtig, dass heist das Feld ist auch leer. Und ein leeres Feld kannst du nunmal nicht in eine Zahl umwandeln, deshalb bekommst du auch eine Fehlermeldung. Deshalb überprüfe entweder ob in dem Feld ein gültiger Zahlwert steht (Beispiele im Forum) oder erlaube nur gültige Zeichen.
Gruß Hape!
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 17:54
Das Problem ist ja auch wenn ich in jedes Feld Zahlenwerte eingeb kommt die Fehlermeldung.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 17:56
| maniac_89 hat folgendes geschrieben: | | (...) die Zahlen in die Edit Felder eingeben habe, und dann zum Beispiel auf den Button zum Addieren klicke. |
Tja, dann tippst du deine Zahlen ins falsche Edit ein.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 21.02.05 18:00
Setze einfach in der Prozedur, die von dem entsprechenden Button ausgeführt wird (z.B. Button5Click) einen Haltepunkt (F5) und starte das Programm. Sobald du an die Stelle kommst, springt der Debugger auf und Du kannst mit F8 und F7 (für Einzelschritt, F7 mit Hinabsteigen in die Unterfunktionen) den ganzen Käse durchgehen. Wenn Du Deinen Mauszeiger auf eine Variable bewegst, siehst Du deren Wert. Anhand dessen gehst Du jetzt alles durch und findest damit Deinen Fehler.
Denn ich glaube, hier weiß niemand so richtig, wo er jetzt bei Deinem Code anfangen soll, vor allem, weil die Buttons nicht benannt sind und auch weil die KOmmentare so spärlich gesät sind.
Also: Debuggen!
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 18:01
Es gibt aber nur 4 Edit Felder und ich habe auch in alle was eingeben.
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 18:02
| maniac_89 hat folgendes geschrieben: | | (...) in jedes Feld Zahlenwerte eingeb kommt die Fehlermeldung. |
Kannst du uns mal die paar Zeilen zwischen "interface" und "implementation" posten, und sagen, wieviele Edit's du im Programm siehst? Du hast bestimmt einige Edits übereinander oder sowas.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 21.02.05 18:06
| delfiphan hat folgendes geschrieben: | | Kannst du uns mal die paar Zeilen zwischen "interface" und "implementation" posten, und sagen, wieviele Edit's du im Programm siehst? Du hast bestimmt einige Edits übereinander oder sowas. |
Die hab ich beim moderieren vorher rausgelöscht, weil die normalerweise eh nicht interessant sind.
Außerdem, wie willst Du daraus ersehen, was er wie wo eingibt?
Besser wäre es, wenn er uns sagen würde, welcher Button was macht und welches Edit-Feld befüllt werden muss. Vll. wäre ein Screenshot des Formulars auch ganz praktisch 
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 18:12
Weil dort die Deklaration des Forms ist? Ich will nur wissen, wieviele Edits dort deklariert sind, und wieviele Edits er effektiv mit seinen Augen sieht.
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 18:17
Wie kann ich ein Bild einfügen?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 18:21
Könntest du nicht trotzdem kurz die Formdeklaration posten? Ich mein, du schreibst offensichtlich ne Zahl in 4 Edits und wenn du aus einem der Edits liest kriegst du einen leeren String. Wie kann denn das sonst noch passieren, wenn da wirklich nur 4 Edits im Form sind?
Gruss
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mo 21.02.05 18:23
| maniac_89 hat folgendes geschrieben: | | Wie kann ich ein Bild einfügen? |
Das musst Du bisher leider auf einen eigenen Webspace hochladen und hier dann verlinken.
| delfiphan hat folgendes geschrieben: | | Weil dort die Deklaration des Forms ist? Ich will nur wissen, wieviele Edits dort deklariert sind, und wieviele Edits er effektiv mit seinen Augen sieht. |
Schon klar, dass dort die Deklaration des Forms ist, aber alles, was Du brauchst, hast Du doch im Quellcode. Was in der Deklaration steht is wurscht, solange es nicht verwendet wird. Und was verwendet wird, siehst Du ja im Quellcode ohne Probleme. Wie gesagt: Was am besten helfen würde, wäre der Screenshot bzw. eine genauere Erklärung, wie das Programm arbeiten soll.
|
|
maniac_89 
      
Beiträge: 54
|
Verfasst: Mo 21.02.05 18:25
object SDIAppForm: TSDIAppForm
Left = 403
Top = 145
ActiveControl = SpeedPanel
BorderStyle = bsToolWindow
Caption = 'Bruchrechenprogramm'
ClientHeight = 549
ClientWidth = 831
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -13
Font.Name = 'System'
Font.Style = []
Menu = SDIAppMenu
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 16
object Label1: TLabel
Left = 520
Top = 80
Width = 18
Height = 72
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 520
Top = 224
Width = 18
Height = 72
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
end
object Label3: TLabel
Left = 104
Top = 128
Width = 41
Height = 65
AutoSize = False
Caption = '-'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -96
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
end
object Label4: TLabel
Left = 360
Top = 128
Width = 41
Height = 65
AutoSize = False
Caption = '-'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -96
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
end
object Label5: TLabel
Left = 536
Top = 136
Width = 192
Height = 107
Caption = '------'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -96
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
Transparent = True
end
object Label6: TLabel
Left = 224
Top = 144
Width = 4
Height = 16
end
object TLabel
Left = 640
Top = 280
Width = 4
Height = 16
end
object GroupBox1: TGroupBox
Left = 80
Top = 384
Width = 545
Height = 129
Caption = 'Rechenarten:'
TabOrder = 10
end
object SpeedPanel: TPanel
Left = 0
Top = 0
Width = 831
Height = 30
Align = alTop
ParentShowHint = False
ShowHint = True
TabOrder = 0
object ExitBtn: TSpeedButton
Left = 3
Top = 2
Width = 25
Height = 25
Hint = 'Beenden|'
Glyph.Data = {
06020000424D0602000000000000760000002800000028000000140000000100
0400000000009001000000000000000000001000000010000000000000000000
80000080000000808000800000008000800080800000C0C0C000808080000000
FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF00377777777777
777777773FFFFFFFFFFFF333333F888888888888F7F7F7888888888888883333
33888888888888877F7F788888888888888F333FF88844444400888FFF444444
88888888888333888883333334D5007FFF433333333338F888F3338F33333333
345D50FFFF4333333333388788F3338F3333333334D5D0FFFF433333333338F8
78F3338F33333333345D50FEFE4333333333388788F3338F3333333334D5D0FF
FF433333333338F878F3338F33333333345D50FEFE4333333333388788F3338F
3333333334D5D0FFFF433333333338F878F3338F33333333345D50FEFE433333
3333388788F3338F3333333334D5D0EFEF433333333338F878F3338F33333333
345D50FEFE4333333333388788F3338F3333333334D5D0EFEF433333333338F8
F8FFFF8F33333333344444444443333333333888888888833333333333333333
3333333333333333FFFFFF333333333333300000033333333333333888888F33
333333333330AAAA0333333333333338FFFF8F33333333333330000003333333
33333338888883333333}
NumGlyphs = 2
OnClick = ExitItemClick
end
end
object Edit1: TEdit
Left = 64
Top = 80
Width = 121
Height = 80
AutoSize = False
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 1
end
object Edit2: TEdit
Left = 64
Top = 224
Width = 121
Height = 80
AutoSize = False
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 2
end
object Edit3: TEdit
Left = 320
Top = 80
Width = 121
Height = 80
AutoSize = False
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 3
end
object Edit4: TEdit
Left = 320
Top = 224
Width = 121
Height = 80
AutoSize = False
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 4
end
object Button1: TButton
Left = 354
Top = 416
Width = 89
Height = 73
Caption = '*'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 5
OnClick = Button1Click
end
object Button2: TButton
Left = 472
Top = 416
Width = 89
Height = 73
Caption = '/'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 6
OnClick = Button2Click
end
object Button3: TButton
Left = 240
Top = 416
Width = 89
Height = 73
Caption = '-'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 7
OnClick = Button3Click
end
object Button4: TButton
Left = 120
Top = 416
Width = 89
Height = 73
Caption = '+'
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -64
Font.Name = 'Arial'
Font.Style = []
ParentFont = False
TabOrder = 8
OnClick = Button4Click
end
object StatusBar1: TStatusBar
Left = 0
Top = 529
Width = 831
Height = 20
Panels = <>
SimplePanel = False
end
object Button5: TButton
Left = 672
Top = 296
Width = 73
Height = 49
Caption = 'Button5'
TabOrder = 11
OnClick = Button5Click
end
object SDIAppMenu: TMainMenu
Left = 335
Top = 30
object FileMenu: TMenuItem
Caption = '&Datei'
object ExitItem: TMenuItem
Caption = '&Beenden'
Hint = 'Anwendung beenden'
ShortCut = 32856
OnClick = ExitItemClick
end
end
object Help1: TMenuItem
Caption = '&Hilfe'
object About1: TMenuItem
Caption = '&Info...'
OnClick = About1Click
end
end
end
object OpenDialog: TOpenDialog
Filter = 'Alle Dateien(*.*)|*.*'
Left = 367
Top = 30
end
object SaveDialog: TSaveDialog
Filter = 'Alle Dateien(*.*)|*.*'
Left = 399
Top = 30
end
end
Meintest du das mit "Formdeklaration"?
|
|
delfiphan
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Mo 21.02.05 18:29
| UGrohne hat folgendes geschrieben: | | Was in der Deklaration steht is wurscht, solange es nicht verwendet wird. Und was verwendet wird, siehst Du ja im Quellcode ohne Probleme. |
Sorry da bin ich nicht einverstanden. In der Deklaration sehe ich genau was alles für Edits aufm Form sind. Die tauchen nach "implementation" nicht mehr auf. Evtl. hat er zu viel mit dem Form rumgespielt und seine Edit1 bis Edit4 sind irgendwo versteckt, und in Tat und Wahrheit trägt er seine Zahlen in Edit5-Edit8 ein. Wäre ja möglich.
Edit: Ok, hab mich getäuscht. Sorry. Wäre ja möglich gewesen!
|
|