Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Funktionszeichner verbessern (https://www.delphipraxis.net/59047-funktionszeichner-verbessern.html)

furby 16. Dez 2005 15:49


Funktionszeichner verbessern
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 :-D .
naja hier ist erstmal mein programm!
Thx schonma im vorraus

ichbins 16. Dez 2005 15:57

Re: Funktionszeichner verbessern
 
Erstmal: Tu doch bitte noch ne EXE ins Verzeichniss, heutzutage hat ja schon (fast :duck: ) 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 :thumb:

furby 16. Dez 2005 16:08

Re: Funktionszeichner verbessern
 
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 :-D

ichbins 16. Dez 2005 16:15

Re: Funktionszeichner verbessern
 
'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)

furby 16. Dez 2005 16:22

Re: Funktionszeichner verbessern
 
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... :mrgreen:

Der_Unwissende 16. Dez 2005 16:28

Re: Funktionszeichner verbessern
 
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 :wink:
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)

furby 17. Dez 2005 09:04

Re: Funktionszeichner verbessern
 
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! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:35 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