|
otto06
(Gast)
n/a Beiträge |
#1
Hallo,
ich habe folgendes Problem: Ich habe ein Programm erstellt um eine Abzahlung zu simulieren. Es gibt nun das Problem, dass aus den erzeugten Stringgridwerten ein Diagramm erzeugt werden soll. Dieses soll die Stringgridwerte nutzen und außerdem dynamisch sein also je nach Kreditbetrag die Achseneinteilung variabel anpassen. Zum Einsatz soll eine Image-Komponente kommen (hier soll es hinein gezeichnet werden). Leider habe ich soetwas noch nie gemacht und weiß deshalb auch nicht wie man in eine Image-Komponente etwas reinzeichnet. Deshalb würde ich gerne einen Beispiel Quelltext haben oder am besten man würde mein Programm gleich vervollständigen. Würde es dem jenigen dann persönlich schicken. Außerdem habe ich noch das Problem, dass ich nicht weiß welchen Quelltext man einfügt um einen Absturtz zu verhindern, wenn man in den Edit Feldern folgende Dinge eingibt: Keine, Buchstaben oder negative zahlen. ![]() ![]() ![]() Hier ist der Hauptquelltext aus der ersten unit (Hier ist auch eine Festgeld anlage integriert):
Delphi-Quellcode:
unit Festgeldanlage; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Grids, StdCtrls, Buttons, ExtCtrls, Menus, Shellapi, jpeg; type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; N1: TMenuItem; Dokumentation1: TMenuItem; N2: TMenuItem; Info1: TMenuItem; Panel1: TPanel; Panel2: TPanel; GroupBox1: TGroupBox; GroupBox2: TGroupBox; Label6: TLabel; Label1: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Edit7: TEdit; Label2: TLabel; Label7: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn4: TBitBtn; StringGrid1: TStringGrid; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; BitBtn5: TBitBtn; BitBtn6: TBitBtn; StringGrid2: TStringGrid; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; Datei1: TMenuItem; Datei2: TMenuItem; N3: TMenuItem; DateiSpeichern1: TMenuItem; DateiSpeichernunter1: TMenuItem; N4: TMenuItem; Drucken1: TMenuItem; BitBtn7: TBitBtn; Dateiffnen1: TMenuItem; DateiSpeichern2: TMenuItem; DateiSpeichernunter2: TMenuItem; DruckenKreditrckzahlung1: TMenuItem; Diagrammespeichern1: TMenuItem; DiagrammspeichernKreditrckzahlung1: TMenuItem; AllesSpeichern1: TMenuItem; AllesSpeichernKreditrckzahlung1: TMenuItem; N5: TMenuItem; Beenden1: TMenuItem; SaveDialog2: TSaveDialog; SaveDialog3: TSaveDialog; OpenDialog2: TOpenDialog; SaveDialog4: TSaveDialog; SaveDialog5: TSaveDialog; SaveDialog6: TSaveDialog; Edit8: TEdit; Label8: TLabel; procedure FormCreate(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure Info1Click(Sender: TObject); procedure Dokumentation1Click(Sender: TObject); procedure BitBtn5Click(Sender: TObject); procedure BitBtn6Click(Sender: TObject); procedure Edit4Click(Sender: TObject); procedure Edit5Click(Sender: TObject); procedure Edit6Click(Sender: TObject); procedure Edit1Click(Sender: TObject); procedure Edit2Click(Sender: TObject); procedure Edit3Click(Sender: TObject); procedure BitBtn7Click(Sender: TObject); procedure StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); procedure Datei2Click(Sender: TObject); procedure DateiSpeichern1Click(Sender: TObject); procedure DateiSpeichernunter1Click(Sender: TObject); procedure Beenden1Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; const max=100; type dstz=record Jahr:string[5]; Anfang:string[20]; Zinsen:string[20]; Tilgung:string[20]; Ende:string[20]; end; tdateifeld=array[1..max]of dstz; tdatei=File of tdateifeld; var Form1: TForm1; dateifeld:tdateifeld; datei: tdatei; implementation uses Diagramm1, Diagramm2, Diagramm3; {$R *.DFM} procedure StringGridAlignment(Grid: TStringGrid; Rect: TRect; ACol, ARow: Integer; Alignment: TAlignment; LineBreak: Boolean); var TextOut: string; begin Grid.Canvas.FillRect(Rect); TextOut := Grid.Cells[ACol,ARow]; if LineBreak = false then begin if Alignment = taLeftJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect,DT_LEFT); if Alignment = taCenter then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect,DT_CENTER); if Alignment = taRightJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect,DT_RIGHT); end else begin if Alignment = taLeftJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect,DT_LEFT+DT_WORDBREAK); if Alignment = taCenter then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_CENTER+DT_WORDBREAK); if Alignment = taRightJustify then DrawText(Grid.Canvas.Handle, PChar(TextOut), StrLen(PChar(TextOut)), Rect, DT_RIGHT+DT_WORDBREAK); end; end; procedure TForm1.FormCreate(Sender: TObject); var i : integer; begin for i:=1 to max do with stringgrid2 do begin cells[0,0]:='Jahr'; cells[1,0]:='Anfang'; cells[2,0]:='Zinsen'; cells[3,0]:='Tilgung'; cells[4,0]:='Ende'; dateifeld[i].Jahr:=cells[i,0]; dateifeld[i].Anfang:=cells[1,i]; dateifeld[i].Zinsen:=cells[2,i]; dateifeld[i].Tilgung:=cells[3,i]; dateifeld[i].Ende:=cells[4,i]; begin with stringgrid2 do begin Cells[0,0]:='Jahr'; Cells[1,0]:='Anfang'; Cells[2,0]:='Zinsen'; Cells[3,0]:='Tilgung'; Cells[4,0]:='Ende'; stringgrid1.Cells[0,0]:='Jahr'; stringgrid1.cells[1,0]:='Guthaben'; stringgrid1.cells[2,0]:='Zinsen'; edit1.text:='20000'; edit2.text:='15'; edit3.text:='4'; edit4.text:='20000'; edit5.text:='7'; edit6.text:='1700'; edit7.clear; edit8.clear; stringgrid1.ColWidths[0] := 40; stringgrid2.ColWidths[0] := 40; {SetWindowLong(BitBtn1.Handle, GWL_STYLE,GetWindowLong(BitBtn1.Handle, GWL_STYLE) or BS_MULTILINE); BitBtn1.Caption := 'Zinsatz und Laufzeit' + #13#10 + 'berechnen'; {Schreibt einen Button zwei zeilig} end; end; end; end; procedure dateifeldlesen; var i:integer; begin for i:=1 to max do with form1.stringgrid2 do begin dateifeld[i].jahr:=cells[0,i]; dateifeld[i].anfang:=cells[1,i]; dateifeld[i].zinsen:=cells[2,i]; dateifeld[i].tilgung:=cells[3,i]; dateifeld[i].ende:=cells[4,i]; end; end; procedure zurueck; var k:integer; begin for k:=1 to max do with form1.stringgrid2 do begin cells[0,k]:= dateifeld[k].Jahr; cells[1,k]:= dateifeld[k].Anfang; cells[2,k]:= dateifeld[k].Zinsen; cells[3,k]:= dateifeld[k].Tilgung; cells[4,k]:= dateifeld[k].Ende; end; end; procedure TForm1.BitBtn3Click(Sender: TObject); begin close; end; procedure TForm1.BitBtn2Click(Sender: TObject); begin form2.show; end; procedure TForm1.BitBtn4Click(Sender: TObject); begin form3.show; end; procedure TForm1.Info1Click(Sender: TObject); begin application.MessageBox('Zinsrechner v1.0'+chr(13)+'Computer@ Software Developing'+chr(13)+chr(13)+'Written by'+chr(13)+' Niels Grabowski'+chr(13)+' Rico Guszahn'+chr(13)+chr(13)+'All rights reserved © 2009','Über'); end; procedure TForm1.Dokumentation1Click(Sender: TObject); begin ShellExecute(Application.Handle, 'open', PChar('Dokumentation\Dokumentation.pdf'), Nil, Nil, SW_NORMAL); end; procedure TForm1.BitBtn5Click(Sender: TObject); var i : integer; Kredit,Annuitaet,Ende,Zinsen,Zinssatz : real; begin Kredit:=Strtofloat (Edit4.Text); Zinssatz:=Strtofloat(Edit5.Text)/100; Annuitaet:=Strtoint(Edit6.Text); if Annuitaet<Kredit*(Zinssatz+0.01) then MessageDlg ('Die jährliche Rückzahlung reicht für eine '+ 'Abzahlung des Kredits nicht aus.', mtInformation,[mbOk],0) else begin i:=1; with stringgrid2 do repeat if i>5 then rowcount :=i+1; Cells[0,i]:=inttostr(i); Cells[1,i]:=floattostrf(Kredit,fffixed,10,2); Zinsen:=Kredit*Zinssatz; Cells[2,i]:=floattostrf(Zinsen,fffixed,10,2); Ende:=Kredit+Zinsen-Annuitaet; Cells[3,i]:=floattostrf(Annuitaet-Zinsen,fffixed,10,2); Cells[4,i]:=floattostrf(Ende,fffixed,10,2); Kredit:=Ende; i:=i+1; until Kredit*(1+Zinssatz)<Annuitaet; Edit7.Text:=inttostr(i); Edit8.Text:=floattostrf(Kredit*(1+Zinssatz),fffixed,10,2); end; end; procedure TForm1.BitBtn6Click(Sender: TObject); begin form4.show; end; procedure TForm1.Edit4Click(Sender: TObject); begin Edit4.selectall; BitBtn1.Default := False; BitBtn5.Default := True; end; procedure TForm1.Edit5Click(Sender: TObject); begin Edit5.selectall; BitBtn1.Default := False; BitBtn5.Default := True; end; procedure TForm1.Edit6Click(Sender: TObject); begin Edit6.selectall; BitBtn1.Default := False; BitBtn5.Default := True; end; procedure TForm1.Edit1Click(Sender: TObject); begin Edit1.selectall; BitBtn1.Default := True; BitBtn5.Default := False; end; procedure TForm1.Edit2Click(Sender: TObject); begin Edit2.selectall; BitBtn1.Default := True; BitBtn5.Default := False; end; procedure TForm1.Edit3Click(Sender: TObject); begin Edit3.selectall; BitBtn1.Default := True; BitBtn5.Default := False; end; procedure TForm1.BitBtn7Click(Sender: TObject); var j:integer; begin for j:=1 to max do with form1.stringgrid2 do begin cells[0,j]:=''; cells[1,j]:=''; cells[2,j]:=''; cells[3,j]:=''; cells[4,j]:=''; end; for j:=1 to max do with form1.stringgrid1 do begin cells[0,j]:=''; cells[1,j]:=''; cells[2,j]:=''; cells[3,j]:=''; cells[4,j]:=''; end; edit1.clear; edit2.clear; edit3.clear; edit4.clear; edit5.clear; edit6.clear; edit7.clear; end; //Methode im OnDrawCell aufrufen procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var j:integer; begin { //Text linksbündig ohne Zeilenumbruch in der ersten Zeile if ARow = 0 then StringGridAlignment(StringGrid2, Rect, ACol, ARow, taLeftJustify, False); } //Text zentriert mit Zeilenumbruch in der zweiten Zeile if ARow >= 0 then StringGridAlignment(StringGrid2, Rect, ACol, ARow, taCenter, True); {//Text rechtsbündig ohne Zeilenumbruch restliche Zeilen if ARow > 1 then StringGridAlignment(StringGrid2, Rect, ACol, ARow, taRightJustify, False); } end; procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var j:integer; begin if ARow >= 0 then StringGridAlignment(StringGrid1, Rect, ACol, ARow, taCenter, True); end; procedure TForm1.Datei2Click(Sender: TObject); begin if opendialog1.execute then begin assignfile(datei,opendialog1.filename); reset(datei); read(datei,dateifeld); closefile(datei); savedialog1.filename:=opendialog1.filename; form1.caption:=opendialog1.filename; zurueck; end; end; procedure TForm1.DateiSpeichern1Click(Sender: TObject); begin if savedialog1.filename<>'' then begin dateifeldlesen; assignfile(datei,savedialog1.filename); rewrite(datei); write(datei,dateifeld); closefile(datei); end else DateiSpeichernunter1Click(Sender); end; procedure TForm1.DateiSpeichernunter1Click(Sender: TObject); begin if savedialog1.Execute then begin dateifeldlesen; assignfile(datei,savedialog1.filename); rewrite(datei); write(datei,dateifeld); closefile(datei); form1.caption:=savedialog1.filename; end; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; procedure TForm1.BitBtn1Click(Sender: TObject); var i,Laufzeit:integer; Anfang, Ende, Zinsen, Zinssatz:Real; begin Anfang:=Strtofloat(Edit1.text); Zinssatz:=Strtofloat(edit3.text)/100; Laufzeit:=Strtoint(Edit2.text); {if Edit1.text <> '' then MessageDlg ('Die jährliche Rückzahlung reicht für eine '+ 'Abzahlung des Kredits nicht aus.', mtInformation,[mbOk],0) else begin } Stringgrid1.rowcount:=Laufzeit+1; for i:=1 to Laufzeit do with stringgrid1 do begin Cells[0,i]:=inttostr(i); Cells[1,i]:=floattostrf(Anfang,fffixed,10,2); Zinsen:=Anfang*Zinssatz; Cells[2,i]:=floattostrf(Zinsen,fffixed,10,2); Ende:=Anfang+Zinsen; Cells[3,i]:=floattostrf(ende,fffixed,10,2); Anfang:=Ende; end; end; end. var Value: double; begin result:=false; if (Eingabefeld.Text = '') then begin ShowMessage('Das Eingabefeld ist leer.'); exit; end; try Value:=StrtoFloat (Eingabefeld.Text); except ShowMessage('Die Eingabe konnte nicht in eine Zahl konvertiert werden.'); exit; end; if (Value<=0.0) then begin ShowMessage('Wert darf nicht negativ sein.'); exit; end; result:=true; Wert:=Value; end; ![]() ![]() [edit=SirThornberry]"HILFE!" aus Titel entfernt - Mfg, SirThornberry[/edit] |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |