Einzelnen Beitrag anzeigen

otto06
(Gast)

n/a Beiträge
 
#1

Diagramm aus Stringgrid Tabelle zeichnen.

  Alt 23. Feb 2009, 14:43
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]
  Mit Zitat antworten Zitat