Das Thema ist ja ein richtiger Dauerbrenner -
Zitat von
Emilio:
Der ekneu kann z.B. über 3 Wege zustande kommen:
- User-Eintrag im ekneu Edit-Feld
- User-Eintrag im lvpneu-Feld und MargeE- oder Marge%-Feld (Berechnung)
- User-Eintrag im bruttolvpneu-Feld und MargeE- oder Marge%-Feld (Berechnung)
der lvp kann z.B. über 5 Wege zustande kommen:
- User-Eintrag im lvpneu Edit-Feld
- User-Eintrag im ekneu-Feld + Auswahl des zuschlag aus der Combobox (Auto-Vorschlag wie in CalcRule01)
- User-Eintrag im bruttolvp-Feld (Berechnung)
- User-Eintrag im ekneu-Feld und MargeE- oder Marge%-Feld (Berechnung)
- User-Eintrag im bruttolvpneu-Feld und MargeE- oder Marge%-Feld (Berechnung)
Die 7 Werte, welche die Änderungen neu gegen Alt ausdrücken (ekaender, xyaender, etc.) werden eigentlich immer dann benötigt, wenn zum passenden Alt-Wert ein neu-Wert eingegeben oder errechnet und angezeigt wird.
Mit den genannten Wegen decke ich jedoch nur die "primär"-Eingabe ab; Nicht erfasst sind Änderungen, die der User nach der Primär-Eingabe vornehmen möchte (z.B. den bruttolvpneu runden/glätten, die Marge prozentual anpassen, etc.).
Das hieße, nach der Ergänzung des Codes für die primär-Eingaben noch 7 onChange-Events mit unterschiedlichen "Calcrules" bauen - oder nicht? Irgendwie werde ich das Gefühl nicht los, dass ich das bisherige Konstrukt zerfleddern muß, um den User-Wünschen gerecht zu werden. Ich grübel weiter.
Jetzt sieht die Sache schon recht übersichtlich aus !
@Emilio: Stell Dir nun vor, Du müsstest das Ganze nur in 7 Formeln kleiden, die alle anderen Variablen berechnen.
Falls Du auch der Meinung bist, dass das simpel ist,
dann schau doch endlich meine Komponenten an !
Das sind quasi Variablen, die Dir den ganzen restlichen Schnickschnack abnehmen.
Nenne diese zB. EKNeu und verwende sie als EKNeu.Value.
Kurzbeschreibung aus den Units herauskopiert:
Delphi-Quellcode:
{ Unit MyEditPrim erweitert das etwas dümmliche TLabeledEdit um Eigenschaften und Ereignisse,
die in der Praxis des Programmierens IMHO notwendig sind.
TEditPrim ist Vorfahre für weitere, spezialisiertere EditKomponenten (siehe Unit MyEdit)
Erweiterungen:
property Alignment Ausrichtung des Textes taLeftJustify, taCenter, taRightJustify
property RedValues Negative Werte werden rot dargestellt
property ReturnIsTab Eingabetaste ist wie Tab
property OnChange Änderung des Verhaltens. Wird nur durch Enter, Tab oder Verlassen des
Edits ausgelöst, nicht mehr bei jeder Zeichneingabe,
und auch dann nur, falls der Wert geändert wurde.
Validierung der Eingabe möglich.
property OnIniData Wird Aufgerufen um Variablen mit Value belegen zu können.
property OnDrwData Wird vor dem Zeichnen aufgerufen und erlaubt Änderungen von Farbe und Font
Taste ESC stellt den ursprünglichen Wert des Feldes wieder her.
}
{ unit MyEdit leitet vom erweiterten TEditPrim, die spezialisierten Editfelder
TEditString, TEditInteger, TEditFloat, TEditCurr, TEditProz und TEditDate ab.
Basisverhalten siehe: Unit MyEditPrim.
Jedes diese Editfelder hat die zusätzliche Eigenschaft 'Value',
die dem DatenTyp entspricht.
Nachkommastellen bei den entsprechend Datentypen sind einstellbar.
Vorgabe bei Float und Currency: 2, bei Prozent: 0
Zuweisungen zur Eigenschaft Value lösen das Ereignis OnChange NICHT aus.
Zuweisungen zur Eigenschaft Text lösen das Ereignis OnChange nach wie vor aus.
Zusätzliche Eigenschaft NullValues - wie Excel Nullwerte anzeigen, Vorgabe false.
Zusätzliches Ereignis OnInitData ermöglicht das initialisieren von Variablen.
Validierung kann im Ereignis OnChange durchgeführt werden.
TEditPrim wurde in separate Unit extrahiert, um die Übersichtlichkeit zu erhöhen.
Die Erweiterung um weitere Datentypen ist in Unit MyEdit sehr einfach.
}
Edit: Die Komponenten gibts hier:
EditKomponenten für die Praxis
Mit freundlichen Grüssen, Otto.