Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Editfeld Inhalt zwischenspeichern
Financeflash - Do 04.02.10 16:40
Titel: Editfeld Inhalt zwischenspeichern
Ich habe folgendes Problem:
Ich habe 2 Editfelder in die Ich einen Namen und eine Zahl hineinschreiben will.
nach der Klick der "procedure btnnachsterClick(Sender: TObject);" soll der Inhalt der 2 Editfelder in einem Array oder TString gespeichert werden, damit ich mit den Werten weiterrechnen kann.
Die Editfelder sollen gelöscht werden und das gleiche soll noch mal geschehen, bis die ganzen Gesellschafter durch sind.
Komme echt nicht weiter.
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:
| unit Uohg;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; edGesellschafter: TEdit; btnBestaetigen: TButton; lbName: TLabel; edName: TEdit; lbKapital: TLabel; edKapital: TEdit; lbAufforderung: TLabel; btnnachster: TButton; procedure btnBestaetigenClick(Sender: TObject); procedure btnnachsterClick(Sender: TObject); private public procedure Name_speichern(Name:integer); procedure Kapital_speichern; end;
var Form1: TForm1;
implementation
{$R *.dfm}
var SVn:array[1..20] of integer; SVk:array[1..20] of integer;
procedure TForm1.btnBestaetigenClick(Sender: TObject); var a:integer; begin a:=StrToInt(edGesellschafter.Text); if a <= 20 then begin edKapital.Visible:=true; edName.Visible:=true; lbAufforderung.Visible:=true; lbName.Visible:=true; lbKapital.Visible:=true; btnnachster.Visible:=true; end else begin ShowMessage('Maximale Anzahl der Gesellschafter überschritten!'); end; end;
procedure TForm1.btnnachsterClick(Sender: TObject); var count:integer; begin for count:=1 to StrToInt(edGesellschafter.Text) do begin Name_speichern(name); Kapital_speichern; end;
showmessage('Auswerttung wird durchgeführt. Bitte warten...');
end;
procedure TForm1.Name_speichern(Name: integer); var hilf:word; begin Name:=edName.Text; hilf:=SVn[Name]; SVn[Name]:=hilf+1; hilf:=SVn[20]; SVn[20]:=hilf+1; end;
procedure TForm1.Kapital_speichern(Kapital: integer); var hilf:word; begin Kapital:=StrToInt(edKapital.Text); hilf:=SVk[Kapital]; SVk[kapital]:=hilf+1; hilf:=SVk[20]; SVk[20]:=hilf+1; end; end. |
Dude566 - Do 04.02.10 16:51
Warum steht denn Kapital im Index des Arrays?
Financeflash - Do 04.02.10 16:53
Ich sehe selbst bei den Proceduren nicht mehr durch und benötige DDRINGEND Hilfe.
Bitte...
Dude566 - Do 04.02.10 17:06
1. Warum eine eigene Procedure zum Speichern der Daten?
2. So Speicherst du nix in dein Array
3. Was heist denn "und das gleiche soll noch mal geschehen, bis die ganzen Gesellschafter durch sind."?
Financeflash - Do 04.02.10 17:12
ich will den Namen in Editfeld eingeben, dann klicke ich auf den Button. Mit dem Klick wird die Eingabe (der Name) gespeichert und der editfeld Inhalt gelöscht, damit ich den nächsten Namen einschreiben kann. Nach dem ich den zweiten Namen eingeschrieben habe klicke ich wieder auf den Button, der Name wird gespeichert, der editfeld Inhalt gelöscht
Financeflash - Do 04.02.10 17:14
Das ist die komplette Aufgabe:
Für eine Offene Handelsgesellschaft (OHG) sollen Sie die Gewinnverteilung am Jahresende berechnen. Im Handelsgesetzbuch wird dazu die Rechenvorschrift in etwa so gefordert:
Jeder Gesellschafter (Eigentümer) bekommt zunächst sein eingebrachtes Kapital mit 4% pro Jahr verzinst. Diese Summe wird vom Gesamtgewinn abgezogen. Bleibt nach der Kapitalverzinsung für alle Gesellschafter ein Rest, so wird dieser durch die Anzahl der Gesellschafter geteilt. Jeder Gesellschafter erhält also die Kapitalverzinsung und seinen Anteil am Rest als Gewinnanteil ausgezahlt. Das Programm soll leisten:
Eingabe der Anzahl der Gesellschafter (max.20 mit Prüfung der Anzahl) und des Gesamtgewinns. Berechnung des Gewinnanteils für alle Gesellschafter einzeln. Ausgabe in einer Tabelle für alle Gesellschafter.
Die Datenhaltung soll in einem Feld erfolgen.
Dude566 - Do 04.02.10 17:16
Mal ein Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var mainForm: TmainForm; counter : integer; daten : array [1..25] of integer; procedure TmainForm.Button1Click(Sender: TObject); begin Inc(counter); if counter <= High(daten) then begin daten[counter] := StrToInt(edBeispiel.Text); edBeispiel.Clear; edBeispiel.SetFocus; end; end;
procedure TmainForm.FormCreate(Sender: TObject); begin counter := 0; end; |
Bergmann89 - Do 04.02.10 17:30
Hey,
das geht aber schief. Mal angenommen die Länge des Array ist 20 und der Counter steht auf 20. Dann führt gleift er auf daten[20] zu und das gibts nich! also entweder if counter < Length(daten) then ODER if counter <= Length(daten)-1 then ODER if counter <= High(daten) then ;)
MfG Bergmann
Dude566 - Do 04.02.10 17:32
Oh mist fängt ja bei Null an. :oops:
Financeflash - Do 04.02.10 17:34
aber ich benötige ja 2 Arrays
Dude566 - Do 04.02.10 17:37
Das ganze ist ein Beispiel! :mahn:
Wenn du es dir nicht selber anpassen bzw. erweitern willst dann erstell bitte in der Job Börse einen Topic, dann macht es dir vielleicht jemand.
Marc. - Do 04.02.10 17:37
Dude566 hat folgendes geschrieben : |
| Oh mist fängt ja bei Null an. :oops: |
Bei Deinem Beispiel nicht! Daher ist nun hier zufällig High() = Length().
Delphi-Quelltext
1:
| daten : array [1..25] of integer; |
Dynamische Arrays werden jedoch beginnend mit 0 indiziert.
Dude566 - Do 04.02.10 17:40
Also wars doch richtig! Ich bin total durcheinander von der Schule. :nut: :rofl:
Financeflash - Do 04.02.10 18:13
Bei mir funktioniert alles wunderbar, außer, dass die linke Seite nicht zugewiesen werden kann:
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:
| unit Uohg;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; edGesellschafter: TEdit; btnBestaetigen: TButton; lbName: TLabel; edName: TEdit; lbKapital: TLabel; edKapital: TEdit; lbAufforderung: TLabel; btnnachster: TButton; btnAuswertung: TButton; procedure btnnachsterClick(Sender: TObject); procedure FormCreate(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} var count : integer; name : array [1..20] of string; kapital : array [1..20] of single;
procedure TForm1.FormCreate(Sender: TObject); begin count := 0; end;
procedure TForm1.btnnachsterClick(Sender: TObject); var count:integer; begin Inc(count); if count <= StrToInt(edGesellschafter.Text)-1 then begin name[count] :=edName.Text; edName.Clear; edName.SetFocus; end else showmessage('bla bla bla');
end;
end. |
Dude566 - Do 04.02.10 18:55
was meinst du denn mit linker Seite?
Und steht in edGesellschafter.Text etwa die maximale Zahl der Datensätze, oder warum fragst du dort ob der counter den Wert nicht überschreitet?
Achja und warum deklarierst du count einmal global und dann beim Button Click wieder lokal?
Financeflash - Do 04.02.10 20:24
[Fehler] Uohg.pas(54): Der linken Seite kann nichts zugewiesen werden.
Dude566 - Do 04.02.10 22:38
Ja dann schau dir die Zeile an und du wirst sehen das es die ist welche ich im vorigen Post in Frage gestellt habe.
Du schaust dort ob der counter bereits bei der Zahl angekommen ist die du in edGesellschafter.Text eingegeben hast.
Ist das so beabsichtigt?
Financeflash - Fr 05.02.10 14:46
Schuldigung, das Problem ist in Zeile 56.
[Fehler] Uohg.pas(56): Der linken Seite kann nichts zugewiesen werden.
Xentar - Fr 05.02.10 14:53
Nenn das Array anders
Name ist auch eine Eigenschaft vom Formular.
Financeflash - Fr 05.02.10 15:03
Ok Vielen Dank.
Mein nächstes Problem ist, dass ich nach meiner Zählerschleife den Button ausblenden will und so (siehe Quelltest) funktioniert es schonmal nicht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.btnnachsterClick(Sender: TObject); begin for count:=1 to StrToInt(edGesellschafter.Text) do begin
namen[count]:=edName.Text; edName.Clear; edName.SetFocus;
end; btnnachster.Visible:=false; end; |
Marc. - Fr 05.02.10 15:24
Financeflash hat folgendes geschrieben : |
Ok Vielen Dank.
Mein nächstes Problem ist, dass ich nach meiner Zählerschleife den Button ausblenden will und so (siehe Quelltest) funktioniert es schonmal nicht: |
Was funktioniert nicht? Welche Fehlermeldung erscheint?
Ich vermute, dass du einzelne Datensätze nacheinander einer Liste hinzufügen möchtest. Sofern dies zutrifft, ist allerdings diese For-Schleife fehl am Platz. Überdenk da noch einmal dein Konzept. ;)
Edit:
Hier [
http://www.delphi-forum.de/viewtopic.php?p=594450#594450] wurde doch bereits eine sinnvolle Lösung vorgeschlagen. Warum baust du nicht darauf auf? :P
Dude566 - Fr 05.02.10 20:38
Danke
Marc. ich dachte schon es hätte jeder überlesen. :P
Financeflash - Fr 05.02.10 23:25
Hi mein Programm läuft fast reibunglos.
Ich will die Ergebnisse mit 2 nachkommastellen anzeigen lassen und habe gelesen, dass man dass mit "Format" machen kann, aber wie?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| for count:=1 to a do begin sg1.cells[0,count]:=namen[count]; sg1.cells[1,count]:=FloatToStr(Kapital[count]); sg1.cells[2,count]:=FloatToStr(kapital[count] * 0.04); sg1.cells[3,count]:=FloatToStr(Rest); sg1.cells[4,count]:=FloatToStr(Rest+(kapital[count]*0.04)); end; |
Marc. - Fr 05.02.10 23:30
Financeflash hat folgendes geschrieben : |
Hi mein Programm läuft fast reibunglos.
Ich will die Ergebnisse mit 2 nachkommastellen anzeigen lassen und habe gelesen, dass man dass mit "Format" machen kann, aber wie? |
Neue Frage, neuer Thread - sonst geht der Überblick verloren. ;)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!