unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, ComCtrls; type TForm1 = class(TForm) Panel1: TPanel; GroupBox1: TGroupBox; GroupBox2: TGroupBox; GroupBox3: TGroupBox; BitBtn3: TBitBtn; StaticText1: TStaticText; StaticText2: TStaticText; ScrollBar1: TScrollBar; StaticText3: TStaticText; StaticText4: TStaticText; StaticText5: TStaticText; StaticText6: TStaticText; StaticText7: TStaticText; ScrollBar2: TScrollBar; Label1: TLabel; StaticText8: TStaticText; Label2: TLabel; ScrollBar3: TScrollBar; StaticText9: TStaticText; StaticText10: TStaticText; Label3: TLabel; StaticText11: TStaticText; StaticText12: TStaticText; Label4: TLabel; StaticText13: TStaticText; StaticText14: TStaticText; StaticText15: TStaticText; StatusBar1: TStatusBar; ScrollBar4: TScrollBar; StaticText16: TStaticText; Label5: TLabel; StaticText17: TStaticText; StaticText18: TStaticText; StaticText19: TStaticText; StaticText20: TStaticText; StaticText21: TStaticText; StaticText22: TStaticText; Label6: TLabel; procedure ScrollBar1Change(Sender: TObject); procedure ScrollBar2Change(Sender: TObject); procedure ScrollBar3Change(Sender: TObject); procedure ScrollBar4Change(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; anfangsjahr,endjahr:integer; startkapital,endkapital,zinssatz:real; implementation {$R *.dfm} function my_calculate(l_anfangsjahr,l_endjahr:integer;l_startkapital,l_zinssatz:real):real; {eine "selbstgeschriebene" Funktion mit Parameterübernahme in verschiedenen Datentypen realisiere ich gern mit dem Bezeichner der globalen Variablen und dem Vorsatz"l_". In einer Funktion gehen Parameter nur ein - sie werden nicht verändert oder gar zurückgegeben - anders als in einer Prozedur} begin my_calculate:=l_startkapital*EXP(LN(1+l_zinssatz/100)*(l_endjahr-l_anfangsjahr)); end; procedure my_parameters (var l_anfangsjahr,l_endjahr:integer;var l_startkapital,l_zinssatz:real); {eine Prozedur "erledigt" eine Aufgabe - sie tut etwas wie z. B. die Veränderung von Parametern irgenwelcher Übergabe-Parametern. Das Model funktioniert so, dass eine Größe in die Prozedur gereicht wird, dort verändert und anschließend mit den Veränderungen zurückgegeben wird} begin l_anfangsjahr:=Form1.ScrollBar1.Position; l_endjahr:=Form1.ScrollBar2.Position; l_startkapital:=StrToFloat(Form1.Label3.Caption); l_zinssatz:=StrToFloat(Form1.Label5.Caption); end; procedure TForm1.ScrollBar1Change(Sender: TObject); begin Label1.Caption:=IntToStr(ScrollBar1.Position); if ScrollBar1.Position>=ScrollBar2.Position then begin ScrollBar2.Position:=ScrollBar1.Position+1; StatusBar1.Panels[3].Text:=IntToStr(ScrollBar2.Position); end; my_parameters(anfangsjahr,endjahr,startkapital,zinssatz); StatusBar1.Panels[1].Text:=IntToStr(anfangsjahr); Label4.Caption:=FloatToStrF(my_calculate(anfangsjahr,endjahr,startkapital,zinssatz),ffFixed,2,4); StatusBar1.Panels[9].Text:=Label4.Caption; Label6.Caption:=IntToStr(endjahr-anfangsjahr); end; procedure TForm1.ScrollBar2Change(Sender: TObject); begin if ScrollBar2.Position<=ScrollBar1.Position then begin ScrollBar1.Position:=ScrollBar2.Position-1; StatusBar1.Panels[1].Text:=IntToStr(ScrollBar1.Position); end; Label2.Caption:=IntToStr(ScrollBar2.Position); my_parameters(anfangsjahr,endjahr,startkapital,zinssatz); StatusBar1.Panels[3].Text:=IntToStr(endjahr); Label4.Caption:=FloatToStr(my_calculate(anfangsjahr,endjahr,startkapital,zinssatz)); StatusBar1.Panels[9].Text:=Label4.Caption; Label6.Caption:=IntToStr(endjahr-anfangsjahr); end; procedure TForm1.ScrollBar3Change(Sender: TObject); begin Label3.Caption:=FloatToStr(ScrollBar3.Position/100); my_parameters(anfangsjahr,endjahr,startkapital,zinssatz); StatusBar1.Panels[5].Text:=FloatToStr(startkapital)+' €'; Label4.Caption:=FloatToStr(my_calculate(anfangsjahr,endjahr,startkapital,zinssatz)); StatusBar1.Panels[9].Text:=Label4.Caption; Label6.Caption:=IntToStr(endjahr-anfangsjahr); if ScrollBar3.Position=32000 then begin MessageDlg('... der maximale Betrag ist erreicht - es geht ja eigentlich nur um die berühmten 24 Dollar!',mtInformation,[mbOK],0); Exit; end; end; procedure TForm1.ScrollBar4Change(Sender: TObject); begin Label5.Caption:=FloatToStr(ScrollBar4.Position/100); my_parameters(anfangsjahr,endjahr,startkapital,zinssatz); StatusBar1.Panels[7].Text:=FloatToStr(zinssatz)+' %'; Label4.Caption:=FloatToStr(my_calculate(anfangsjahr,endjahr,startkapital,zinssatz)); StatusBar1.Panels[9].Text:=Label4.Caption; Label6.Caption:=IntToStr(endjahr-anfangsjahr); end; end.