Hallo zusammen,
ich bin gerade dabei einen Funktionsgenerator zu entwerfen. Dabei kann ich mich leider nicht wirklich entscheiden, wie ich ihn am elegantesten aufbaue. Es soll später mal ein solides Produkt werden und vllt auch hier und da mal um Funktionen erweitert werden. Von daher muss die Struktur von Anfang an klar sein.
Ich habe mein jetziges grobes Design mal unten angehängt. Es entspricht der Designvariante mit einem PageControl.
Ganz grob die Funktionen:
Es soll verschiedene Modi (Wellenformen) geben, wie z.B. Sinus, Rauschen, Sweep, usw. Je nach gewählter Wellenform sollen natürlich unterschiedliche Regler angezeigt werden, wie z.B. Amplitude, Frequenz und Offset für Sinus. Start- und Endfrequenz für Sweep, usw. Ebenso soll sich auch das "Display" und die Anzeigen darin verändern.
Man kann die Parameter sowohl im Display (sind Editfelder), wie auch über die Regler unter dem Display ändern. Wenn ich im Display also z.B. 1000 Hz einstelle soll der Regler auch auf 1000 Hz rutschen.
Designvarianten, die mir bisher in den Kopf gekommen sind:
Mit Hilfe von PageControl/Tabs
Beim der Wahl eines Modi wird ein bestimmtes Tab unter dem Display aktiviert. Die Reiter des PageCOntrol werden mit Hilfe von "TabVisible := false" ausgeblendet. Das gleiche könnte ich nun auch mit dem Display machen.
Vorteil: Ich kann alles im Design-Editor entwickeln.
Nachteil: Es könnte irgendwann eventuell etwas unübersichtlich werden
Mit Hilfe von vielen Frames
Ich erstelle für jeden Modi jeweils ein Frame für die Anzeige und für die Einstellungen und lade diese beim Aufruf des Modi.
Vorteil: Es wird alles etwas besser getrennt und vllt übersichtlicher?
Nachteil: Ich habe für einen Dialog im Programm sehr viele Frames, was das Gesamtprojekt sehr aufbläht.
Alle Elemente dynamisch erzeugen
Ich lasse den Design-Editor links liegen und erzeuge alles dynamisch mit Quellcode. Hier könnte ich natürlich auch alles in eine
Unit packen oder in viele verschiedene.
Vorteil: Alles ist ordentlich angeordnet
Nachteil: unübersichtlicher Programmcode
Wahrscheinlich gibt es auch noch ein paar weitere Methoden, an welche ich im Moment nicht denke.
Mich würde nun einfach interessieren, wie ihr ein solches Programm entwickeln würdet. Wieviele Units würdet ihr verwenden? Wie würdet ihr das Design umsetzen?
Es kann halt gut sein, dass noch der ein oder andere Modi dazukommt. Hier muss ich also flexibel bleiben.
Vielen Dank schonmal!
Headbucket