![]() |
Diagramm aus Stringgrid Tabelle zeichnen.
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:
:?: :lol: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] |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Hi!
Herzlich Willkommen in der DP! Was ist jetzt deine konkrete Frage? (Irgendwie konnte ich das aus dem Thread nicht herauslesen) Was die Sache mit den ungültigen Eingaben angeht, solltest du über die Suche einiges finden (solltest du dazu dann noch Fragen haben, mache bitte einen neuen Thread auf, damit es hier nicht durcheinander geht). Ciao, Frederic |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Also das Problem ist:
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). Das Digramm soll die Entwicklung der Restschuld und Zinsumme in einem Diagramm darstellen können. 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 um es weiter zu verbessern. Vielen Dank. :-D Ich weiß sehr umfangreich aber vielleicht hat jemand eine Idee dazu. Nochmals Danke. |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Hi!
Also du willst quasi von Hand eine Chart-Komponente realisieren? Gibt es einen Grund, warum du keine fertige verwendest? (z.B. TChart gibt es, aber du findest sicher noch ein paar mehr, falls es für dich in Frage kommt) Ciao, Frederic |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Das klingt mir doch sehr nach Hausaufgabe mit entsprechender Vorgabe.
|
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Die aufgabe habe ich mir selber gesetzt, weil ich eigentlich Delphi und das Programmieren lernen und verstehen will.
Achso noch was: Es soll schon in einer Timage-Komponente realisiert werden. |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Hi!
Warum möchtest du an der TImage-Komponente festhalten? Die ist für sowas an sich nicht gedacht, sondern dient (wie der Name sagt) zum Anzeigen eines Bildes. Wenn schon selber zeichnen, wäre eine TPaintBox sicher angebrachter... Ciao, Frederic |
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Zitat:
|
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
|
Re: Diagramm aus Stringgrid Tabelle zeichnen. HILFE!
Zitat:
Zitat:
btw: ![]() (Edit: Wow, der rote Kasten ist wohl noch im Wochenende...) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz