Autor Beitrag
Roadrunner25
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: 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...

ausblenden volle Höhe 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:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
procedure TForm1.kreis(r: Integer; var fl, umf : Double); // Berechnung der Werte
begin

 fl := pi*r*r;

 umf := 2*pi*r;

end;


procedure TForm1.Button1Click(Sender: TObject);    //per ButtonClick Zuweisung der Werte in die Zellen des SG

var
i : Integer;
s : String;
f, u : Double;

begin

 for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do   // Edit1.Text = Anfangsradius, Edit2.Text = Endradius

 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Mo 16.04.07 11:20 
ausblenden Delphi-Quelltext
1:
StringGrid1.Cells[0,i] := IntToStr(i);					


nehme an du meinst die zeile oder?
ich werde es mal probieren....
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Mo 16.04.07 11:27 
ok, habe es jetzt auch so hinbekommen! Danke für die Hilfe!

ausblenden 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);    //per ButtonClick Zuweisung der Werte in die Zellen des SG

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: 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?

ausblenden volle Höhe 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:
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  // Winkel Kappa, muss bis 270° laufen,  Anfangswinkel wird in Edit7 eingegeben

   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);  //Winkel Delta

      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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Do 19.04.07 13:57 
gerade probiert, klappt aber auch nicht!

ausblenden Delphi-Quelltext
1:
StringGrid1.RowCount := 271- StrToInt(Edit7.Text);					
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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!