AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Berechnungen mit Edit-Feldern - auf Ereignisse reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

Ein Thema von Emilio · begonnen am 27. Jan 2006 · letzter Beitrag vom 30. Jan 2006
Antwort Antwort
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#1

Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

  Alt 27. Jan 2006, 21:01
Hi Freunde,

ich glaub ich seh mal wieder den Wald vor Bäumen nicht oder aber es ist Zeit für den nächsten Lernschritt ...

ich habe auf nem Form mehrere DBEdit-Felder, Labels und (zunächst leere) Edit-Felder. Bezugnehmend auf die DB-Edit-Felder sollen in den Edit-Feldern Berechnungen durchgeführt werden; jedoch sind die Berechnungen auch unter den Edit-Feldern abhängig. Kurz gesagt: Bisher ist es so, dass ausgehend vom ersten Edit-Feld, in dem ein Eintrag vorgenommen wird (und anschließend in einer ComboBox ein Berechnungswert ausgewählt wird) in den restlichen Edit-Feldern berechnete Ergebnisse angezeigt werden - das funktioniert auch! Aber:
Was wenn der User einen Wert in einer der Edit-Felder unabhängig vom Wert des ersten Edit-Feldes eingeben will? (Das wäre zumindest wünschenswert)
Wenn z.B. der User den VK-Wert eines Artikels nicht mit dem vorgeschlagenen Wert (also des automatisch errechneten) sondern mit einem frei einzugebenden Wert versehen will, sollten sich die Ergebnisse in den anderen Feldern entsprechend ändern.

Hat jemand ne Idee wie ich das angehen kann?

Freue mich auf Eure Antworten

Emilio

Achso, anbei der bisherige Code

Delphi-Quellcode:
procedure TForm1.cxLookupComboBox1PropertiesCloseUp(Sender: TObject);

var a, c, d , e, f , g, h, i, j, k, l, m, n : Double;
    b : Integer;

begin
 a := StrToFloat(cxTextEdit1.Text);
 b := StrToInt(cxLookupComboBox1.Text);
 c := a+(a*b/100);
 d := (a/60*100);
 e := (d-a);
 f := (d-a)*100/d;
 g := (d-c)*StrToFloat(cxDBLabel13.Caption)/100;
 h := (d*116/100);
 i := StrToFloat(cxDBLabel5.Caption);
 j := ((c/i)-1)*100;
 k := StrToFloat(cxDBLabel9.Caption);
 l := ((d/k)-1)*100;
 m := StrToFloat(cxLabel28.Caption);
 n := ((h/m)-1)*100;
 cxLabel14.Caption := Format('EUR ' + '%8.2f', [a+(a*b/100)]);
 cxTextEdit5.Text := Format('EUR ' + '%8.2f', [d]);
 cxTextEdit2.Text := Format('EUR ' + '%8.2f', [e]);
 cxTextEdit3.Text := Format('%5.2f', [f]) + '%';
 cxTextEdit6.Text := Format('EUR ' + '%8.2f', [g]);
 cxTextEdit4.Text := Format('EUR ' + '%8.2f', [h]);
 cxLabel18.Caption := Format('%4.2f', [j]) + '%';
 cxLabel19.Caption := Format('%4.2f', [l]) + '%';
 cxLabel24.Caption := Format('%4.2f', [n]) + '%';
end;
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

  Alt 28. Jan 2006, 10:33
Hi,
am einfachsten in dem du für Abhängigkeiten eigenen Proceduren anlegst. Die sind immer OnChange-Ereignisse von einem Edit-Feld. Das heißt, wenn die MwSt sich direkt aus dem VK berechnet, dann gehört dass in eine eigene Prozedur. Klingt nach ein wenig Overhead, den kannst du aber sicherlich getrost ignorieren.
Jetzt musst du einfach nur entsprechende OnChangeEvents für jedes Feld einrichten. Ändert jmd. den Wert (deine Applikation oder der Benutzer), so werden alle von diesem Feld abhängigen Werte neu berechnet.
Dann kannst du dir ja noch zusätzlich merken, ob nach einem DB-Abruf ein Wert "per Hand" geändert wird. Diesen könntest du dann z.B. auch anders markieren.

Ja, hoffe dass es das war, was du auch wissen wolltest und ich nicht nur deine Frage falsch verstanden habe.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#3

Re: Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

  Alt 29. Jan 2006, 12:06
Danke für Deine Antwort.

Mit der OnChange-Methode ist ne prima Idee;
jedoch, gibt es eine Möglichkeit, wenn die Variablen global deklariert werden, deren zugehörige Berechnungsformel global ebenfalls global " zu hinterlegen"? - ich habs mal versucht, ernte aber immer nur Fehlermeldungen. Die Überlegung ist halt, nicht immer alle Variablen in jeder Prozedur neu zu deklarieren.

Vielleicht hab ich ja nur noch nicht die richtige Schreibweise gefunden; ich probiers weiter und falls jemand noch 'n Tipp hat, freue ich mich.

Viele Grüße

Emilio
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

  Alt 29. Jan 2006, 13:12
Hier noch ein paar Ratschläge, Emilio:
  • Verwende sprechende Namen für Variablen und Komponenten. Der von dir gezeigte Code eignet sich nichtmal zur Kündigungsschutzprogrammierung. b könnte ZuschlagProzent heißen.
  • Wenn du Rechenwerte aus der Datenbank brauchst, dann greife über die Datenfeld-Methoden AsFloat und AsInteger direkt auf diese Werte zu und nicht über rekonvertierte Werte aus der Anzeige der visuellen Komponenten.
  • Versuche immer Kalkulation und Visualisierung voneinander zu trennen. Schreibe dir eine Prozedur Recalc(BasisWert: Float; ZuschlagProzent: Integer; ...) mit passender Signatur, die du aus dem event handler deiner visuellen Komponenten rufen kannst.
  • Zuletzt solltest du deine Rechenvorschriften überprüfen. Oft ergeben sich Möglichkeiten zur Vereinfachung. Wenn bei dir a immer 60 Prozent von d ist, dann ist f immer 40 Prozent von d - warum noch groß rum rechnen?
Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Emilio

Registriert seit: 14. Dez 2003
65 Beiträge
 
#5

Re: Berechnungen mit Edit-Feldern - auf Ereignisse reagieren

  Alt 30. Jan 2006, 10:13
Hi Marabu,

Danke für Deine Tipps.

Zu Punkt 1: Zu dieser Überlegung bin ich inzwischen auch gekommen - wird mit zunehmender Zahl von Prozeduren unübersichtlich ...

Zu Punkt 2: Hm, hab ich nicht dran gedacht - ich mach mich mal schlau.

Zu Punkt 3: Rembrandt? - Das war eigentlich ein wesentlicher Teil meiner Frage. Ich erkenne auch die Notwendigkeit, die Trennung vorzunehmen, habe aber noch keine Idee wie man das sinnvollerweise löst. Ich meinen schlauen Delphi-Büchern finde ich dazu (noch)nichts.

Zu Punkt 4: Jaja, aber: die 40% sollen nur als "Vorschlag" dem User angeboten werden. Grundsätzlich sollte der User frei sein, welche Felder er mit welchen Werten ausfüllt. Das Wesentliche ist, dass die abhängigen Felder dann automatisch ausgefüllt werden sollen.

Zur Veranschaulichung: Die Daten aus dem DB-Query werden in Labels untereinander dargestellt ("1. Spalte"),
Daneben sind leere Edit-Felder, die teilweise von einander abhängig sind oder sein sollen ("2. Spalte"); daneben wiederum sind Labels in denen die Veränderungen in % von Edit-Feldinhalt zu DB-Label-Inhalt angezeigt werden sollen (" 3. Spalte") und obendrein soll es möglich sein über Eingaben in Felder der 3. Spalte zu kalkulieren (also. z.B. eine Preiserhöhung des Artikels um x% vornehmen).

OK, für ein Newbie in DELPHI nicht gerade ein Einstiegs-Projekt - habe aber keine andere Wahl.

Würde mich über tiefergehende Ausführungen bzw. Literaturhinweise in Newbie-Sprache sehr freuen.

Viele Grüße

Emilio
  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 03: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