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

Win XP
D7
BeitragVerfasst: Fr 13.04.07 20:20 
Hallo zusammen!!!

In einem Programm von mir berechne ich verschiedene Werte, die von einem Parameter abhängig sind. Wie kann ist am Besten die errechneten Daten "zwischenspeichern" und in einem StringGrid ausgeben lassen? Ist es ratsam die Daten in Arrays zu speichern und dann den einzelnen Cells des SG die Daten zuzuweisen, oder wie würdet IHr das machen??

Gruß Roadrunner
Paddii
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 28

WinXP Prof.
Blitz3D, PureBasic 4, Delphi 6
BeitragVerfasst: Fr 13.04.07 21:25 
Das mit dem Array denke ich ist sinnvoll. Vielleicht solltest du ei zweidimensionales array nehmen, dann kannste mit 2 For-To-Do Schleifen alles auf einmal in das StringGrid ausgeben

Mfg Paddii
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: Fr 13.04.07 23:18 
Oder je nachdem, wie diese Berechnungen und so aussehen und was du mit den Daten noch alles machst, kannst du das ja eigentlich auch direkt ins StringGrid schreiben. Spart Ressourcen (keine Zwischenarrays nötig und einmal rüberkopieren fällt auch weg)

Wie groß jetzt der Vorteil ist, kommt drauf an, was du berechnest, ich nehme an, nicht so aufwendig, dann wäre es ziemlich egal

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Roadrunner25 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Sa 14.04.07 09:18 
Es sieht so aus, dass ich mir Daten für verschiedene Winkeleinstellung ausrechnen lassen möchte. Hierzu gebe ich den Start- und Endwinkel ein. Pro Gradschritt sollen die Daten dann im StringGrid siehtbar gemacht werden...
Nur bei der Umsetzung habpert es noch!

Für jede Hilfe dankbar!
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: Sa 14.04.07 09:32 
ich würd's in etwa so machen, wie alias5000 vorschlägt.
Dazu schreibst du dir ne methode mit den werten als parameter
(z.b. NeueStringZeile(xWert1: Datentyp; xwert2 : Datentyp...)),
die eine Zeile in ein Stringgrid einfügt, und die Werte einträgt.
dann rufst du diese methode an der stelle auf, wo du den wert errechnest.
sollte die Anzeige nicht sofort kommen, könnte ein Application.processMessages
helfen.
Hoffe, das hilft weiter ....
have a nice day

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: Sa 14.04.07 09:46 
Wenns nicht funktioniert, poste doch bitte den Quellcode mal hier rein, dann können wir dir auch konkretere Sachen sagen, als rumzuraten, wie aufwändig das ganze jetzt ist

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Roadrunner25 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Sa 14.04.07 09:49 
ja, ok! werde mich jetzt erstmal der aufgabe stellen und poste dann hinterher mal den quellcode....
Roadrunner25 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Sa 14.04.07 11:09 
komme nicht so wirklich weiter,...mir fehlen einfach die richtigen Befehle!
ein tipp würde mich sehr freuen!

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:
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:
unit SG;                 //Vergleich von Kreisflächen, Ausgabe in SG

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;        //Anfangsradius
    Edit2: TEdit;        //Endradius
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;    //Berechnen
    Button2: TButton;    //Beenden
    procedure FormCreate(Sender: TObject);
    procedure kreis(r : Double; var fl, umf : Double);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 with StringGrid1 do begin

 ColWidths[0] := 90;
 ColWidths[1] := 90;
 ColWidths[2] := 90;

 Cells[0,0] := 'Radius' + '[m]';
 Cells[1,0] := 'Fläche' + '[m²]';
 Cells[2,0] := 'Umfang' + '[m]';

 end;

end;

procedure TForm1.kreis(r: Double; var fl, umf : Double); // Berechnung der Werte
begin

 fl := pi*r*r;

 umf := 2*pi*r;

end;


procedure TForm1.Button2Click(Sender: TObject);
begin
close
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

 //ab hier hapert es.....weiß irgendwie nicht die richtigen Befehle


 for i := StrToFloat(Edit1.Text) to StrToFloat(Edit2.Text) do   //ich weis, geht nicht...

   begin

                                       //Werte berechnen und einfügen

   inc(i);                             //Radius um 1 erhöhen und erneut rechnen...

   if i = StrToFloat(Edit2.Text) then  //wenn Endradius erreicht ist,..abbrechen...

   Exit;


   end;

end;

end.
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
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)
BeitragVerfasst: Sa 14.04.07 11:39 
user profile iconRoadrunner25 hat folgendes geschrieben:

for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do //StrToInt macht aus einem String einen Integer, wenn der Inhalt sich in einen Integer umwandeln lässt

begin

//Werte berechnen und einfügen->das hast du hier jetzt noch rausgelassen, oder?

{inc(i);}//uaaa da schüttelts mich aber gewaltig! Das macht doch die for-schleife schon für dich!

if i = StrToInt(Edit2.Text) then //s.o.

Exit;


end;

end;

end.

[/delphi]


Ich würde dir mal den Suche in der Entwickler-Ecke CRASHKURS DELPHI von Christian S. ans Herz legen, da werden solche Sprachfeatures behandelt.

Gruß
alias5000

_________________
Programmers never die, they just GOSUB without RETURN
Roadrunner25 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Sa 14.04.07 12:45 
das das eben nicht klappen konnte war mir eigentlich klar! wollte eigentlich ne gleitkommazahl als radius verwenden, deswegen war ich auch mit StrToFloat am Werken.....

Habe das ganze erstmal auf Integer beschränkt....

Kann man das probeweise so lassen?

Ein problem ist bei der Sache noch,....wenn ich zum Beispiel Radius 5 bis 10 eingebe....erhalte ich die ersten vier zeilen ohne inhalt.....brauche ich ja eigentlich nicht und können gelöscht werden.....


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:
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:
unit SG;                 //Vergleich von Kreisflächen, Ausgabe in SG

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;        //Anfangsradius
    Edit2: TEdit;        //Endradius
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;    //Berechnen
    Button2: TButton;    //Beenden
    procedure FormCreate(Sender: TObject);
    procedure kreis(r : Integer; var fl, umf : Double);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 with StringGrid1 do begin

 ColWidths[0] := 90;
 ColWidths[1] := 90;
 ColWidths[2] := 90;

 Cells[0,0] := 'Radius' + '[m]';
 Cells[1,0] := 'Fläche' + '[m²]';
 Cells[2,0] := 'Umfang' + '[m]';

 end;

end;

procedure TForm1.kreis(r: Integer; var fl, umf : Double); // Berechnung der Werte
begin

 fl := pi*r*r;

 umf := 2*pi*r;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
close
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

   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;

   if i = StrToInt(Edit2.Text) then

   Exit;

   end;

end;

end.
Robinator
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 275

WinXP
BDS 2006
BeitragVerfasst: Sa 14.04.07 13:11 
user profile iconRoadrunner25 hat folgendes geschrieben:
das das eben nicht klappen konnte war mir eigentlich klar! wollte eigentlich ne gleitkommazahl als radius verwenden, deswegen war ich auch mit StrToFloat am Werken.....

Habe das ganze erstmal auf Integer beschränkt....

Kann man das probeweise so lassen?

Ein problem ist bei der Sache noch,....wenn ich zum Beispiel Radius 5 bis 10 eingebe....erhalte ich die ersten vier zeilen ohne inhalt.....brauche ich ja eigentlich nicht und können gelöscht werden.....


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:
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:
unit SG;                 //Vergleich von Kreisflächen, Ausgabe in SG

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;        //Anfangsradius
    Edit2: TEdit;        //Endradius
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;    //Berechnen
    Button2: TButton;    //Beenden
    procedure FormCreate(Sender: TObject);
    procedure kreis(r : Integer; var fl, umf : Double);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 with StringGrid1 do begin

 ColWidths[0] := 90;
 ColWidths[1] := 90;
 ColWidths[2] := 90;

 Cells[0,0] := 'Radius' + '[m]';
 Cells[1,0] := 'Fläche' + '[m²]';
 Cells[2,0] := 'Umfang' + '[m]';

 end;

end;

procedure TForm1.kreis(r: Integer; var fl, umf : Double); // Berechnung der Werte
begin

 fl := pi*r*r;

 umf := 2*pi*r;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
close
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
 StringGrid1.RowCount := StrToInt(Edit2.Text) - StrToInt(Edit1.Text);
 for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do

   begin  

   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;

   if i = StrToInt(Edit2.Text) then

   Exit;

   end;

end;

end.

_________________
erare humanum est
Roadrunner25 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 89

Win XP
D7
BeitragVerfasst: Sa 14.04.07 15:48 
geht leider nicht,...bzw. löscht leider nicht die überflüssigen zeilen!



user profile iconRobinator hat folgendes geschrieben:
user profile iconRoadrunner25 hat folgendes geschrieben:
das das eben nicht klappen konnte war mir eigentlich klar! wollte eigentlich ne gleitkommazahl als radius verwenden, deswegen war ich auch mit StrToFloat am Werken.....

Habe das ganze erstmal auf Integer beschränkt....

Kann man das probeweise so lassen?

Ein problem ist bei der Sache noch,....wenn ich zum Beispiel Radius 5 bis 10 eingebe....erhalte ich die ersten vier zeilen ohne inhalt.....brauche ich ja eigentlich nicht und können gelöscht werden.....


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:
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:
unit SG;                 //Vergleich von Kreisflächen, Ausgabe in SG

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;        //Anfangsradius
    Edit2: TEdit;        //Endradius
    Label1: TLabel;
    Label2: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;    //Berechnen
    Button2: TButton;    //Beenden
    procedure FormCreate(Sender: TObject);
    procedure kreis(r : Integer; var fl, umf : Double);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin

 with StringGrid1 do begin

 ColWidths[0] := 90;
 ColWidths[1] := 90;
 ColWidths[2] := 90;

 Cells[0,0] := 'Radius' + '[m]';
 Cells[1,0] := 'Fläche' + '[m²]';
 Cells[2,0] := 'Umfang' + '[m]';

 end;

end;

procedure TForm1.kreis(r: Integer; var fl, umf : Double); // Berechnung der Werte
begin

 fl := pi*r*r;

 umf := 2*pi*r;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
close
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
 StringGrid1.RowCount := StrToInt(Edit2.Text) - StrToInt(Edit1.Text);
 for i := StrToInt(Edit1.Text) to StrToInt(Edit2.Text) do

   begin  

   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;

   if i = StrToInt(Edit2.Text) then

   Exit;

   end;

end;

end.
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: So 15.04.07 14:41 
probiers mal so in deiner Button1click .. for-schleife
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
 StringGrid1.RowCount := StrToInt(Edit2.Text) - StrToInt(Edit1.Text);
 for i := 0 to StringGrid1.RowCount -1 do
  begin  
   kreis(i,f,u);
   StringGrid1.Cells[0,i] := IntToStr(i);
   StringGrid1.Cells[1,i] := FormatFloat('0.00', f);  
   StringGrid1.Cells[2,i] := FormatFloat('0.00', u);
  end;

end;

_________________
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: So 15.04.07 15:17 
hey, danke für die Hilfe, aber bringt irgendwie auch nicht das gewünschte resultat! die zeilen, wie du sie vorgeschlagen hast, überschreiben die FixRow und geben auch nicht die gewünschten werte an .... wenn ich zB den Anfangsradius auf 5 und den Endradius auf 10 setze, berechnet er mir alles zwischen 1 und 5....

...ich versuchs weiter...irgendwann komme ich schon darauf:)
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: So 15.04.07 17:20 
ups, jo ... rowcount setzen fehler und schleifen init fehler

ausblenden Delphi-Quelltext
1:
2:
 StringGrid1.RowCount := StrToInt(Edit2.Text) - StrToInt(Edit1.Text) + 1;
 for i := 1 to StringGrid1.RowCount -1 do


sollte besser klappen (jeweils +1,
damit lässt du dann in der schleife die erste zeile 'in ruhe' und
der Rowcount müsste dann auch passen (immer eins länger wie Anzahl schritte)

hf weiterhin ;)

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!