Seite 4 von 4

Verfasst: 15.04.2008 15:43
von The_Dark_Zim-.-
Hab noch ein wenig rum probiert und so ^^
Bin nu soweit das er die Taste abfragt :D
Allerdings nimmt er das "Gleich" nicht an ?!?!?!?!
Hier der Code

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #Button_5
  #Button_6
  #Button_7
  #Button_8
  #Button_9
  #Button_10
  #Button_11
  #Button_12
  #Button_13
  #Button_14
  #Button_15
  #Button_16
  #Button_17
  #ButtonZahl_0
  #ButtonZahl_1
  #ButtonZahl_2
  #ButtonZahl_3
  #ButtonZahl_4
  #ButtonZahl_5
  #ButtonZahl_6
  #ButtonZahl_7
  #ButtonZahl_8
  #ButtonZahl_9
EndEnumeration

Global FontID1
FontID1 = LoadFont(1, "Arial", 10, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 14)
Global FontID3
FontID3 = LoadFont(3, "Arial", 22)

InitKeyboard() And InitSprite()

  If OpenWindow(#Window_0, 511, 245, 518, 548, "Rechner",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
     AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
   If OpenWindowedScreen(WindowID(0), 511, 245, 518, 548, 0, 0, 0)
    If CreateGadgetList(WindowID(#Window_0))
      SetGadgetFont(-1, FontID2)
      
      StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
      ButtonGadget(#Button_0, 20, 140, 60, 60, "CE")
      ButtonGadget(#Button_1, 100, 140, 60, 60, "/")
      ButtonGadget(#Button_2, 180, 140, 60, 60, "X")
      ButtonGadget(#ButtonZahl_7, 20, 220, 60, 60, "7")
      ButtonGadget(#ButtonZahl_8, 100, 220, 60, 60, "8")
      ButtonGadget(#ButtonZahl_9, 180, 220, 60, 60, "9")
      ButtonGadget(#ButtonZahl_4, 20, 300, 60, 60, "4")
      ButtonGadget(#ButtonZahl_5, 100, 300, 60, 60, "5")
      ButtonGadget(#ButtonZahl_6, 180, 300, 60, 60, "6")
      ButtonGadget(#Button_9, 260, 140, 60, 60, "-")
      ButtonGadget(#Button_10, 260, 220, 60, 140, "+")
      ButtonGadget(#Button_11, 260, 380, 60, 140, "OK")
      ButtonGadget(#ButtonZahl_3, 180, 380, 60, 60, "3")
      ButtonGadget(#ButtonZahl_2, 100, 380, 60, 60, "2")
      ButtonGadget(#ButtonZahl_1, 20, 380, 60, 60, "1")
      ButtonGadget(#ButtonZahl_0, 20, 460, 140, 60, "0")
      ButtonGadget(#Button_16, 180, 460, 60, 60, ",")
      ButtonGadget(#Button_17, 390, 460, 110, 60, "EXIT")
    EndIf
   EndIf
  EndIf
 
Repeat

  Event = WaitWindowEvent()
 
  WindowID = EventWindow()
 
  GadgetID = EventGadget()
 
  EventType = EventType()
  
  MenuID = EventMenu()
   
ExamineKeyboard()

If KeyboardPushed (1)
  End
EndIf 


 Select Event
        Case #PB_Event_Menu
          If EventMenu() = 0 ;Return

    SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
    g.f=ValF(GetGadgetText(#string_0))
 
 v=1 
 
         EndIf
      EndSelect



    If Event = #PB_Event_Gadget
    If GadgetID = #String_0

ElseIf GadgetID = #Button_0 ;CE 

      StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
 
;_________________________________________________________________________________________________________________________

ElseIf GadgetID => #ButtonZahl_0 And GadgetID <= #ButtonZahl_9  ;0-9
   
     If v=1
     
      StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
     
      v=0
   
     EndIf   
   
   
   StringGadget(#String_0, 20, 40, 480, 30, GetGadgetText(#string_0)+Str(GadgetID-#ButtonZahl_0), #PB_String_ReadOnly) 
 
;_________________________________________________________________________________________________________________________

ElseIf GadgetID = #Button_16 Or KeyboardPushed(#PB_Key_PadComma) ;,

   x.f=ValF(GetGadgetText(#string_0))
   
     StringGadget(#String_0, 20, 40, 480, 30, Str(x)+".", #PB_String_ReadOnly)
   
ElseIf GadgetID = #Button_17

    End
   
ElseIf GadgetID = #Button_1  ;/ 

v=0

     a.f=1
     b.f=0
     c.f=0
     d.f=0
     
     SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
     f.f=ValF(GetGadgetText(#string_0))
   
     StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
 
ElseIf GadgetID = #Button_2 ;x

v=0

     a.f=0
     b.f=1
     c.f=0
     d.f=0
   
     SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
     f.f=ValF(GetGadgetText(#string_0))
   
     StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
     
ElseIf GadgetID = #Button_9 ;-

v=0
   
     a.f=0
     b.f=0
     c.f=1
     d.f=0
   
     SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
     f.f=ValF(GetGadgetText(#string_0))
   
     StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
   
ElseIf GadgetID = #Button_10 ;+

v=0
   
     a.f=0
     b.f=0
     c.f=0
     d.f=1
   
     SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
     f.f=ValF(GetGadgetText(#string_0))
   
     StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
   
ElseIf GadgetID = #Button_11 ;ok
   
    SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
    g.f=ValF(GetGadgetText(#string_0))
 
 v=1 

;_________________________________________________________________________________________________________________________

   If c=1
   
    e.f=f.f-g.f
    StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2), #PB_String_ReadOnly)
   
   EndIf
   
   If a=1
   
    e.f=f.f/g.f
    StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2), #PB_String_ReadOnly)
   
   EndIf
   
   If b=1
   
    e.f=f.f*g.f
    StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2), #PB_String_ReadOnly)
   
   EndIf
   
   If d=1
   
    e.f=f.f+g.f
    StringGadget(#String_0, 20, 40, 480, 30, StrF(e.f,2), #PB_String_ReadOnly)
   
   EndIf


;_________________________________________________________________________________________________________________________
  EndIf
 EndIf


Until Event = #PB_Event_CloseWindow
End
Kann es sein das ich die ganzen rechensachen nochmal alle rein müssen bzw. eine Art verknüpfung ???

Verfasst: 15.04.2008 19:00
von tobe
hi The_Dark_Zim-.-,

ich bin eben mal über deinen code drübergefahren und hab alles üble rausradiert und deine taste gefixed, gelesen hab ich den code aber nicht ;)

Code: Alles auswählen

EnableExplicit
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #String_0
  #Button_0
  #Button_1
  #Button_2
  #Button_3
  #Button_4
  #Button_5
  #Button_6
  #Button_7
  #Button_8
  #Button_9
  #Button_10
  #Button_11
  #Button_12
  #Button_13
  #Button_14
  #Button_15
  #Button_16
  #Button_17
  #ButtonZahl_0
  #ButtonZahl_1
  #ButtonZahl_2
  #ButtonZahl_3
  #ButtonZahl_4
  #ButtonZahl_5
  #ButtonZahl_6
  #ButtonZahl_7
  #ButtonZahl_8
  #ButtonZahl_9
EndEnumeration

Global FontID1, FontID2, FontID3
FontID1 = LoadFont(1, "Arial", 10, #PB_Font_Bold)
FontID2 = LoadFont(2, "Arial", 14)
FontID3 = LoadFont(3, "Arial", 22)

If OpenWindow(#Window_0, 511, 245, 518, 548, "Rechner",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  If CreateGadgetList(WindowID(#Window_0))
    SetGadgetFont(-1, FontID2)
    StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
    ButtonGadget(#Button_0, 20, 140, 60, 60, "CE")
    ButtonGadget(#Button_1, 100, 140, 60, 60, "/")
    ButtonGadget(#Button_2, 180, 140, 60, 60, "X")
    ButtonGadget(#ButtonZahl_7, 20, 220, 60, 60, "7")
    ButtonGadget(#ButtonZahl_8, 100, 220, 60, 60, "8")
    ButtonGadget(#ButtonZahl_9, 180, 220, 60, 60, "9")
    ButtonGadget(#ButtonZahl_4, 20, 300, 60, 60, "4")
    ButtonGadget(#ButtonZahl_5, 100, 300, 60, 60, "5")
    ButtonGadget(#ButtonZahl_6, 180, 300, 60, 60, "6")
    ButtonGadget(#Button_9, 260, 140, 60, 60, "-")
    ButtonGadget(#Button_10, 260, 220, 60, 140, "+")
    ButtonGadget(#Button_11, 260, 380, 60, 140, "OK")
    ButtonGadget(#ButtonZahl_3, 180, 380, 60, 60, "3")
    ButtonGadget(#ButtonZahl_2, 100, 380, 60, 60, "2")
    ButtonGadget(#ButtonZahl_1, 20, 380, 60, 60, "1")
    ButtonGadget(#ButtonZahl_0, 20, 460, 140, 60, "0")
    ButtonGadget(#Button_16, 180, 460, 60, 60, ",")
    ButtonGadget(#Button_17, 390, 460, 110, 60, "EXIT")
  EndIf
EndIf
Define Event, WindowID, GadgetID, EventType, MenuID
Define.f a, b, c, d, e, f, g, v, x
Repeat
  Event = WaitWindowEvent()
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  MenuID = EventMenu()
  
  Select Event
    Case #PB_Event_Menu
      If EventMenu() = 0 ;Return
        Goto ButtonReturn
      EndIf
    Case #PB_Event_Gadget
      Select GadgetID
        ;Case #String_0
        Case  #Button_0 ;CE
          StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
        Case #ButtonZahl_0 To #ButtonZahl_9
          If v=1
            StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
            v=0
          EndIf   
          StringGadget(#String_0, 20, 40, 480, 30, GetGadgetText(#String_0)+Str(GadgetID-#ButtonZahl_0), #PB_String_ReadOnly)
        Case #Button_16; #PB_Key_PadComma
          x =ValF(GetGadgetText(#String_0))
          StringGadget(#String_0, 20, 40, 480, 30, Str(x)+".", #PB_String_ReadOnly)
        Case #Button_17
          End
        Case #Button_1
          v=0
          a=1
          b=0
          c=0
          d=0
          SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          f=ValF(GetGadgetText(#String_0))
          StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
        Case #Button_2 ;x
          v=0
          a=0
          b=1
          c=0
          d=0
          SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          f=ValF(GetGadgetText(#String_0))
          StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
        Case #Button_9 ;-
          v=0
          a=0
          b=0
          c=1
          d=0
          SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          f=ValF(GetGadgetText(#String_0))
          StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
        Case #Button_10 ;+
          v=0
          a=0
          b=0
          c=0
          d=1
          SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          f=ValF(GetGadgetText(#String_0))
          StringGadget(#String_0, 20, 40, 480, 30, "", #PB_String_ReadOnly)
        Case #Button_11 ;ok
ButtonReturn:
          SetGadgetText(0, ReplaceString(GetGadgetText(0),",","."))
          g=ValF(GetGadgetText(#String_0))
          v=1
          If c=1
            e=f -g 
            StringGadget(#String_0, 20, 40, 480, 30, StrF(e ,2), #PB_String_ReadOnly)
          EndIf
          If a=1
            e=f/g 
            StringGadget(#String_0, 20, 40, 480, 30, StrF(e ,2), #PB_String_ReadOnly)
          EndIf
          If b=1
            e=f *g 
            StringGadget(#String_0, 20, 40, 480, 30, StrF(e ,2), #PB_String_ReadOnly)
          EndIf
          If d=1
            e=f+g 
            StringGadget(#String_0, 20, 40, 480, 30, StrF(e ,2), #PB_String_ReadOnly)
          EndIf
      EndSelect
  EndSelect
Until Event= #PB_Event_CloseWindow
End
mfG
tobe

Verfasst: 16.04.2008 10:50
von The_Dark_Zim-.-
:mrgreen:
Fertig ^^

So nu gehts :allright:
Danke euch allen auch kiffi XD (auch wenn wir immer an uns vorbeigeredet haben wie es scheint ^^)

Obwohl ich da noch ne kleinigkeit habe :wink:
Wie setze ich ein Limit für die Zahlenmenge ein, sodass er nicht in den Minusbereich springt, durch zu große Zahlen ???????


Das ist auch meine letzte Frage zu dem ding.

Verfasst: 09.08.2008 08:11
von dysti
@The_Dark_Zim-.-,

rechne mal 5-4+1 und siehe mal was da heraus kommt.
Da zeigt er 5 an!
Fazit: Haste noch zu tun
mfg
Dysti

Verfasst: 09.08.2008 21:12
von The_Dark_Zim-.-
Hm lol stimmt :P
wenn man aber 5-4 rechnet und dann +1 gehts :P

Verfasst: 14.08.2008 13:16
von dysti
@The_Dark_Zim-.-,
das stimmt, aber ein Rechner speichert auch das Zwischenergebnis und hier fängt die Herausforderung des Proggens an.
Man sollte möglichst keine "Gotos" mehr verwenden.
Mit "Gotos" werden Programmcodes unübersichtlich.
Da du Anfänger bist, habe ich mal deinen Code überarbeitet und alles dokumentiert, damit man sehen kann, wie der Rechner arbeitet.
Habe dort einige Sachen angewendet, damit du sehen kannst, wie Makros, Proceduren und API-Aufrufe verwendet werden
und wie man Code aus dem Forum verwendet bzw. einbaut.
Schau dir den Programmablauf/-struktur an.
Bei einem Rechner ist die Tastatur von der Recheneinheit getrennt.
Das spiegelt sich auch im Code wieder.
Im Rechner ist die CPU vom Speicher getrennt.
Ich denke, das kann man hier im Groben erkennen.
Nun, mehr will ich nicht erklären.
Man könnte einiges noch anders machen und den Code noch straffen, aber darum geht es hier nicht, sondern um den Lerneffekt.
Viel Spass beim weiteren experimentieren.
.... und wenn noch Fragen sind: einfach das Forum fragen.

Gruss Dysti

Hier der Code:

Code: Alles auswählen

; schalten die Declarationsüberprüfung der Variablen ein
EnableExplicit

;- erstellen die Konstanten, d.h. feste unveränderliche Wertzuweisung
Enumeration
  #Window_0
EndEnumeration

Enumeration
  #String_0
  #Button_minus
  #Button_plus
  #Button_sum
  #Button_komma
  #Button_exit
  #Button_div
  #Button_mul
  #Button_ce
  #ButtonZahl_0
  #ButtonZahl_1
  #ButtonZahl_2
  #ButtonZahl_3
  #ButtonZahl_4
  #ButtonZahl_5
  #ButtonZahl_6
  #ButtonZahl_7
  #ButtonZahl_8
  #ButtonZahl_9
EndEnumeration

;- definieren der Variablen

; der Zeichensätze
Global FontID1, FontID2, FontID3, FontID4

; der Tasten und Speicher
;taste = aktuelle gedrückte Taste
;ltztaste = Speicherung des letzten Tastendruckes bis summiert worden ist
;anzeige = die visuelle Anzeige des Rechners
;op1 = erster Speicher-Operant
;op2 = zweiter Speicher-Operant, wird zur Zwischenrechnung wieder gelöscht
;rop = Operator /aktuelle angewählte Rechenoperation
;chrop = checkoperator / eine der wichtigsten Variablen.Kontrolliert, ob eine Rechenoperation beginnt.
; ohne dieser Variablen könnte man nicht 5+5+20= rechnen sondern 5+5= erst eine Zwischenrechnung machen, dann +20.
Global taste.s,lzttaste.s,anzeige.s,rop.s,op1.f,op2.f,chrop.b,key.b

;Global a,b,c,d,e,f,g,v,x ; werden nicht mehr benutzt

; der Fenster- und Ereignisvariablen
Define Event, WindowID, GadgetID, EventType, MenuID

;- Vorbelegung einiger Variablen
anzeige=""
rop=""
op1=0
op2=0
chrop= #False

;- Laden der Zeichensätze
FontID1 = LoadFont(1, "Arial", 10, #PB_Font_Bold)
FontID2 = LoadFont(2, "Arial", 14)
FontID3 = LoadFont(3, "Arial", 22)
FontID4 = LoadFont(4, "Arial", 24)

;- ***** farbiger Fensterhintergrund *****
;-Erstellung der Funktion "Colorwindow(Fensterhandle,Farbe)"
Macro Colorwindow(id,color)
Define hcolor.l
hcolor=CreateSolidBrush_(color)
SetClassLong_(WindowID(id), #GCL_HBRBACKGROUND, hcolor)
EndMacro

;-********** Anfang der Proceduren ***************

;- ***** farbige Button *****
Procedure COLOR_BUTTON(id.l,x.l,y.l,w.l,h.l,color.l,textcolor.l,font.l,text.s)
Define box.l, posx.l, posy.l
jetztaber:
box.l = CreateImage(id, w,h)
StartDrawing(ImageOutput(id))
        DrawingFont(font)
        If TextWidth(text) <= w
            posx.l = w/2 -TextWidth(text) / 2
        Else
            w = TextWidth(text) + 20
            StopDrawing()
            Goto jetztaber
        EndIf
       
        posy.l=h/2-TextWidth("Xii")/2
   
    Box(0, 0,w, h,color)
    DrawingMode(1)
    FrontColor(RGB(Red(textcolor),Green(textcolor),Blue(textcolor)))
    DrawText(posx, posy,text)
    StopDrawing()
    ButtonImageGadget(id, x, y, w, h,box)
EndProcedure

;- ***** die Recheneinheit der CPU *****
Procedure rechnen(reop.s)

      Select reop 
        Case "plus"
              op1=op1 + op2
        Case "minus"
              op1=op1 - op2
        Case "mul"
              op1=op1 * op2
        Case "div"
              op1=op1 / op2
      EndSelect
      
EndProcedure

;- ***** unsere CPU *****
Procedure rechner(taste.s)

      
      ; reine Eingaben/Änderungen der Anzeige        
      If FindString("0123456789",taste,0) ; wurde ein Operator-Button angeklickt
          anzeige=anzeige+taste 
          SetGadgetText(#String_0,anzeige)
          ; abspeichern derAnzeige
          If chrop
          op2=ValF(anzeige) ;Wert des 1. Operanten in den Zwischenspeicher
          Else
          op1=ValF(anzeige) ;Wert des 2. Operanten in den Zwischenspeicher
          EndIf
      Else
      
      Select taste 

        Case "komma"
              anzeige=anzeige+"."
              SetGadgetText(#String_0,anzeige)
        Case "ce"
              anzeige=""
              SetGadgetText(#String_0,"0")
              
        ; Abfrage der Rechenoperationen 
        ; es wurde ein Operand-Button angeklickt
        ; wir checken erstmal, ob schon eine Rechenart / Operand ausgewählt wurde
        ; wenn nein, steht chrop auf "#false / unwahr"
        ; steht chrop auf false, speichern wir die Rechenoperation in der Variablen "rop" ab
        ; und stellen die Variable chrop auf "#True / wahr" um.
        
        ; steht chrop auf #True, wird eine Rechenoperation durchgeführt
        
              
        Case "plus"
              If chrop
              rechnen(rop)
              SetGadgetText(#String_0,StrF(op1,2))
              anzeige=""
              Else
              anzeige=""        ;Anzeige leeren für den zweiten Operanden
              rop=taste         ;Speicherung der Rechenoperation
              chrop=#True
              EndIf
              rop=taste
        Case "minus"
              If chrop
              rechnen(rop)
              SetGadgetText(#String_0,StrF(op1,2))
              anzeige=""
              Else
              anzeige=""
              rop=taste 
              chrop=#True
              EndIf
              rop=taste
        Case "mul"
              If chrop
              rechnen(rop)
              SetGadgetText(#String_0,StrF(op1,2))
              anzeige=""
              Else
              anzeige=""
              rop=taste 
              chrop=#True
              EndIf
              rop=taste
              
        Case "div"
              If chrop
              rechnen(rop)
              SetGadgetText(#String_0,StrF(op1,2))
              anzeige=""
              Else
              anzeige=""
              rop=taste 
              chrop=#True
              EndIf
              rop=taste
              
        Case "sum"
              rechnen(rop)
              SetGadgetText(#String_0,StrF(op1,2))
              anzeige=""
              rop=""
              chrop=#False
      EndSelect
      EndIf
      
      ; schauen mal die Inhalte der Variablen an    
      ;Debug "Sp1= "+ Str(op1) + "    Sp2= "+ Str(op2)+"   Anz= " + anzeige + "   rop: " +rop + "   chrop: " + Str(chrop)
          
         
EndProcedure
;********** Ende der Proceduren ***************

;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

;- ***** Programmanfang *****
;- ***** Fensteraufbau  *****
If OpenWindow(#Window_0, 511, 245, 518, 548, "Rechner",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
  ; machen den Fensterhintergrund farbig
  Colorwindow(0,$D1FEFE)
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  If CreateGadgetList(WindowID(#Window_0))
    SetGadgetFont(-1, FontID2)
    ; nehmen hier ein Textgadget anstatt ein Stringadget
    TextGadget(#String_0, 20, 40, 480, 45, "0", #PB_Text_Right|#PB_Text_Border )
    ButtonGadget(#Button_ce, 20, 140, 60, 60, "C")
    ButtonGadget(#Button_div, 100, 140, 60, 60, "/")
    ButtonGadget(#Button_mul, 180, 140, 60, 60, "X")
    ButtonGadget(#ButtonZahl_7, 20, 220, 60, 60, "7")
    ButtonGadget(#ButtonZahl_8, 100, 220, 60, 60, "8")
    ButtonGadget(#ButtonZahl_9, 180, 220, 60, 60, "9")
    ButtonGadget(#ButtonZahl_4, 20, 300, 60, 60, "4")
    ButtonGadget(#ButtonZahl_5, 100, 300, 60, 60, "5")
    ButtonGadget(#ButtonZahl_6, 180, 300, 60, 60, "6")
    ButtonGadget(#Button_minus, 260, 140, 60, 60, "-")
    ButtonGadget(#Button_plus, 260, 220, 60, 140, "+")
    ButtonGadget(#ButtonZahl_3, 180, 380, 60, 60, "3")
    ButtonGadget(#ButtonZahl_2, 100, 380, 60, 60, "2")
    ButtonGadget(#ButtonZahl_1, 20, 380, 60, 60, "1")
    ButtonGadget(#ButtonZahl_0, 20, 460, 140, 60, "0")
    ButtonGadget(#Button_komma, 180, 460, 60, 60, ",")
    ;ButtonGadget(#Button_sum, 260, 380, 60, 140, "=")
    ;ButtonGadget(#Button_exit, 390, 460, 110, 60, "EXIT")
    ; auch die Button kann man farbig machen
    COLOR_BUTTON(#Button_sum, 260, 380, 60, 140,$00FF00,$000000,FontID2,"=")
    COLOR_BUTTON(#Button_exit, 390, 460, 110, 60,$2E30FB,$000000,FontID2,"EXIT")
  EndIf
    SetGadgetColor(#String_0, #PB_Gadget_BackColor,$FFFFFF)
    SetGadgetFont(#String_0, FontID4)
EndIf

;- ***** Ereignisverarbeitung *****
Repeat
  ; entkommentieren nur die, die auch gebracht werden
  Event = WaitWindowEvent()
  ;WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType()
  ;MenuID = EventMenu()
  Key=EventwParam()
  ;Debug key  ; visuelle Überprüfung, welche Taste welchen Tastencode als erstes erzeugt. Die erste angezeigte Ziffer ist ausschlaggebend.
  Select Event ; welches Ereignis liegt vor?
  
  ; Nun, wir haben kein Menue
    ;Case #PB_Event_Menu
    ;  If EventMenu() = 0 ;Return
    ;     rechner("menu")
    ;  EndIf
    
    ;- Buttonabfrage 
    Case #PB_Event_Gadget 
      Select GadgetID ;welcher Button wurde angeklickt?
        Case #ButtonZahl_0
              rechner("0")
        Case #ButtonZahl_1
              rechner("1")
        Case #ButtonZahl_2
              rechner("2")
        Case #ButtonZahl_3
              rechner("3") 
        Case #ButtonZahl_4
              rechner("4")
        Case #ButtonZahl_5
              rechner("5")
        Case #ButtonZahl_6
              rechner("6")
        Case #ButtonZahl_7
              rechner("7")
        Case #ButtonZahl_8
              rechner("8") 
        Case #ButtonZahl_9
              rechner("9")
        Case  #Button_ce
              rechner("ce")
        Case #Button_komma
              rechner("komma")
        Case #Button_div
              rechner("div")
        Case #Button_mul
              rechner("mul")
        Case #Button_minus
              rechner("minus")
        Case #Button_plus
              rechner("plus")
        Case #Button_sum
              rechner("sum")
        Case #Button_exit
        Event= #PB_Event_CloseWindow
      EndSelect
   
  ;- Tastaturabfrage
  Case #WM_KEYDOWN ; ist eine Taste gedrückt worden
      Select key   ; wenn ja, welche?
      
      Case 48 ; 0
            rechner("0")
      Case 49 ; 1
            rechner("1")
      Case 50
            rechner("2")
      Case 51
            rechner("3")
      Case 52
            rechner("4")
      Case 53
            rechner("5")
      Case 54
            rechner("6")
      Case 55
            rechner("7")
      Case 56
            rechner("8")
      Case 57 ;9
            rechner("9")
      Case 120 ; x
            rechner("mul")
      Case 42 ; x
            rechner("mul")
      Case -69 ;43 ;+
            rechner("plus")
      Case 44 ;, komma
            rechner("komma")
      Case 45 ; -
            rechner("minus")
      Case 46 ;. Punkt
            rechner("komma")
      Case -66 ; :
            rechner("div")
      Case 111 ; / :<- Div
            rechner("div")
      Case 67 ; löschen
            rechner("ce")
      Case 8 ; löschen
            rechner("ce")
      Case 27 ; ESC / Exit
            Event= #PB_Event_CloseWindow      
      EndSelect
     EndSelect
     
     ;- Umlenkung der Returntaste zur Summierung
     If key= 13 ;Return
            rechner("sum")
     EndIf  
       
Until Event= #PB_Event_CloseWindow
End
;-***** Programm-Ende *****