Autor |
Beitrag |
Roadrunner25
      
Beiträge: 89
Win XP
D7
|
Verfasst: Mo 16.04.07 11:11
Hallo zusammen,
in meinem Programm steckt irgendwie der Wurm drin. Die gewünschten Berechnungen stimmen, nur die Ausgabe im StringGrid lässt etwas zu wünschen übrig. Erstmal zum Berechnungsprogramm : Das Programm stellt die Flächen und Umfänge von Kreisen gegenüber. Hierfür werden in die Eingabemaske der Anfangsradius und der Endradius eingegeben. Im StringGrid sollen diese Werte dargestellt werden. Wenn ich zB die Flächen und Umfänge von Kreisen mit den Radien 10 bis 20 gegenüberstelle, werden die ersten 10 Zeilen im StringGrid nicht gefüllt. Das Programm schreibt erst ab der 10ten Zeile die Werte in StringGrid.....ist etwas lästig, wenn man höhere Werte eingiebt und dann erstmal 30 oder mehr Freizeilen hat!
Wie kann ich die überflüssigen Zeilen löschen, bzw. wie bekomme ich das Programm dazu gleich die erste Zeile mit den Werten zu füllen...
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:
| procedure TForm1.kreis(r: Integer; var fl, umf : Double); begin
fl := pi*r*r;
umf := 2*pi*r;
end;
procedure TForm1.Button1Click(Sender: TObject); var i : Integer; s : String; f, u : Double;
begin
for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do begin
StringGrid1.RowCount := i+1;
StringGrid1.Cells[0,i] := IntToStr(i);
kreis(i,f,u);
Str(f:6:2, s);
StringGrid1.Cells[1,i] := s;
Str(u:6:2, s);
StringGrid1.Cells[2,i] := s;
end; end; |
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 16.04.07 11:14
Das Problem ist, dass i bei dem ersten eingegebenen Wert beginnt. Wenn du nun Zeile i befllst, is das halz z.B. Zeile 10.
Zieh bei der Angabe der Zelle von I den Startwert nochmal ab, dann müsste es gehen.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Mo 16.04.07 11:20
Delphi-Quelltext 1:
| StringGrid1.Cells[0,i] := IntToStr(i); |
nehme an du meinst die zeile oder?
ich werde es mal probieren....
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Mo 16.04.07 11:23
Die und dort wo du die Zeilenanzahl setzt ( da tuts auch nen Grid.Rowcount := Grid.RowCount + 1; )
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Mo 16.04.07 11:27
ok, habe es jetzt auch so hinbekommen! Danke für die Hilfe!
Delphi-Quelltext 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:
| procedure TForm1.Button1Click(Sender: TObject); var i : Integer; s : String; f, u : Double;
begin
for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do
begin
StringGrid1.RowCount := i+1;
StringGrid1.Cells[0,i-StrToInt(Edit1.Text)+1] := IntToStr(i);
kreis(i,f,u);
Str(f:6:2, s);
StringGrid1.Cells[1,i-StrToInt(Edit1.Text)+1] := s;
Str(u:6:2, s);
StringGrid1.Cells[2,i-StrToInt(Edit1.Text)+1] := s;
end; end; |
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Do 19.04.07 13:37
Me and my StringGrid...
Hallo zusammen,...dachte eigentlich dieser Beitrag wäre schon closed, habe aber immer noch ein Problem mit meinem StringGrid!
Im Anhang das besagte SG. Lasse mir in diesem SG Werte ausgeben, die in einer anderen Procedure berechnet werden.
Wird ein bestimmter Wert von Delta erreicht, stoppen die Berechnungen. Einziger Schönheitsfehler ist, dass mir dennoch mein Progamm die restlichen leeren Zellen anzeigt.
Hatte gehofft hier im Forum einen Beitrag dazu zu finden, wie man (überflüssige) Zellen löscht, aber leider nix im Angebot ..
Könnt Ihr mir helfen?
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:
| procedure TForm1.Button2Click(Sender: TObject);
var i : Integer ; s : String; a, b, d, f, m : Double;
begin
for i := StrToInt(Edit7.Text) to 270 do begin
StringGrid1.RowCount := i+1;
StringGrid1.Cells[0,i-StrToInt(Edit7.Text)+1] := IntToStr(i);
ende(i,StrToFloat(Edit1.Text),StrToFloat(Edit2.Text),StrToFloat(Edit3.Text),StrToFloat(Edit4.Text), StrToFloat(Edit5.text), StrToFloat(Edit8.Text),StrToFloat(Edit11.Text),a,b,d,f,m);
Str(d*180/pi:4:2, s); if StrToFloat(s) >= StrToFloat(Edit6.Text)*1.01 then begin
exit;
end;
StringGrid1.Cells[1,i-StrToInt(Edit7.Text)+1] := s;
Str(a*180/pi:4:2, s);
StringGrid1.Cells[2,i-StrToInt(Edit7.Text)+1] := s;
Str(b*180/pi:4:2, s);
StringGrid1.Cells[3,i-StrToInt(Edit7.Text)+1] := s;
Str(f*0.001:4:3, s);
StringGrid1.Cells[5,i-StrToInt(Edit7.Text)+1] := s;
Str(m:8:2, s);
StringGrid1.Cells[4,i-StrToInt(Edit7.Text)+1] := s;
end;
end; |
Einloggen, um Attachments anzusehen!
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Do 19.04.07 13:50
Das Problem hatte ich dir eigentlich schon genannt, du setzt Rowcount auf i+1, somit bekommst du 271 Zeilen. Setz RowCount auf 271 - anfangswert von I, dann müsste es passen.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Do 19.04.07 13:57
gerade probiert, klappt aber auch nicht!
Delphi-Quelltext 1:
| StringGrid1.RowCount := 271- StrToInt(Edit7.Text); |
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 19.04.07 14:10
nicht übeflüssiges löschen, sondern vermeiden heisst die devise
wo setzt du denn rowcount sonst noch?
StringGrid1.RowCount := 271- StrToInt(Edit7.Text);
also zb 271 - 260 = 10 ...
in der button2click dann
for i := 260 to 270 do ..
StringGrid1.RowCount := i+1;
bis die delta-bedingung greift ...
wenn nun 10 durchläufe zu machen sind,
hast du 10 Zeilen vorab eingefügt und
dann noch mal 10 beim durchlaufen hinzugefügt, oder ?
probiers mal und guck, ob du 20 zeilen hast ...
wenn ja, einfach mal das
StringGrid1.RowCount := 271- StrToInt(Edit7.Text);
weglassen  (weniger ist manchmal mehr ..)
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Do 19.04.07 14:29
setze nur einmal den RowCount ein....oben im Quellcode zu sehen...sonst an keiner anderen Stelle!
habe das mal mit 270-260 versucht und das Programm erzeugt dann 10 Zeilen, das passt also!
Nur wenn ich jetzt, zB als Anfangswert Delta = 80 eingebe, und die Abbruchbedingung schon bei Kappa = 130 eingreift, haut der mir immer noch die restlichen Zellen, zB von Delta = 96 bis 270 ins StringGrid!
Wenn ich den RowCount weglasse werden nur 5 Zeilen generiert!
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 19.04.07 14:38
hm .. dann greift dein Exit wahrscheinlich nicht
setzt doch mal einen haltepunkt auf die zeile mit dem exit (f5)
und dann lass das programm mal laufen ... unterbricht es nicht
die ausführung, (also normaler durchlauf) dann wird nie zum exit verzweigt,
also bedingung falsch
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 19.04.07 14:43
was macht eigentlich ende( ...) ??
setzt du da irgendwelche werte um ?
z.b. eines der edit-felder, die du zur steuerung benutzt ?
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Do 19.04.07 14:54
das abbruchkriterium greift ein,...sonst würden mir ja die werte bis kappa = 270 im SG angezeigt...habe ich eben mal getestet!
die procedure ende berechnet mir die ganzen werte, die im SG ausgegeben werden für jedes "i"...
hierbei werden die anfangsbedingungen aus Editfeldern ausgelesen,...also die anfangswerte!
kann man nicht einfach die überflüssigen Zeilen löschen?
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 19.04.07 15:22
klar, kann man
// tmp-var machen
ersteleerezeile : integer;
// tmp-var init
ersteleerezeile := sg.rowcount;
//sg von hinten nach vorn durchlaufen
for I : sg.rowcount to 1 do
if zeileleer then // prüfen, ob leerzeile
ersteleerezeile := i; // wenn ja, zeile merken
// sg-leerzeilen 'abschneiden'
sg.rowcount := ersteleerezeile;
(sollte gehen, hab gerade kein delphi da um's zu testen)
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
|