Ergebnis anzeigen?

Anfängerfragen zum Programmieren mit PureBasic.
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen?

Beitrag von Kallewirsch »

Hoppla,

da fehlt doch was

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1

EndEnumeration

#CRLF$ = Chr(10)+Chr(13)
SetControl=0

LoadFont(0, "Arial", 36)
LoadFont(1, "Arial", 24)


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      SetWindowColor(#Window_0,$FBE6C5)
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
      SetGadgetColor(#TString_0, #PB_Gadget_BackColor,$FBE6C5)
      SetGadgetFont(#TString_0, FontID(0))
     
      ButtonGadget(#Button_0, 250, 500, 150, 50, "Berechnen")
      ButtonGadget(#Button_Close, 450, 500, 150, 50, "Close")
     
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      SetGadgetColor(#TString_1, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_0, FontID(0))
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      SetGadgetColor(#TString_2, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_1, FontID(0))
      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      SetGadgetColor(#TString_3, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_2, FontID(0))
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      SetGadgetColor(#TString_4, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_3, FontID(0))
     
      TextGadget(#TString_6, 40, 390, 160, 20, "Zahl 5 eingeben")
      SetGadgetColor(#TString_6, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_4, FontID(0))
     
      TextGadget(#TString_7, 40, 480, 160, 20, "Zahl 6 eingeben")
      SetGadgetColor(#TString_7, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_5, FontID(0))
   
      TextGadget(#TString_5, 250, 300, 280, 20, "Mittelwert der Eingaben")
      SetGadgetColor(#TString_5, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_Numeric)
      SetGadgetFont(#STRING_INPUT, FontID(1))
      
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      SetGadgetColor(#TString_8, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_Numeric)
     
    EndIf
      Repeat
    iEvent.i = WaitWindowEvent()
   
    Select iEvent
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Button_0
           SetControl=0 

          ;   Nur Mittelwert von 1 und 2 wird berechnet
            eingabe1$=GetGadgetText(#String_0)
            eingabe2$=GetGadgetText(#String_1)
            eingabe3$=GetGadgetText(#String_2)
            eingabe4$=GetGadgetText(#String_3)
            eingabe5$=GetGadgetText(#String_4)
            eingabe6$=GetGadgetText(#STRING_5)           
                   
            If (eingabe1$<>"")           
               Teiler + 1
               Mittelwert  = ValD(eingabe1$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 1 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe2$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe2$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 2 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe3$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe3$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 3 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe4$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe4$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 4 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe5$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe5$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 5 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe6$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe6$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 6 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
            If Teiler=6
            SetGadgetText(#STRING_INPUT,StrD(Mittelwert/Teiler))
            
            
            
           a1.d = Mittelwert / Teiler * 100
            
           Mittel100 = Round(a1, #PB_Round_Up)
                       
           SetGadgetText(#STRING_INPUT_1,Str(Mittel100))
           SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$00FFFF)   
            
            
            
            Else
            MessageRequester("Fehler","Es müssen alle Felder ausgefüllt werden!")
            EndIf
           
           
            
            

            
            
            
           Teiler=0    

           Case #STRING_INPUT

            SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$00FFFF)
           
              Case #BUTTON_CLOSE
                     Quit = #True
                     
        EndSelect
     EndSelect                     
                     
   Until iEvent = #PB_Event_CloseWindow Or Quit = #True

EndProcedure

Open_Window_0()
Gruß
Kallewirsch
PureBasic 5.00 (Windows - x86)
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Re: Ergebnis anzeigen?

Beitrag von jojo1541 »

Naja, du fügst eben einfach an den Case der Eingabe in ein Textgadget an, dass er den inhalt der gadgets löschen soll

Code: Alles auswählen

SetGadgetText(#DeinStringGadget,"")
Und für die Farbe setzt du es einfach wieder auf die Farbe, die du vorher hattest.

Code: Alles auswählen

SetGadgetColor(#DeinGadget,#PB_Gadget_BackColor,DeineFarbe)
Ich hoffe ich konnte helfen. :wink:
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Ergebnis anzeigen?

Beitrag von Pelagio »

Das Programm könnte langsam etwas unübersichtlich erscheinen deswegen habe ich es gewagt den letzten Source etwas zu straffen. Ich hoffe das dies nicht zu viel auf einmal für einen nicht so avisierten Programmierer ist. Ich gehe aber davon aus das der Inhalt viele neue Aspekte hat welche Kallewirsch erst einmal verarbeiten muss, was ihn aber ein großes Stück weiter bringen wird. :allright:

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1

EndEnumeration

#CRLF$ = Chr(10)+Chr(13)
#NULL$ = Chr(32)

LoadFont(0, "Arial", 36)
LoadFont(1, "Arial", 24)


Procedure Open_Window()
   Protected n.i
   
   If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      SetWindowColor(#Window_0,$FBE6C5)
      
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
     
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)

      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)

     
      TextGadget(#TString_5, 40, 390, 160, 20, "Zahl 5 eingeben")
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
     
      TextGadget(#TString_6, 40, 480, 160, 20, "Zahl 6 eingeben")
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)

      ButtonGadget(#Button_0, 250, 500, 150, 50, "Berechnen")
      ButtonGadget(#Button_Close, 450, 500, 150, 50, "Close")
   
      TextGadget(#TString_7, 250, 300, 280, 20, "Mittelwert der Eingaben")
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_ReadOnly)
      
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_ReadOnly)
      
      SetGadgetFont(#TString_0     , FontID(1))
      SetGadgetFont(#STRING_INPUT  , FontID(1))
      SetGadgetFont(#STRING_INPUT_1, FontID(1))
      For n=#TString_0 To #TString_8
         SetGadgetColor(n, #PB_Gadget_BackColor,$FBE6C5)
      Next n
      For n=#String_0 To #String_5
         SetGadgetFont(n, FontID(0))
      Next n
      SetActiveGadget(#String_0)
   EndIf
EndProcedure   

Procedure.a Gadget_Click(vID.i)
   Protected n.i, pQuit.i, pTeiler.a, pMittelwert.i, pValue.s
   
   Select vID
      Case #Button_0
         For n=#string_0 To #String_5
            pValue = GetGadgetText(n)
            If (pValue=#NULL$)
               MessageRequester("Eingabefehler","Feld "+ Str(1+n-#String_0) + " muß ausgefüllt werden!")
               SetActiveGadget(n)
               Break
            Else
               Teiler + 1
               Mittelwert + ValD(pValue)
            EndIf
         Next n 
         If (Teiler=6)
            SetGadgetText(#STRING_INPUT,  StrD(Mittelwert/Teiler))
            SetGadgetText(#STRING_INPUT_1,StrD(Mittelwert/Teiler*100, 0))
         EndIf
      Case #String_0 To #String_5
         For n=#string_0 To #String_5
            SetGadgetColor(n, #PB_Gadget_BackColor, -1)
         Next n
         SetGadgetColor(GetActiveGadget(), #PB_Gadget_BackColor,$00FFFF)
         SetGadgetText(#STRING_INPUT, #NULL$)
         SetGadgetText(#STRING_INPUT_1, #NULL$)
      Case #BUTTON_CLOSE
         pQuit = #True   
   EndSelect
   ProcedureReturn pQuit
EndProcedure

Procedure Main()   
   Protected n.i, pEvent.i, pQuit.a
   
   Open_Window()
   Repeat
      pEvent = WaitWindowEvent()
   
      Select pEvent
         Case #PB_Event_CloseWindow
            pQuit = #True
         Case #PB_Event_Gadget
            pQuit = Gadget_Click(EventGadget())
      EndSelect                     
   Until (pQuit=#True)
EndProcedure

Main()

End
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen?

Beitrag von dysti »

Hallo Kallewitsch,
Pelagio war schon etwas schneller. wie dem auch sei.
Ich habe den Code so gelassen mit deinen Änderungswünschen.
Zusätzlich habe ich mir mal die Mühe gemacht, mal alles zu kommentieren.
Wo nichts steht, wiederholt es sich nur.
...und nun den Code

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_loeschen
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1

EndEnumeration

; zum Testen, welchen Inhalt hat z.B. die Konstante "#Button_loeschen"
; zum auskommentieren ein Semicolon setzen
Debug #Button_loeschen

; selbstdefinierte Variablen / Konstanten declarieren
; Unterschied: Konstante hat ein # davor und kann während des Programmlaufes nicht verändert werden
#CRLF$ = Chr(13)+Chr(10)
; Variable, d. h. während des Programmlaufs kann sich der Wert verändern.
; In unserem Beispiel erhält sich später den Wert 1 und dient zur Steuerung des Programmablaufs innerhalb einer If-Schleife.
SetControl=0

; Hier werden erst die verwendeten Zeichensätze geladen, um z.B. eine größe Schriftart zu haben
LoadFont(0, "Arial", 36)
LoadFont(1, "Arial", 24)


; zum Testen, welchen Inhalt hat z.B. die Konstante "#Button_loeschen"
; zum auskommentieren ein Semicolon setzen
Debug #Button_loeschen
; oder die Variable SetControl usw.
Debug SetControl
; Ende Debug-Erklärung

; Das Unterprogramm / Procedure hat hier die Aufgabe, die beiden Ergebnisfelder zu aktualisieren
; in diesem Fall das Feld zu löschen und die Farbe wieder auf weiß zu setzen 
Procedure ergebnisloeschen()
      ; wir löschen das Feld
      SetGadgetText(#STRING_INPUT,"")
      ; und setzen die Hintergrundfarbe wieder auf weiß
      SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$FFFFFF)
      SetGadgetText(#STRING_INPUT_1,"")
      SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$FFFFFF)
EndProcedure

; Haupt- oder Mainprogramm
  ; Wir öffnen ein Hauptfenster
  ; das If davor bedeutet, wenn das Fenster nicht geöffnet werden kann, springt es zum Programmende 
  ; Wichtig sind die Konstanten des OpenWindow-Befehls. In der Hilfe schauen und mal spielen
  If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      ;Fensterhintergrund in Farbe setzen
      SetWindowColor(#Window_0,$FBE6C5)
      ; Nun folgen die Declarationen der einzelnen Gadgets
      ; normalerweise sind Gadgets Miniprogramme,
      ; in unserem Fall sind es Felder, die auf ihrer jeweiligen Art etwas anzeigen/darstellen
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
      ; hier machen wir den Hintergrund farbig (#PB_Gadget_BackColor),
      ; wenn wir die Zeichen farbig gestellen wollen, nehmen wir die Konstante #PB_Gadget_FrontColor, siehe auch in der Hilfe F1
      SetGadgetColor(#TString_0, #PB_Gadget_BackColor,$FBE6C5)
      SetGadgetFont(#TString_0, FontID(0))
      
      ; Wir erstellen Schaltflächen, im übertragenem Sinne ist ja ein Button auch ein Feld, 
      ; das ein Text anzeigt und bei einem Mausclick etwas macht. Es löst ein Event/Ereignis aus.
      ; Aber das machen alle Felder, auch Textfelder siehe "Case #String_0" im Programmcode
      ButtonGadget(#Button_0, 250, 500, 100, 50, "Berechnen")
      ButtonGadget(#Button_loeschen, 425, 500, 100, 50, "Löschen")
      ButtonGadget(#Button_Close, 600, 500, 100, 50, "Close")
      
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      SetGadgetColor(#TString_1, #PB_Gadget_BackColor,$FBE6C5)
      ; Hier haben wir ein Feld/Gadget, was einen Text sowohl anzeigen, als auch einen Text aufnehmen kann
      ; in diesem Fall soll es zunächst einmal einen Text/Zeichen aufnehmen und anzeigen
      ; die Konstante #PB_String_Numeric ermöglicht nur die Eingabe von Zahlen
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_0, FontID(0))
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      SetGadgetColor(#TString_2, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_1, FontID(0))
      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      SetGadgetColor(#TString_3, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_2, FontID(0))
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      SetGadgetColor(#TString_4, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_3, FontID(0))
     
      TextGadget(#TString_6, 40, 390, 160, 20, "Zahl 5 eingeben")
      SetGadgetColor(#TString_6, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_4, FontID(0))
     
      TextGadget(#TString_7, 40, 480, 160, 20, "Zahl 6 eingeben")
      SetGadgetColor(#TString_7, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_5, FontID(0))
   
      TextGadget(#TString_5, 250, 300, 280, 20, "Mittelwert der Eingaben")
      SetGadgetColor(#TString_5, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_Numeric)
      SetGadgetFont(#STRING_INPUT, FontID(1))
     
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      SetGadgetColor(#TString_8, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_Numeric)
     
    ;EndIf   ;dieses Endif ist falsch gesetzt
    
    
    ; Anfang der Hauptereignisschleife
      Repeat
      
    ; wir warten auf ein Ereignis und speichern es in der Variablen "iEvent" ab
    iEvent.i = WaitWindowEvent()
    
    
    ; wir fragen den Inhalt der Variablen "iEvent" ab, welches Ereignis eingetreten ist.
    Select iEvent
    
      ; nun fragen wir ein Gadget ein Ereignis/Event ausgelöst hat
      Case #PB_Event_Gadget
        Select EventGadget()
          ; nun fragen wir die einzelnen Gadgets ab
          Case #Button_0 ; ah ha, der Button "Berechnen" wurde angeklickt und hat ein Ereignis ausgelöst.
           ; Diese Variable wird gebraucht, ob beim Auslesen der Felder ein Feld leer war.
           ; Dann wir sie auf 1 gesetzt, aber beim Einstieg in der Berechnung pauschal wieder auf 0 gesetzt.
           ; Die Abfrage dieser Variablen geschieht in den jeweiligen If-Schleifen der Felder
           SetControl=0
 
          ; Nun lesen wir erstmal den Inhalt aller Felder aus und speichern sie in den jeweiligen Variablen
          ; Diese Art der Variablenspeicherung haben wir schon bei der Hauptereignisschleife mit "iEvent" kennengelernt
            eingabe1$=GetGadgetText(#String_0)
            eingabe2$=GetGadgetText(#String_1)
            eingabe3$=GetGadgetText(#String_2)
            eingabe4$=GetGadgetText(#String_3)
            eingabe5$=GetGadgetText(#String_4)
            eingabe6$=GetGadgetText(#STRING_5)           
            
            
            ; Jetzt kann nichts mehr passieren, die Inhalte stehen in den Variablen
            ; Nun fragen wir den Inhalt der Variablen ab und ob überhaupt ein Inhalt vorhanden ist.
            If (eingabe1$<>"")
            ; nun, ein Inhalt ist offentsichtlich vorhanden.
               ; wir merken uns, das Feld war nicht leer, also können wir es zu der Berechnung hinzuziehen
               ; und merken uns, wieviele Felder es sind, indem wir immer eine 1 hinzuzählen  (Teiler=Felder)         
               Teiler + 1
               
               ; und merken uns den Wert, der hier von einem Zeichen in eine Zahl umgewandelt werden muß,
               ; damit wir damit rechnen können
               Mittelwert  = ValD(eingabe1$)
            Else
            ; Mist, das Feld war leer
            ; nun fragen wir ab, ob schon mal ein Feld leer war
            If SetControl=0
            ;ok, es war noch kein Feld leer
            ; Geben wir erstmal eine Fehlermeldung aus
            MessageRequester("Eingabefehler","Feld 1 muß ausgefüllt werden!")
            ; und sagen dem Programm, das ein Feld leer war.
            ; das verhindert, das bei weiteren leeren Feldern die Fehlermeldungen erscheinen, also übersprungen werden
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe2$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe2$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 2 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe3$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe3$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 3 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe4$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe4$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 4 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe5$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe5$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 5 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe6$<>"")
               Teiler + 1
               Mittelwert + ValD(eingabe6$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 6 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
            ; Wir haben alle Felder abgefragt
            
            
            
            If Teiler=6 ;ist in allen Felder eine Eingabe gemacht worden?
              
              ; OK, dann können wir mit dem Berechnen anfangen und das Ergebnis gleich in das Ausgabefeld schreiben.
              SetGadgetText(#STRING_INPUT,StrD(Mittelwert/Teiler))
              
              ; Warum auch immer, wir multiplizieren das Ganze mal mit 100
              a1.d = Mittelwert / Teiler * 100
              ; das Ergebnis aus der Multiplikation runden wir auf eine Ganzzahl auf.
              Mittel100 = Round(a1, #PB_Round_Up)
              
              ; Berechnung fertig? Gut. Dann schreiben wir es in das neue Ausgabefeld von Kallewitsch         
              SetGadgetText(#STRING_INPUT_1,Str(Mittel100))
              ; damit es schön aussieht und sich auch visuell bemerkbar macht, machen wir den Hintergrund mal farbig.
              SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$00FFFF)   
           
            Else
            ; Oh je, ein Feld war leer und es müssen doch alle Felder ausgefüllt werden!
            ; Geben wir dem User mal ein Hinweis, daß er ein Fehler begangen hat.
            MessageRequester("Fehler","Es müssen alle Felder ausgefüllt werden!")
            EndIf
            
            ; Wir haben das Ende der Abfrage erreicht und haben evtl. dem User eine Meldung gezeigt. Dann ist ja alles OK.
            ; Dann können wir zur neuen Berechnung die Anzahl Felder wieder auf NULL setzen.
            Teiler=0  
            
           Case #Button_loeschen ; wir löschen erstmal alle Inhalte aller Felder
           
                SetGadgetText(#String_0,"")
                SetGadgetText(#String_1,"")
                SetGadgetText(#String_2,"")
                SetGadgetText(#String_3,"")
                SetGadgetText(#String_4,"")
                SetGadgetText(#STRING_5,"")       
           
                ergebnisloeschen()
                
           Case #String_0 ;nanu, ein Stringfeld wurde angeklickt
                ; also löschen wir erstmal die Ergenisfelder
                ; dazu springen wir in unser Unterprogramm / Procedure
                ergebnisloeschen()
           Case #String_1
                ergebnisloeschen()
           Case #String_2
                ergebnisloeschen()
           Case #String_3
                ergebnisloeschen()
           Case #String_4
                ergebnisloeschen()
           Case #STRING_5
                ergebnisloeschen()
              
           Case #STRING_INPUT ; warum auch immer, das Ausgabefeld wurde angeklickt
                ; damit der User das merkt, machen wir den Hintergrund farbig
                SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$00FFFF)
           
           Case #BUTTON_CLOSE ; Halölle, verdammt, der User will mich killen. Dann Tschüß.
                Quit = #True  ; der Ereignisschleife /Event mitteilen, das der User das Programm beenden will.
                     
        EndSelect
     EndSelect                     
   
   ; wurde der Schließen-Button des Fenster angeklickt oder steht die Variable "Ouit" auf #True / Wahr                 
   Until iEvent = #PB_Event_CloseWindow Or Quit = #True 
   ; Wir haben die Repeat-Schleife / Ereignisschleife verlassen
EndIf  ; Ende: Wir öffnen ein Hauptfenster

; Ende des Haupt- oder Main-Programmes
End ; All the opened windows are closed automatically by PureBasic
; Das Programm ist vom Bildschirm verschwunden
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen?

Beitrag von dysti »

Hallo Kallewitsch und Pelagio,
ich finde es gut das beide Version da sind. Damit kann man sehr gut den Unterschied in der Programmiertechnik erkennen.
Wobei ich glaube, das Kallewitsch noch etwas braucht, den Code mit der Trennung der Abfrage-Schleifen vom Hauptprogramm,
die neue For-Next-Schleife und mit den Übergabeparametern auseinander zu tüfteln.

Nachtrag:
Diesen Beitrag von MK-Soft fand ich gut:
http://www.purebasic.fr/german/viewtopi ... 3&start=10
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen?

Beitrag von Kallewirsch »

Hallo zusammen,

hi Dysti und Pelagio,

super, super, super :allright: :D

@Pelagio
Ich gehe aber davon aus das der Inhalt viele neue Aspekte hat welche Kallewirsch erst einmal verarbeiten muss,
Das kannst Du laut sagen.
Werde mir die größte Mühe geben das ganze zu verstehen!

@Dysti
ich finde es gut das beide Version da sind. Damit kann man sehr gut den Unterschied in der Programmiertechnik erkennen.
Finde es auch Klasse (Bin ständig am rumprobieren......mit beiden Versionen)
Zusätzlich habe ich mir mal die Mühe gemacht, mal alles zu kommentieren.
Bin sprachlos!!!
Super Kommentar!!!


Ich glaube das ich für die nächsten Tage genug Lernmaterial habe.
Also.....nicht traurig sein wenn ich euch mal nicht belästige :mrgreen:

Ich komme aber sicher wieder mit der nächsten Frage.

Nochmals vielen Dank für eure Super Hilfen!!!

Gruß und bis demnächst
Kallewirsch
PureBasic 5.00 (Windows - x86)
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen?

Beitrag von Kallewirsch »

Hallo zusammen,

(bin dann mal wieder hier :mrgreen: )

Hi Dysti,

brauche mal wieder etwas Hilfe von Dir (oder auch von den anderen Spezialisten hier).

Wie muss ich das machen wenn im Eingabefeld für "Zahl 1 (bis 6)" z.B. mindestens 5Stellen eingegeben werden müssen und maximal 7Stellen eingegeben werden dürfen und bei unterschreiten / überschreiten der Eingabe eine Meldung kommt>>>
"MessageRequester("Zahl zu klein! Mindestens 5 Stellen!")
"MessageRequester("Zahl zu groß! Maximal 7 Stellen!")

Gruß an alle Helfer und schon mal DANKE
Kallewirsch
PureBasic 5.00 (Windows - x86)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Re: Ergebnis anzeigen?

Beitrag von Pelagio »

Hallo Kallewirsch,

anbei zeige ich Dir, allerdings an meinem Beispiel ich hoffe das stört nicht, wie die richtige Ziffernlänge abgefragt werden kann.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1

EndEnumeration

#CRLF$ = Chr(10)+Chr(13)
#NULL$ = Chr(32)

LoadFont(0, "Arial", 36)
LoadFont(1, "Arial", 24)


Procedure Open_Window()
   Protected n.i
   
   If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
      SetWindowColor(#Window_0,$FBE6C5)
      
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
     
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)

      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)

     
      TextGadget(#TString_5, 40, 390, 160, 20, "Zahl 5 eingeben")
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
     
      TextGadget(#TString_6, 40, 480, 160, 20, "Zahl 6 eingeben")
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)

      ButtonGadget(#Button_0, 250, 500, 150, 50, "Berechnen")
      ButtonGadget(#Button_Close, 450, 500, 150, 50, "Close")
   
      TextGadget(#TString_7, 250, 300, 280, 20, "Mittelwert der Eingaben")
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_ReadOnly)
      
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_ReadOnly)
      
      SetGadgetFont(#TString_0     , FontID(1))
      SetGadgetFont(#STRING_INPUT  , FontID(1))
      SetGadgetFont(#STRING_INPUT_1, FontID(1))
      For n=#TString_0 To #TString_8
         SetGadgetColor(n, #PB_Gadget_BackColor,$FBE6C5)
      Next n
      For n=#String_0 To #String_5
         SetGadgetFont(n, FontID(0))
      Next n
      SetActiveGadget(#String_0)
   EndIf
EndProcedure   

Procedure.a Gadget_Click(vID.i)
   Protected n.i, pQuit.i, pTeiler.a, pMittelwert.i, pValue.s
   
   Select vID
      Case #Button_0
         For n=#string_0 To #String_5
            pValue = GetGadgetText(n)
            If (pValue=#NULL$)
               MessageRequester("Eingabefehler","Feld "+ Str(1+n-#String_0) + " muß ausgefüllt werden!")
               SetActiveGadget(n)
               Break
            Else
               Teiler + 1
               Mittelwert + ValD(pValue)
            EndIf
         Next n 
         If (Teiler=6)
            SetGadgetText(#STRING_INPUT,  StrD(Mittelwert/Teiler))
            SetGadgetText(#STRING_INPUT_1,StrD(Mittelwert/Teiler*100, 0))
         EndIf
      Case #String_0 To #String_5
; Achtung hier Ermittlung der richtigen Zifferanzahl
         If (EventType()=#PB_EventType_LostFocus)
            pValue = GetGadgetText(vID)
            If (Len(pValue)>0) And (Len(pValue)<5)
               MessageRequester("InfoBox", "Zahl zu klein! Mindestens 5 Stellen!", #MB_ICONEXCLAMATION)
               SetActiveGadget(vID)
            ElseIf (Len(pValue)>7)
               MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)
               SetActiveGadget(vID)
            EndIf
         Else
            For n=#string_0 To #String_5
               SetGadgetColor(n, #PB_Gadget_BackColor, -1)
            Next n
            SetGadgetColor(GetActiveGadget(), #PB_Gadget_BackColor,$00FFFF)
            SetGadgetText(#STRING_INPUT, #NULL$)
            SetGadgetText(#STRING_INPUT_1, #NULL$)
         EndIf
      Case #BUTTON_CLOSE
         pQuit = #True   
   EndSelect
   ProcedureReturn pQuit
EndProcedure

Procedure Main()   
   Protected n.i, pEvent.i, pQuit.a
   
   Open_Window()
   Repeat
      pEvent = WaitWindowEvent()
   
      Select pEvent
         Case #PB_Event_CloseWindow
            pQuit = #True
         Case #PB_Event_Gadget
            pQuit = Gadget_Click(EventGadget())
      EndSelect                     
   Until (pQuit=#True)
EndProcedure

Main()

End
Ohne Zeit kein Fleiß
Auf neustem Stand zu sein ist eine Kunst die nicht jeder perfektioniert [Win11Pro; PB6.20 LTS]. :allright:
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen?

Beitrag von dysti »

...hier die Lösung.
Schau dir die Procedure Feldpruefung genau an und überlege vielleicht, wie du den Code (Eventschleife) in Richtung "Stil Pelagio" straffen kannst.

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_loeschen
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1

EndEnumeration


#CRLF$ = Chr(13)+Chr(10)

LoadFont(0, "Arial", 20)
LoadFont(1, "Arial", 24)

Procedure ergebnisloeschen()
      ; wir löschen das Feld
      SetGadgetText(#STRING_INPUT,"")
      ; und setzen die Hintergrundfarbe wieder auf weiß
      SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$FFFFFF)
      SetGadgetText(#STRING_INPUT_1,"")
      SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$FFFFFF)
EndProcedure

Procedure feldpruefung(Feld,Inhalt$)
    
    If Len(Inhalt$)<5 ; überprüfen der Länge des Strings
    MessageRequester("Eingabefehler","Es müssen mindestens 5 Zahlen" + #CRLF$ + Space(15) + "im Feld " + Str(Feld) + #CRLF$ + Space(7) + "eingegeben werden!")
    ProcedureReturn 0 ; Null zurückgeben, um Fehlermeldung am Ende der Gesamt-IF-Schleife zu erzwingen
    ElseIf Len(Inhalt$)>7
    MessageRequester("Eingabefehler","Es dürfen nur maximal 7 Zahlen" + #CRLF$ + Space(15) + "im Feld " + Str(Feld) + #CRLF$ + Space(7) + "eingegeben werden!")
    ProcedureReturn 0
    Else
    ProcedureReturn 1 ; Alles klar, die Anzahl der eingegebenen Zahlen sind ok.
    EndIf
    
EndProcedure

  If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_SizeGadget | #PB_Window_TitleBar )
      
      SetWindowColor(#Window_0,$FBE6C5)
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
      SetGadgetColor(#TString_0, #PB_Gadget_BackColor,$FBE6C5)
      SetGadgetFont(#TString_0, FontID(0))
      ButtonGadget(#Button_0, 250, 500, 100, 50, "Berechnen")
      ButtonGadget(#Button_loeschen, 425, 500, 100, 50, "Löschen")
      ButtonGadget(#Button_Close, 600, 500, 100, 50, "Schließen")
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      SetGadgetColor(#TString_1, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_0, FontID(0))
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      SetGadgetColor(#TString_2, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_1, FontID(0))
      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      SetGadgetColor(#TString_3, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_2, FontID(0))
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      SetGadgetColor(#TString_4, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_3, FontID(0))
      TextGadget(#TString_6, 40, 390, 160, 20, "Zahl 5 eingeben")
      SetGadgetColor(#TString_6, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_4, FontID(0))
      TextGadget(#TString_7, 40, 480, 160, 20, "Zahl 6 eingeben")
      SetGadgetColor(#TString_7, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_5, FontID(0))
      TextGadget(#TString_5, 250, 300, 280, 20, "Mittelwert der Eingaben")
      SetGadgetColor(#TString_5, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_Numeric)
      SetGadgetFont(#STRING_INPUT, FontID(1))
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      SetGadgetColor(#TString_8, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_Numeric)
      Repeat
    iEvent.i = WaitWindowEvent()
    Select iEvent
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Button_0
           SetControl=0
            eingabe1$=GetGadgetText(#String_0)
            eingabe2$=GetGadgetText(#String_1)
            eingabe3$=GetGadgetText(#String_2)
            eingabe4$=GetGadgetText(#String_3)
            eingabe5$=GetGadgetText(#String_4)
            eingabe6$=GetGadgetText(#STRING_5)
            If (eingabe1$<>"")
               If Feldpruefung(1,eingabe1$) ; springt nur hier hinein, wenn die Rückgabe 1 ist    
               Teiler + 1
               Mittelwert  = ValD(eingabe1$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 1 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe2$<>"")
               If Feldpruefung(2,eingabe2$)
               Teiler + 1
               Mittelwert + ValD(eingabe2$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 2 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe3$<>"")
               If Feldpruefung(3,eingabe3$)
               Teiler + 1
               Mittelwert + ValD(eingabe3$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 3 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe4$<>"")
               If Feldpruefung(4,eingabe4$)
               Teiler + 1
               Mittelwert + ValD(eingabe4$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 4 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe5$<>"")
               If Feldpruefung(5,eingabe5$)
               Teiler + 1
               Mittelwert + ValD(eingabe5$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 5 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe6$<>"")
               If Feldpruefung(6,eingabe6$)
               Teiler + 1
               Mittelwert + ValD(eingabe6$)
               EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 6 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
            
            If Teiler=6 
              SetGadgetText(#STRING_INPUT,StrD(Mittelwert/Teiler))
              a1.d = Mittelwert / Teiler * 100
              Mittel100 = Round(a1, #PB_Round_Up)       
              SetGadgetText(#STRING_INPUT_1,Str(Mittel100))
              SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$00FFFF)   
           
            Else
            
            MessageRequester("Fehler","Es müssen alle Felder korrekt ausgefüllt werden!")
            EndIf
            
            
            Teiler=0  
            
           Case #Button_loeschen 
           
                SetGadgetText(#String_0,"")
                SetGadgetText(#String_1,"")
                SetGadgetText(#String_2,"")
                SetGadgetText(#String_3,"")
                SetGadgetText(#String_4,"")
                SetGadgetText(#STRING_5,"")       
           
                ergebnisloeschen()
                
           Case #String_0 
                ergebnisloeschen()
           Case #String_1
                ergebnisloeschen()
           Case #String_2
                ergebnisloeschen()
           Case #String_3
                ergebnisloeschen()
           Case #String_4
                ergebnisloeschen()
           Case #STRING_5
                ergebnisloeschen()
              
           Case #STRING_INPUT 
                SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$00FFFF)
           
           Case #BUTTON_CLOSE 
                Quit = #True  
                     
        EndSelect
     EndSelect                     
   
          
   Until iEvent = #PB_Event_CloseWindow Or Quit = #True 
  
EndIf


End 

Nachtrag:

Pelagio war etwas schneller und hat die Eingabeüberprüfung direkt gemacht.
Ich hoffe Pelagio verzeiht mir, aber ich habe schnell bei ihm geklaut, da wir ja im Prinzip am gleichen "Projekt" arbeiten.
Du brauchst nur die Procedure austauschen und die Feldpruefung kannst du dann löschen, sie wird nicht mehr gebraucht.

Hier die geänderte Procedure:

Code: Alles auswählen

Procedure ergebnisloeschen()
      ; Achtung hier Ermittlung der richtigen Zifferanzahl
         If (EventType()=#PB_EventType_LostFocus)
            aFeld=EventGadget()
            iFeld$ = GetGadgetText(aFeld)
            If (Len(iFeld$)>0) And (Len(iFeld$)<5)
               MessageRequester("InfoBox", "Zahl zu klein! Mindestens 5 Stellen!", #MB_ICONEXCLAMATION)
               SetActiveGadget(aFeld)
            ElseIf (Len(iFeld$)>7)
               MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)
               SetActiveGadget(aFeld)
            EndIf
         Else
            For n=#string_0 To #String_5
               SetGadgetColor(n, #PB_Gadget_BackColor, -1)
            Next n
            SetGadgetColor(GetActiveGadget(), #PB_Gadget_BackColor,$00FFFF)
            SetGadgetText(#STRING_INPUT, #NULL$)
            SetGadgetText(#STRING_INPUT_1, #NULL$)
         EndIf

      ; wir löschen das Feld
      SetGadgetText(#STRING_INPUT,"")
      ; und setzen die Hintergrundfarbe wieder auf weiß
      SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$FFFFFF)
      SetGadgetText(#STRING_INPUT_1,"")
      SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$FFFFFF)
EndProcedure
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen?

Beitrag von Kallewirsch »

Hallo zusammen,

Danke an Dysti und Pelagio für die schnelle Hilfe!

Aber wie immer komme ich natürlich nicht ohne etwas zu Fragen:


1.) Wo steht in der Hilfe etwas über die Konstante : #MB_ICONEXCLAMATION

2.) Wenn z.B. bei Zahl1 nur 3Stellen eingegeben werden und berechnet wird erscheint die Meldung (so soll es auch sein :allright: ) Wenn nun die Meldung bestätigt wird und man will sofort das Prg.beenden, erscheint das Fenster wieder. Erst bei richtiger Eingabe im Feld Zahl1 kann die Taste "LÖSCHEN" gedrückt oder das Prg geschlossen werden. Warum ist das so?

3.) Wie bekommt man das hin, das bei Eingabe einer großen Zahl >7Stellen (z.B.53Stellen,....weil man beim drücken der Taste kurz eingeschlafen ist) das Eingabefeld nach bestätigen der Meldung "Zahl zu groß" gelöscht wird?

4te und letzte Frage für heute:

@Pelagio
bei Deinem Prg. sieht das Fenster anders aus als bei Dysti. Warum denn nur?

Code: Alles auswählen

 MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)
@Dysti
hab ich da was übersehen? :?:

Code: Alles auswählen

 MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)

DANKE!!!!
Gruß
Kallewirsch

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_loeschen
  #Button_Close
  #String_0
  #String_1
  #String_2
  #String_3
  #String_4
  #STRING_5
  #TString_0
  #TString_1
  #TString_2
  #TString_3
  #TString_4
  #TString_5
  #TString_6
  #TString_7
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1
  #MB_ICONEXCLAMATION

EndEnumeration


#CRLF$ = Chr(13)+Chr(10)

LoadFont(0, "Arial", 20)
LoadFont(1, "Arial", 24)



Procedure ergebnisloeschen()
      ; Achtung hier Ermittlung der richtigen Zifferanzahl
         If (EventType()=#PB_EventType_LostFocus)
            aFeld=EventGadget()
            iFeld$ = GetGadgetText(aFeld)
            If (Len(iFeld$)>0) And (Len(iFeld$)<5)
               MessageRequester("InfoBox", "Zahl zu klein! Mindestens 5 Stellen!") ; #MB_ICONEXCLAMATION)
               SetActiveGadget(aFeld)
            ElseIf (Len(iFeld$)>7)
               MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)
               SetActiveGadget(aFeld)
            EndIf
         Else
            For n=#string_0 To #String_5
               SetGadgetColor(n, #PB_Gadget_BackColor, -1)
            Next n
            SetGadgetColor(GetActiveGadget(), #PB_Gadget_BackColor,$00FFFF)
            SetGadgetText(#STRING_INPUT, "")
            SetGadgetText(#STRING_INPUT_1, "")
         EndIf

      ; wir löschen das Feld
      SetGadgetText(#STRING_INPUT,"")
      ; und setzen die Hintergrundfarbe wieder auf weiß
      SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$FFFFFF)
      SetGadgetText(#STRING_INPUT_1,"")
      SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$FFFFFF)
EndProcedure

  If OpenWindow(#Window_0, 248, 16, 730, 642, "Kallewirsch Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered| #PB_Window_SizeGadget | #PB_Window_TitleBar )
     
      SetWindowColor(#Window_0,$FBE6C5)
      TextGadget(#TString_0, 300, 50, 450, 250, "Danke für " + #CRLF$ + "die Hilfe! " + #CRLF$ + "So ist der Rechner super!!!")
      SetGadgetColor(#TString_0, #PB_Gadget_BackColor,$FBE6C5)
      SetGadgetFont(#TString_0, FontID(0))
      ButtonGadget(#Button_0, 250, 500, 100, 50, "Berechnen")
      ButtonGadget(#Button_loeschen, 425, 500, 100, 50, "Löschen")
      ButtonGadget(#Button_Close, 600, 500, 100, 50, "Schließen")
      TextGadget(#TString_1, 40, 30, 160, 20, "Zahl 1 eingeben")
      SetGadgetColor(#TString_1, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_0, FontID(0))
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")
      SetGadgetColor(#TString_2, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_1, FontID(0))
      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")
      SetGadgetColor(#TString_3, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_2, FontID(0))
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")
      SetGadgetColor(#TString_4, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_3, 40, 320, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_3, FontID(0))
      TextGadget(#TString_6, 40, 390, 160, 20, "Zahl 5 eingeben")
      SetGadgetColor(#TString_6, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_4, 40, 410, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_4, FontID(0))
      TextGadget(#TString_7, 40, 480, 160, 20, "Zahl 6 eingeben")
      SetGadgetColor(#TString_7, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_5, FontID(0))
      TextGadget(#TString_5, 250, 300, 280, 20, "Mittelwert der Eingaben")
      SetGadgetColor(#TString_5, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_Numeric)
      SetGadgetFont(#STRING_INPUT, FontID(1))
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert x100")
      SetGadgetColor(#TString_8, #PB_Gadget_BackColor,$FBE6C5)
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_Numeric)
      Repeat
    iEvent.i = WaitWindowEvent()
    Select iEvent
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Button_0
           SetControl=0
            eingabe1$=GetGadgetText(#String_0)
            eingabe2$=GetGadgetText(#String_1)
            eingabe3$=GetGadgetText(#String_2)
            eingabe4$=GetGadgetText(#String_3)
            eingabe5$=GetGadgetText(#String_4)
            eingabe6$=GetGadgetText(#STRING_5)
            If (eingabe1$<>"")
              ; If Feldpruefung(1,eingabe1$) ; springt nur hier hinein, wenn die Rückgabe 1 ist   
               Teiler + 1
               Mittelwert  = ValD(eingabe1$)
          ;     EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 1 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe2$<>"")
          ;     If Feldpruefung(2,eingabe2$)
               Teiler + 1
               Mittelwert + ValD(eingabe2$)
       ;        EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 2 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe3$<>"")
          ;     If Feldpruefung(3,eingabe3$)
               Teiler + 1
               Mittelwert + ValD(eingabe3$)
        ;       EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 3 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe4$<>"")
         ;      If Feldpruefung(4,eingabe4$)
               Teiler + 1
               Mittelwert + ValD(eingabe4$)
         ;      EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 4 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe5$<>"")
         ;      If Feldpruefung(5,eingabe5$)
               Teiler + 1
               Mittelwert + ValD(eingabe5$)
         ;      EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 5 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe6$<>"")
          ;     If Feldpruefung(6,eingabe6$)
               Teiler + 1
               Mittelwert + ValD(eingabe6$)
         ;      EndIf
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 6 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If Teiler=6
              SetGadgetText(#STRING_INPUT,StrD(Mittelwert/Teiler))
              a1.d = Mittelwert / Teiler * 100
              Mittel100 = Round(a1, #PB_Round_Up)       
              SetGadgetText(#STRING_INPUT_1,Str(Mittel100))
              SetGadgetColor(#STRING_INPUT_1, #PB_Gadget_BackColor,$00FFFF)   
           
            Else
           
            MessageRequester("Fehler","Es müssen alle Felder korrekt ausgefüllt werden!")
            EndIf
           
           
            Teiler=0 
           
           Case #Button_loeschen
           
                SetGadgetText(#String_0,"")
                SetGadgetText(#String_1,"")
                SetGadgetText(#String_2,"")
                SetGadgetText(#String_3,"")
                SetGadgetText(#String_4,"")
                SetGadgetText(#STRING_5,"")       
           
                ergebnisloeschen()
               
           Case #String_0
                ergebnisloeschen()
           Case #String_1
                ergebnisloeschen()
           Case #String_2
                ergebnisloeschen()
           Case #String_3
                ergebnisloeschen()
           Case #String_4
                ergebnisloeschen()
           Case #STRING_5
                ergebnisloeschen()
             
           Case #STRING_INPUT
                SetGadgetColor(#STRING_INPUT, #PB_Gadget_BackColor,$00FFFF)
           
           Case #BUTTON_CLOSE
                Quit = #True 
                     
        EndSelect
     EndSelect                     
   
         
   Until iEvent = #PB_Event_CloseWindow Or Quit = #True
 
EndIf


End 
PureBasic 5.00 (Windows - x86)
Antworten