Autor Beitrag
Krumnix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Di 25.01.05 17:42 
Hiho.

Hab in der Suche leider nix dazu gefunden. Liegt wohl auch daran, das bei der Suche von Schleife und For nen Haufen Zeug angezeigt wird ;).

Nun aber mein Problem.
Und zwar hab ich folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
   k := 0;
   for i := 1 to MaxZahl do
    begin
     if k > StringGrid1.RowCount then StringGrid1.RowCount := k + 1;
     StringGrid1.Cells[0,k] := inttostr(i)
     StringGrid1.Cells[1,k] := Wert[i].Zahl1;
     StringGrid1.Cells[2,k] := Wert[i].Zahl1;
     k := k + 1;
    end;


Dabei passiert folgendes:
Wenn ich das nun durchlaufen lasse, dann hört die Schleife um den Wert 1 vermindert von MaxZahl auf. Also MaxZahl ist z.B. 120 und in der ersten Spalte in Grid steht aber als letztes 119. Warum?

Und wenn ich jetzt hingehe und folgendes schreibe:

ausblenden Delphi-Quelltext
1:
   for i := 1 to MaxZahl + 1 do					


Dann zählt er bis 121. Warum denn das nun?
Wie bekomm ich es hin, das er bei 120 aufhört???
THX

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Di 25.01.2005 um 17:09
MitschL
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Di 25.01.05 18:07 
Nun,

die 119 erklär ich mir aus der Tatsache, daß k bei 0 anfängt und somit für 120 Durchläufe bei 119 ist.
Die 121 erscheint mir so fragwürdig, daß ich nur sagen, kann: Da fehlen mir notwendige Infos.

gegrüßt!

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Di 25.01.05 18:24 
Nunja, das k lass ich ja nicht anzeigen. Es ist ja nur dafür da, das ich das Grid durchnummerieren kann. Und das fängt ja bei 0,0 an. Somit ist k := 0....
In 0,k lasse ich ja dann den Wert von i anzeigen. Und der sollte doch bis MaxZahl laufen?! Tut er aber nicht :? :shock:
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: Di 25.01.05 18:25 
Also wenn du den Quellcode bis auf das +1 nicht veränderst darf sich bei 121 Durchläufen am Schluss gar nicht 121 als letztes Element im StringGrid befinden, da du k=0 initialisierst.
Außerdem: warum so umständlich mit einer Variable k? i - 1 erfüllt genau den gleichen Zweck.

AXMD
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Di 25.01.05 20:35 
Ne, das k wird ja später noch weiter verarbeitet. Und das k ist ja auch komplett egal. Es geht ja darum, das i nie die 120 erreicht sondern bei 119 aufhört. Also in StringGrid[0,0] steht 1 und in StringGrid[0,119] steht nix, ist leer.
Aber wenn ich 120 + 1 sozusagen schreibe, dann geht das ganze bis StringGrid[0,120] und dann steht dort die 121 aber drin....
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Di 25.01.05 20:54 
in dem fall hier würde ich aml sagenes liegt an dem programmierer
du hast uns den code gezeigt - da gekommt bestimmt nicht einmal 119 und bei einem mehr 121 raus

du hast erwähnt das du k weiterbenutzt (also wird in der for schleife denke k noch verändert)

demnach kann es sein das du bei einem i = x einfach ein 2. mal ein k veränderst
also z.b.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
i = 0; k = 0; [k] = 0;
i = 1; k = 1; [k] = 1;
i = 2; k = 2; [k] = 2;
i = 3; k = 3; [k] = 3;
i = 4; k = 4; [k] = 4;
i = 5; k = 4; [k] = 5//<- fehler aufgrund deiner routine die k ändert



solltest du k nicht weiter in der schleife benutzen solltest i nehmen

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Di 25.01.05 22:50 
Nein. k wird ausserhalb weiter benutz. Die Schleife sieht so aus.
Und i nehme ich nur für den Schleifenzähler. Da danach eine weitere Schleife begint, die auch mit i parametriert wird, muss ich ja den anderen Wert speichern. Und da will ich nicht überall i - 1 schreiben sondern mach es lieber so. Ist schneller dann und übersichtlicher.
Edit: Achso und noch ne kleine Info. Der Wert von i, der in der ersten Spalte von dem Grid aufgelistet wird, läuft von 1 bis 119, sollte ja aber bis 120 laufen. Bei +1 gehts aber bis 121. Das gleiche kommt, wenn ich alles rauswerfe und nur nen Edit-Feld nehme. Dann steht am Schluß bei Version ein 119 drin und bei der 2. 121.....
MitschL
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 211

Win 98 SE, Win 2000
D5 Pers, D6 Pers und D7 Pro
BeitragVerfasst: Mi 26.01.05 13:52 
Nächste Vermutung,

ich gehe mal davon aus, das RowCount zu Beginn <> 0 ist. Stimmts?
Nun kann ich bei einem RowCount von 4 nicht darauf warten, daß k größer wird. Ich behaupte, die Zeile, die sozusagen die initale Zeilenanzahl angibt, ist nicht da. Vorgänger und Nachfolger schon.

Das erklärt aber noch nicht die Sache mit der 121. :?

gegrüßt!

_________________
"Bloßes Ignorieren ist noch keine Toleranz." (Theodor Fontane)
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Mi 26.01.05 15:54 
Ja, die Vermutung stimmt. Habs voreingestellt auf 5. Aber solang ja k kleiner ist, sollte das egal sein, weil ja genug Zellen dann da sind. Und damit ich halt nachher alles lesen kann erhöhe ich damit die Anzahl der Reihen.
Aber in der Hilfe von Delphi steht folgendes:

Zitat:

for statements:

begin
counter := initialValue;
while counter <= finalValue do
begin
statement;
counter := Succ(counter);
end;
end


Da steht ja <= und das Gleich könnte ja was sein, das ich nie die 120 erreiche, und deswegen nur die 119 kommt. Aber wiese geht es bei 120 + 1 bis 121?
Ich habs jetzt mal mit ner while-schleife gemacht. Das funktioniert schonmal.
Trotzdem würde ich gerne mal wissen, ob da jemand nen Plan hat, warum einmal das und das andere mal das rauskommt.

Gruß
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mi 26.01.05 16:14 
da kommt mit sicherheit nicht einmal das eine und beim andern mal was anderes raus
das liegt eher am benutzer (dir) weil du uns nicht die ganze wahrheit sagst, die schleife wie du sie da stehen hast zeigt 120 bzw 121 an und nicht 119 und 121

sorry aber bei der behauptung will dir das keiner erklären und kann auch keiner das biste selbst schuld
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mi 26.01.05 18:07 
Ich liebe diese ganzen Halbwahrheiten ... :?

Wenn ihr es mal ausprobieren würdet, würdet ihr sehen, dass es sehr wohl den Anschein hat, als käme mal dieses, mal jenes raus.

Aber es ist so:
Die Schleife geht immer bis MaxZahl (also 120) oder eben auch bis MaxZahl+1 (also 121).
Es werden nur nicht immer alle Zeilen des StringGrids angezeigt.
Die Erhöhung von RowCount in dem Code ist so nicht korrekt.

Hängt einStringGrid1.RowCount := StringGrid1.RowCount+2;dahinter und man kann es sehen.

Erledigen kann man das Problem z.B. so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
    k := 0;  
   for i := 1 to MaxZahl do  
    begin  
     // if k > StringGrid1.RowCount then StringGrid1.RowCount := k + 1;  
     StringGrid1.Cells[0,k] := inttostr(i)  
     StringGrid1.Cells[1,k] := Wert[i].Zahl1;  
     StringGrid1.Cells[2,k] := Wert[i].Zahl1;  
     k := k + 1;  
    end
 
   StringGrid1.RowCount := k; //<--- neu
Krumnix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60

Win98,2000,XP
Delphi 7 Enterprise
BeitragVerfasst: Mi 26.01.05 20:18 
Also das mit dem StringGrid hab ich jetzt versucht. Das Prob. dabei war, das ich das auf 6 Reihen definiert hab. So konnte ich nicht alles sehn. Deswegen hab ich das mit dem k gemacht.
Jetzt bin ich aber hin und hab das Grid auf 100 erhöht und als MaxZahl 90 eingegeben. Und siehe da, ich konnte alles lesen. Hab ichs wieder zurück gemacht, was wieder mal so, mal so.
Also liegt es nicht an der For-Schleife sondern wohl daran, das die letzte Reihe nicht mehr angezeigt wird.....
IngoD7
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 629


D7
BeitragVerfasst: Mi 26.01.05 22:43 
Krumnix hat folgendes geschrieben:
Also liegt es nicht an der For-Schleife sondern wohl daran, das die letzte Reihe nicht mehr angezeigt wird.....


Was heißt "Was schon geschrieben stand" auf lateinisch?