Autor |
Beitrag |
kekoa
Hält's aus hier
Beiträge: 5
|
Verfasst: Fr 13.04.07 21:05
Hallo Leute
Ich habe ein Problem mit meinem StringGrid.
Es rechnet schön brav, solange die zahlen nicht größer als 2-stellig sind. Das heißt, ab 100 denkt es sich irgendwelche zahlen aus, nimmt aber nicht die, die ich eingegeben habe.
Es handelt sich um ein wirtschaftliches Programm, das verschiedene Dinge berechnen soll.
hier mal den ausschnitt der prozedur:
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:
| procedure TForm5.btIGKClick(Sender: TObject); var i,y:integer; ISTsumme:byte ; begin
begin y:=StrToInt(edy.Text); ISTsumme:=0; for i := 1 to y do begin ISTsumme:=ISTsumme+StrToInt(sg2.cells[1,i]); end; ed1.text:=FloatToStr(ISTsumme);
ISTsumme:=0; for i:=1 to y do begin ISTsumme:=ISTsumme+StrToInt(sg2.cells[2,i]); end; ed2.text:=FloatToStr(ISTsumme);
ISTsumme:=0; for i := 1 to y do begin ISTsumme:=ISTsumme+StrToInt(sg2.cells[3,i]); end; ed3.text:=FloatToStr(ISTsumme);
ISTsumme:=0; for i := 1 to y do begin ISTsumme:=ISTsumme+StrToInt(sg2.cells[4,i]); end; ed4.text:=FloatToStr(ISTsumme);
ISTsumme:=0; for i := 1 to y do begin ISTsumme:=ISTsumme+StrToInt(sg2.cells[5,i]); end; ed5.text:=FloatToStr(ISTsumme);
end; end; |
Ich hab da gleich noch eine Frage: Kann man das was ich kursiv geschrieben habe schreiben? Ich möchte gern, das es eine Fehlermeldung bringt, wenn man auf den Button klickt, aber noch keine Werte in den Zellen des Stringgrids sind.
Ich wäre euch sehr dankbar, wenn ihr mir helfen könntet.
Danke im voraus
Moderiert von raziel: Ganz viele Tags durch Delphi-Tags ersetzt.
|
|
Paddii
      
Beiträge: 28
WinXP Prof.
Blitz3D, PureBasic 4, Delphi 6
|
Verfasst: Fr 13.04.07 22:27
Probiers erstmal mit den Delphi Tags, damit man das besser lesen kann, dabei könntest du das auch ruhig einrücken.
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Fr 13.04.07 23:22
Hallo, herzlich willkommen in der EE!
Ein Tipp, du hast den Delphi Code ja jetzt wirklich sehr aufwendig von Hand hervorgehoben. Wenn du deinen gesamten Quelltext stattdessen in <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG126794d4be85466d81f27daa445f96a6}</span></span> einrahmst, gehts viel einfacher. Raziel hat das ja jetzt mal kurz für dich übernommen
Mir fallen da ein paar Sachen bei auf, an deinem Quelltext:
kekoa hat folgendes geschrieben: |
Delphi-Quelltext 1:
| var i,y:integer; ISTsumme:byte ; | |
Dieser Ganzzahlentyp kann nur Zahlen bis 255 aufnehmen (also 0-255). Ich vermute, dass da dann letztendlich auch dein Fehler herkommt. Nehm stattdessen z.B. mal den Typ Integer, der nimmt viel größere Ganzzahlen auf.
kekoa hat folgendes geschrieben: |
ed1.text:=FloatToStr(ISTsumme){,ffFixed,10,2)+' '}; |
Benutze da doch IntToStr. Du hast ja eh keine Kommazahlen (da ISTSumme ja eine Ganzzahl vom Typ byte (bzw. später von integer  ) ist.
Zu deiner zweiten Frage: Du kannst am Anfang eine Fehlerüberprüfung machen und wenn er nicht weiterrechnen soll, kannst du die Ausführung dieser Procedure mit exit; abbrechen.
Gruß
alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
kekoa 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 14.04.07 11:14
naja, ihr konntet es hoffentlich trotzdem lesen, oder??
Ich versuch das mal mit dem integer, mal sehen obs klappt. wenn nicht, dann meld ich mich nochmal.
danke bisher
|
|
kekoa 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 14.04.07 11:35
Jetzt habe ich anstatt integer(weil das ni funktioniert) real genommen.
Anfangs hat es geklappt, doch auf einmal (ohne das ich ne Änderung im Quelltext vorgenommen habe) geht es nicht mehr, und es kommt folgende Fehlermeldung (leider auf Englisch):
Project Project1.exe raised exception class EConvertError with message ''is not a valid floating point value',.
Kann mir jemand sagen was das bedeuten soll?????
Bin mittlerweile am Verzweifeln, mal gehts mal nicht.
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Sa 14.04.07 12:30
Ich nehme an, du hast in einem Eingabefeld/Stringgridfeld einfach keinen Text drinnen stehen gehabt, also '' (in Delphi sind die Anführungsstriche ja einfach, statt "").
Aber warum ging jetzt integer nicht?
Gruß
alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
kekoa 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 14.04.07 14:48
alias5000 Zitat: | Ich nehme an, du hast in einem Eingabefeld/Stringgridfeld einfach keinen Text drinnen stehen gehabt, also '' (in Delphi sind die Anführungsstriche ja einfach, statt ""). |
Danke, das stimmt. habs bemerkt.
warum das mit integer ni funktioniert, weiß ich leider auch nicht. ist aber nicht so schlimm, es funktioniert ganz gut so mit real.
Ich hab noch zwei Fragen:
1. wie kann ich eine Fehlermeldung schreiben, die kommt, wenn in einem Stringgrid nix eingegeben wurde??
2. Wie kann ich Spalten meines StringGrids färben? Zum Beispiel die 1 und die 4 Spalte, die dazwischen aber nicht? Das gleiche bezogen auf eine Zeile??
(ich weiß die Frage wurde schon sehr oft gestellt, aber so wie es hier im Forum steht, klappt es bei mir nicht)
Danke für die kleine aber feinen Hinweise
|
|
Christian V.
      
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Sa 14.04.07 14:55
Ob etwas drinsteht kannst du so überprüfen:
Delphi-Quelltext 1:
| if StringGrid1.Cells[y,x]='' then ShowMessage('Fehler, bitte im Feld '+IntToStr(x)+','+IntToStr(y)+' ein Zahl eingeben'); |
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
kekoa 
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 14.04.07 16:18
Danke für den Tipp invulnerabilis, aber es ist das problem, das ich das am besten gleich für das ganze stringgrid fragen will. das heißt: wenn das stringgrid leer ist, dann bring eine fehlermeldung, ansonsten fang mit rechnen an.
theoretisch weiß ich wie das funktioniert, das problem ist nur, dass ich nicht weiß wie.
so unter dem Motto:
if SG1='' then (was so nicht geht)
und wenn ich das mit
SG1.cells[x,y]:=''
machen will, dann weiß ich nicht welche zellen ich angeben soll. Also was x und was y ist. denn es ist richtig, das in dem stringgrid nicht alle zellen beschrieben werden, sondern nur ein paar. in den anderen wird ausgegeben.
Also ich hoffe man versteht mein problem!?
Meine andere Frage ist übrigens auch immer noch ein problem. 
|
|
alias5000
      
Beiträge: 2145
WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
|
Verfasst: Sa 14.04.07 17:04
Eigentlich heißt es ja immer 1 Thema - 1 Frage, das schafft Übersicht. Wende das vllcht nächstes mal an
Zur ersten Frage:
ich zeig dir mal ein wenig Pseudocode:
Quelltext 1: 2: 3: 4: 5:
| wiederhole für i von 0 bis Zeilenanzahl des Stringgrid - 1 { Wenn Feld in Zeile i nicht gültig ist, dann { exit; } } |
Zweite Frage später, ich muss jetzt gehen
Gruß
alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
|