AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Funktionszeichner verbessern
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionszeichner verbessern

Ein Thema von furby · begonnen am 16. Dez 2005 · letzter Beitrag vom 17. Dez 2005
Antwort Antwort
Benutzerbild von furby
furby
Registriert seit: 15. Sep 2005
HiHo.
Ich bin noch ziemlicher anfänger und hab gerade mein erstes etwas kleineres sinvolleres Programm geschrieben.
Es zeichnet so die standardgraphen in ein koordinatensystem und kann auch schon verschiebungen und streckungen.
Ich möchte eigentlich hier keine Kritik oder so, weil das Prog eh noch sehr schlecht ist und es hier fast jeder besser könnte.
Aber es wär net, wenn ihr mir ein paar verbesserungsvorschläge für den code machen könntet. oder wie man z.B. einiges besser lösen kann. vielleicht hat ja jemand schonmal sowas ähnliches programmiert. Wenn ihr Verbesserungsvorschläge habt, die das Programm erweitern könnten, dann gebt mir vielleicht auch bitte lösungsansätze oder sowas, weil ich daraus ja lernen will .
naja hier ist erstmal mein programm!
Thx schonma im vorraus
Angehängte Dateien
Dateityp: rar funcdraw2_963.rar (192,3 KB, 76x aufgerufen)
 
ichbins

 
Delphi 2005 Personal
 
#2
  Alt 16. Dez 2005, 16:57
Erstmal: Tu doch bitte noch ne EXE ins Verzeichniss, heutzutage hat ja schon (fast ) jeder DSL und die Zeit fürs Compilieren übersteigt weiiiit die Zeit fürs compilieren.

Dann:
  • Nicht jeder hat seine Bildschirm auf 2400x1800 Pixel Auflösung eingestellt. Bei mir passt das Form leider nicht vollständig auf den Bildschirm.
  • Wenn ich auf das DATEI-Menü klicke, passiert nix
  • Wenn ich auf Taschenrechner klicke, auch nicht

sonst isses gut
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von furby
furby

 
Turbo Delphi für Win32
 
#3
  Alt 16. Dez 2005, 17:08
so hab ich mal kleiner gemacht. Ja das mit den Menusachen wollt ich noch löschen, hab ich aber komplett vergessen. Die Inhalte davon waren mir ersteinmal nicht so wichtig
Fabian K
  Mit Zitat antworten Zitat
ichbins

 
Delphi 2005 Personal
 
#4
  Alt 16. Dez 2005, 17:15
'n paar weitere Vorschläge:
  • Datei\Beenden: einfach form1.close aufrufen.
  • Datei\Graph als Bitmap speichern
  • Für Farbauswahl einen tcolordialog verwenden
  • Matheparser als zusätzliche Graphenmöglichkeit (User gibt ein 'x^(2x*0.7-2)+12345' -> Graph wird dazu gezeichnet)
Michael Enßlin
  Mit Zitat antworten Zitat
Benutzerbild von furby
furby

 
Turbo Delphi für Win32
 
#5
  Alt 16. Dez 2005, 17:22
ja ich könnte ja nen fertigen matheparser einbauen. Aber dann wär das ja nicht von mir und das bringt mir ja nich soo viel. Und selber bekomm ich sowas glaub ich noch nicht hin. Kommt aber noch...
Fabian K
  Mit Zitat antworten Zitat
Der_Unwissende
 
#6
  Alt 16. Dez 2005, 17:28
Hi,
also erstmal pack bitte keine .exe mit in das File, ich habe nur einen ISDN Kanal und glaube da bin ich noch mit > 70% der Deutschen (also kein DSL) konform.

Ich hab ordentlich Kritik zu äussern
Fangen wir mal mit der positiven an:
Für ein erstes Programm nicht schlecht. Bei mir klappt auch alles mit der Einstellung der Fenstergröße.
Dein Programm funktioniert an sich sehr ordentlich, gut selbsterklärend. Der Code-Aufbau ist auch recht sauber, man erkennt auf jeden Fall mal deinen eigenen Stil, aber halt auch schön eingerückt, gut erklärt und so weiter.

Ja, dann aber auch gleich mal zu dem "negativen", nichts wirklich Wildes! Als erstes mal, du hast ein wenig wenig kommentiert. Ist hier natürlich noch nicht so wild, aber gute Programme erkennt man schon an den Kommentaren.

Leider gibt es im Menü Einträge ohne Funktion, aber ich denke die wolltest du einfach noch nachreichen?

Was ich wirklich schlimm finde ist, dass du über kreuz kompilierst. Ich weiß, kann man in Delphi mittels Interface und Implementation machen, ist aber echt nicht schön. Einfachster Fall, du tauscht dein Fenster für die Einstellung der zu zeichnenden Funktion aus, schon hast du ein Problem.
Besser ist es immer, wenn du so etwas anders löst. Am besten lässt man jede Unit immer nur das sehen, was sie kennen muss. Für dein Programm braucht das Fenster mit den Einstellungen doch eigentlich nicht wissen für wen diese Einstellungen wichtig sind. Es kann sie jedoch leicht (z.B. als public Klassenvariablen, properties etc) nach aussen zur Verfügung stellen. Da dein Hauptprogramm dieses einstellungs Fenster kennt, kann es dort dann die Wert abfragen (lässt du ja eh modal anzeigen).
Natürlich kannst du es auch anders lösen. Ein weiterer Ansatz wäre es, einen Funktionszeiger zu speichern und diese Funktion immer aufzurufen, wenn etwas geändert wurde. Die entsprechende Funktion würde dann zu deiner Hauptform gehören.
Etwas mehr OOP wäre es dann, ein Interface zu deklarieren (oder eine abstrakte Klasse) und dort dann eine solche Methode zu haben, dann müsste dein Hauptprogramm dieses Interface implementieren bzw. die abstrakte Klasse ableiten.

Ansonsten solltest du bei den if-Abfragen immer ein begin und end setzen, auch wenn nur die nächste Zeile zur Bedingung gehören soll. Das ist einfach guter Codestil, auch wenn er häufig als überflüssig bezeichnet wird, du vermeidest unnötige Fehler.
Wenn du mehrere Dinge prüfst, die disjunkt sind
Delphi-Quellcode:
if Funktion = 1 then
  y := LineareFunktion(strtoFloat(formneu.editM.text),
         strtofloat(formneu.editQ.text), x);
if Funktion = 2 then
  y := quadratischeFunktion(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
if Funktion = 3 then
  y := PotenzFunktion3Ordnung(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
dann solltest du ein else oder eine case-Anweisung verwenden. Da die Funktion nur einen Wert annehmen kann, wird nichts unnötig überprüft (auch wenn Compiler da eh optimieren).
Delphi-Quellcode:
if Funktion = 1 then
  begin
    y := LineareFunktion(strtoFloat(formneu.editM.text),
         strtofloat(formneu.editQ.text), x);
  end
else if Funktion = 2 then
  begin
    y := quadratischeFunktion(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
  end;
else if Funktion = 3 then
  begin
    y := PotenzFunktion3Ordnung(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
  end;
oder

Delphi-Quellcode:
case Funktion of
1 : y := LineareFunktion(strtoFloat(formneu.editM.text),
          strtofloat(formneu.editQ.text), x);
2: y := quadratischeFunktion(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
3: y := PotenzFunktion3Ordnung(strtofloat(formneu.editM.text),
         strtofloat(formneu.editP.text),
         strtofloat(formneu.editQ.text),
         x);
Statt StrToFloat solltest du auch lieber ein StrToFloatDef benutzen. Würde man im Moment einen Buchstaben eingeben, kommt es zu einem Fehler, den kannst du so vermeinden (mehr verrät die OH).

Das wär's auch erstmal. Ist keine böse Kritik, ich finde es ist insgesamt ein sehr sehr gutes Programm! Die Kritik ist wirklich konstruktiv gemeint. Mein erstes Größeres hatte gar nichts an Struktur oder Ähnlichem, die Dinge die ich hier genannt habe sind echt Kleinigkeiten. Das Wichtigste ist immer, das ein Programm funktioniert und das ist definitiv bei dir erfüllt.

Ein paar Dinge, die du planen könntest :
- Zoom und bewegen mit der Maus
- Festlegen einer Area of Interest
- Eigene Funktionen
- Export des geplotteten Graphen als BMP und/oder JPEG

(nicht alles trivial und nur weitere Anregungen zu denen die du eh schon hast!)

Nur weiter so,
Gruß Der Unwissende

PS Ein teil durch rote Kästen doppelt, aber die ignorier ich jetzt (zu faul)
  Mit Zitat antworten Zitat
Benutzerbild von furby
furby

 
Turbo Delphi für Win32
 
#7
  Alt 17. Dez 2005, 10:04
danke. deine beitrag hat mir schon echt sehr geholfen. ich werd mal in den nächsten Tagen versuchen das umzusetzen, was du mir vorgeschlagen hast!
Fabian K
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es 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

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz