| Autor |
Beitrag |
Roadrunner25
      
Beiträge: 89
Win XP
D7
|
Verfasst: 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
      
Beiträge: 28
WinXP Prof.
Blitz3D, PureBasic 4, Delphi 6
|
Verfasst: 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
      
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: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 
      
Beiträge: 89
Win XP
D7
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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
      
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 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 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Sa 14.04.07 09:49
ja, ok! werde mich jetzt erstmal der aufgabe stellen und poste dann hinterher mal den quellcode....
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Sa 14.04.07 11:09
komme nicht so wirklich weiter,...mir fehlen einfach die richtigen Befehle!
ein tipp würde mich sehr freuen!
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; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure kreis(r : Double; var fl, umf : Double); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public 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); begin
fl := pi*r*r;
umf := 2*pi*r;
end;
procedure TForm1.Button2Click(Sender: TObject); begin close end;
procedure TForm1.Button1Click(Sender: TObject); var i : Integer; s : String; f, u : Double;
begin
for i := StrToFloat(Edit1.Text) to StrToFloat(Edit2.Text) do begin
inc(i); if i = StrToFloat(Edit2.Text) then Exit;
end;
end;
end. |
|
|
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 11:39
Roadrunner25 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 CRASHKURS DELPHI von Christian S. ans Herz legen, da werden solche Sprachfeatures behandelt.
Gruß
alias5000
_________________ Programmers never die, they just GOSUB without RETURN
|
|
Roadrunner25 
      
Beiträge: 89
Win XP
D7
|
Verfasst: 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.....
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; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure kreis(r : Integer; var fl, umf : Double); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public 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); begin
fl := pi*r*r;
umf := 2*pi*r;
end;
procedure TForm1.Button2Click(Sender: TObject); begin close 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;
if i = StrToInt(Edit2.Text) then
Exit;
end;
end;
end. |
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Sa 14.04.07 13:11
Roadrunner25 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.....
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; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure kreis(r : Integer; var fl, umf : Double); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public 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); begin
fl := pi*r*r;
umf := 2*pi*r;
end;
procedure TForm1.Button2Click(Sender: TObject); begin close end;
procedure TForm1.Button1Click(Sender: TObject); 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 
      
Beiträge: 89
Win XP
D7
|
Verfasst: Sa 14.04.07 15:48
geht leider nicht,...bzw. löscht leider nicht die überflüssigen zeilen!
Robinator hat folgendes geschrieben: | Roadrunner25 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.....
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; interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls;
type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; StringGrid1: TStringGrid; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure kreis(r : Integer; var fl, umf : Double); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public 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); begin
fl := pi*r*r;
umf := 2*pi*r;
end;
procedure TForm1.Button2Click(Sender: TObject); begin close end;
procedure TForm1.Button1Click(Sender: TObject); 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: So 15.04.07 14:41
probiers mal so in deiner Button1click .. for-schleife
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 
      
Beiträge: 89
Win XP
D7
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: So 15.04.07 17:20
ups, jo ... rowcount setzen fehler und schleifen init fehler
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!
|
|
|