Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Re: Rechnen im EDIT Feld
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   30.09.19 18:33

Such mal hier im Forum nach Formel Rechner.

Dann haste hier sowas (in dein Programm integriert) :

 $P+
  SET("ERRORLEVEL",0)
  SET("Decimals", 2)
  $I PROFALT.INC
  declare ma_s1$,ma_s2$,ma_s3$,ma_s4$,ma_v1&,ma_v2&,ma_v3&,ma_v4& 'bei häufiger Benutztung Global setzen (Ergebnis immer in ma_v1& !)
  DECLARE EDIT1&,BUTTON1&,TEXT1&,TEXT2&, ENDE%,A$[],e1$,Erg!,m$
  DEF GETSYSCOLOR(1) !"USER32","GetSysColor"
  'Benötigte Funktionen: 3 mächtige Zeilen, sie machen einen Großteil der Arbeit !
  DEF CTStr(2) if(len($(2))=0,0,(len($(1))-len(translate$($(1),$(2),"")))/len($(2))) 'zählt wie oft $2 in $1 vorkommt
  DEF InStrExt(3) int(instr($(2),mid$($(1),&(3),len($(1))))+&(3)) 'sucht in $1 ab &3 nach $2
  DEF InStrLast(3) if(instrext($(1),$(2),&(3))>&(3),instrlast($(1),$(2),instrext($(1),$(2),&(3))),int(&(3)-1)) 'sucht in $1 ab &3 nach dem letzen vorkommen von $2, arbeitet Rekursiv.
  
  'Wenn man die Operatorzeichen ändern möchte braucht man nur die entsprechenden Zeichen ändern in den 2 folgenden Funktionen ändern
  DEF MathTabs(2) translate$(translate$(translate$(translate$($(1),"+",$(2)),"-",$(2)),"*",$(2)),"/",$(2))
  DEF GetMath(1) if($(1)="+",1,if($(1)="-",2,if($(1)="*",3,if($(1)="/",4,0))))
 
  WINDOWSTYLE 63
  WINDOWTITLE "Test"
  WINDOW 481,158-640,500
  CLS GETSYSCOLOR(15)
  USEFONT "MS Sans Serif",13,0,0,0,0
  SETDIALOGFONT 1
  
  
  EDIT1& = CREATE("EDIT",%HWND,"1.25",80,45,240,20)
  BUTTON1& = CREATE("BUTTON",%HWND,"BUTTON",230,90,70,20)
  TEXT1& = CREATE("TEXT",%HWND,"Ergebnis :",84,110,100,20)
  TEXT2& = CREATE("TEXT", %HWND, "", 185, 110, 70, 20)
  SETFOCUS(EDIT1&)
  
  WHILENOT ENDE%
  WAITINPUT
     If %KEY=2
       ENDE%= 1
     ELSEIF %KEY=4
     ELSEIF CLICKED(EDIT1&) 'EDIT
     ELSEIF CLICKED(BUTTON1&) 'BUTTON
       Erg! = Math(GetText$(EDIT1&))
       SETTEXT TEXT2&, Str$(Erg!)
      SETFOCUS(EDIT1&)
     ENDIF
  ENDWHILE
 
 'Das Kernstück, so klein und doch ein ganzer Taschenrechner
  'Funktioniert nur alleine wenn die Variablen aus Math Global gesetzt wurden (Ergebnis immer in ma_v1& !)
  proc mathcore
  	parameters ma_cmd$
  	ma_s2$="«Æ»"							'MathTabs-Zeichen = Beliebige Zeichenfolge die nicht im Ausdruck vorkommen sollte, sonst falsche Berechnung !
  	ma_s4$=mathtabs(ma_cmd$,ma_s2$)  'MathTabs setzen
  	ma_s3$=""
  	ma_v1&=0
  	ma_v2&=1
  	whileloop ctstr(ma_s4$,ma_s2$)+1
  		ma_s3$=substr$(ma_s4$,&loop,ma_s2$)	'Wert erfassen - Hier könnte man den Ausdruck zB. auf einen bestimmten Namen prüfen (für Variablen in Skriptsprachen).
  		ma_v1&=if(ma_v2&=0,ma_v1&,if(ma_v2&=1,ma_v1&+val(ma_s3$),if(ma_v2&=2,ma_v1&-val(ma_s3$),if(ma_v2&=3,ma_v1&*val(ma_s3$),if(val(ma_s3$)<1,ma_v3&,ma_v1&/val(ma_s3$))))))
  		ma_v2&=GetMath(mid$(ma_cmd$,len(ma_s3$)+1,1))
  		ma_cmd$=del$(ma_cmd$,1,len(ma_s3$)+1)
  	wend
  endproc
  
  'Berechnung mit Klammern
  'Haupt-Prozedur die automatisch erst alle Klammern ausrechnet (wenn welche vorkommen)
  proc math
  	parameters ma_prio$
  	'declare ma_s1$,ma_s2$,ma_s3$,ma_s4$,ma_v1&,ma_v2&,ma_v3&,ma_v4& 'bei häufiger Benutztung Global setzen (Ergebnis immer in ma_v1& !)
  	case or(instr(")",ma_prio$)<instr("(",ma_prio$),neq(ctstr(ma_prio$,"("),ctstr(ma_prio$,")"))):ma_prio$="0" 'ungültige Klammersetzung: Wert auf Null setzen
  	whilenot ctstr(ma_prio$,"(")=0
  		ma_v3&=instr("(",ma_prio$)+1
  		ma_v4&=instrext(ma_prio$,")",ma_v3&)-1
  		ma_v3&=ma_v3&+instrlast(mid$(ma_prio$,ma_v3&,ma_v4&-ma_v3&),"(",1) 'Klammern von Innen nach Außen auflösen
  		mathcore mid$(ma_prio$,ma_v3&,ma_v4&-ma_v3&)
  		ma_prio$=del$(ma_prio$,ma_v3&-1,ma_v4&-ma_v3&+2)
  		ma_prio$=ins$(str$(ma_v1&),ma_prio$,ma_v3&-1)
  	wend
  	mathcore ma_prio$
  	return ma_v1&
  endproc
  


Ist es das, was du meinst ?

H.Brill
XProfan X4 + FreeProfan

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Rechnen im EDIT Feld  Neu
Steven Scheidler 30.09.19 11:29 
 Re: Rechnen im EDIT Feld  Neu
Heinz Brill 30.09.19 18:33 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org