Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Den String '+' als Operator verwenden? (https://www.delphipraxis.net/27372-den-string-als-operator-verwenden.html)

DiscMix 9. Aug 2004 08:43


Den String '+' als Operator verwenden?
 
Hallo,

ich hoffe hier bin ich richtig ;)

Ich habe zwei Editfelder, Ein Dropdownfeld mit den Strings +,-,*,/ und ein OK-Button.
Nun werden die beiden Editfelder mit Werten gefüllt, und der Operator ausgewählt.
Bei drücken auf den OK-Button soll das Ergebnis berechnet werden.

Wie kann ich den Operator als String "umwandeln", damit die Rechnung auch hinhaut ???

Danke
Marco

ibp 9. Aug 2004 08:46

Re: Den String '+' als Operator verwenden?
 
frag doch ab welcher operator aus der drop down liste gewählt wurde und dann berechne dementsprechend das ergebnis. du brauchst die operatoren nicht umzuwandeln!

fkerber 9. Aug 2004 08:49

Re: Den String '+' als Operator verwenden?
 
HI!

Ich würde es so machen:

Delphi-Quellcode:
//Reihenfolge in der Combobox: +,-,*,/

case Combobox1.Itemindex of
 0: edit3.text:=inttostr(strtoint(edit1.text) + strtoint(edit2.text));
 1: edit3.text:=inttostr(strtoint(edit1.text) - strtoint(edit2.text));
 2: edit3.text:=inttostr(strtoint(edit1.text) * strtoint(edit2.text));
 3: edit3.text:=inttostr(strtoint(edit1.text) div strtoint(edit2.text));
end;
Ciao fkerber

Matze 9. Aug 2004 08:58

Re: Den String '+' als Operator verwenden?
 
Anstatt div würde ich / nehmen und den Typ Real. ;)

fkerber 9. Aug 2004 09:03

Re: Den String '+' als Operator verwenden?
 
Hi!

@Matze:
Das wäre wohl sinnvoller, da gebe ich dir recht, aber dann wär das mit Copy und Paste nicht so schön gegangen :mrgreen:

Ciao Frederic

DiscMix 9. Aug 2004 09:28

Re: Den String '+' als Operator verwenden?
 
Danke, Danke für das schnelle Feedback...

Eigentlich wollte ich die Case-Möglichkeit vermeiden, da später weitere Optionen im DropdownFeld stehen werden...
Gibt es noch eine andere Möglichkeit?

Gruss
Marco

ibp 9. Aug 2004 09:41

Re: Den String '+' als Operator verwenden?
 
... und wo ist dann das problem die weiteren optionen mit case abzufragen?

xineohp 9. Aug 2004 09:50

Re: Den String '+' als Operator verwenden?
 
es ist mühsam ... schätz ich mal :stupid:

Die Muhkuh 9. Aug 2004 10:02

Re: Den String '+' als Operator verwenden?
 
Du könntest es mit If-Abfragen machen:

Delphi-Quellcode:
if Combobox1.ItemIndex = 0 then
  //machwas
else
if Combobox1.ItemIndex = 1 then
// machwas
...
Aber mit Case gehts am besten^^.

DiscMix 9. Aug 2004 10:08

Re: Den String '+' als Operator verwenden?
 
ich sach mal so: Jetzt gibt es 80 Editfelder und 40 Dropdownfelder und eigentlich wolte ich die Werte und den Operator an eine Funktion übergeben, weil noch ein paar weitere Bedingungen vor der und nach der Berechnung abgeprüft werden.

Jetzt wirds langsam lustig ;)

ibp 9. Aug 2004 10:13

Re: Den String '+' als Operator verwenden?
 
dann handel alle felder nacheinander ab nachdem du den ok-button gedrückt hast und schick wert1, wert2 und operator zur funktion in der die caseabfrage steht und übergebe den berechneten wert zurück!

gruß rené

xineohp 9. Aug 2004 10:17

Re: Den String '+' als Operator verwenden?
 
du könntest auch einfach einen Parser verwenden, der dir einen Term ausrechnet, den du ihm als String übergibst... einfach mal suchen ... zur Not kannste auch meinen haben (müsste ihn nur mal suchen :roll: ).

Rackergen2 9. Aug 2004 10:26

Re: Den String '+' als Operator verwenden?
 
an dem Parser wäre ich auch interessiert... bitte Mail oder PN an mich ;)

xineohp 9. Aug 2004 10:40

Re: Den String '+' als Operator verwenden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
moin,

der Parser ist eine Arbeit für den Info Unterricht gewesen und ist nicht 100% ausgereift.
Die Fehler Erkennung/Behandlung bei unsinnigen Eingaben ist schlicht unvollständig.
Zudem sind die Richtlinien der OOP nicht strikt eingehalten, zum einen, damit im Demoprojekt der Baum visuel angezeigt werden kann zum anderen, weils so einfacher war :roll:


EDIT: interessant ist auch der Parser von dizzy: klick!

dizzy 9. Aug 2004 12:05

Re: Den String '+' als Operator verwenden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von xineohp
EDIT: interessant ist auch der Parser von dizzy:

...und den gibt es jetzt in noch ausgereifter :)
(Einziges Manko: Die Formel darf nicht länger als 255 Zeichen werden (ShortString), und negative Werte müssen in Klammern gefasst werden. 1-2 geht, 1*-2 muss 1*(-2) sein!)

Anbei die DLL-Version mit Wrapperunit, und auch die komplette .pas-Version.

DiscMix 17. Aug 2004 08:56

Re: Den String '+' als Operator verwenden?
 
Ich muss hier nochmal nachfragen:

Ich habe 20 Editfelder auf einer Form (untereinander). Ab Feld 2 stehen neben den Feldern
19 DropDownFelder mit den Werten +,-,*,/ (Wers genau wissen will: Ist ein Kalkulationsmodul)
Nun wird nach Eingabe in einem Editfeld von Editfeld 1 bis Editfeld 20 durchgerechnet; mit
den Operatoren in den DropDownFeldern. Wird eine neuer Werte in den Editfeldern eingetragen,
wird wieder durchgerechnet. Wird ein Werte in den DropDownFeldern geändert, wird wieder
von Edit 1 bis Edit 20 mit den entsprechenden Operatoren in den DropDownFelder durchgerechnet.

Mit case-Abfragen wird das ganze sehr unübersichtlich...
Gibt es eine (Denkanstoss) Möglichkeit/ Funktion / Methode das einfacher zu berechnen?

Danke fürs Feedback ;)

fkerber 17. Aug 2004 09:18

Re: Den String '+' als Operator verwenden?
 
Hi!

Eigentlich ist es doch nur eine einzige Case-Abfrage.
Du schreibst dir eine Funktion, die immer den bisherigen Wert der Rechnung, den Wert des nächsten Edit-Feldes und den "Wert" der Combobox erhält. Dann ermittelst du mit Case, was du tun musst und verarbeitest dementsprechend bisherigen Wert und den neuen.

Ciao Frederic


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