Ergebnis anzeigen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Ergebnis anzeigen?

Beitrag von ts-soft »

Kallewirsch hat geschrieben: 1.) Wo steht in der Hilfe etwas über die Konstante : #MB_ICONEXCLAMATION
Das steht gar nicht in der PB-Hilfe, da es eine spezielle Windows-API Konstante ist.
PureBasic unterstützt zwar die API der jeweiligen Betriebssysteme, aber deren Hilfe ist
separat einzusehen. Die Windows-API Hilfe, MSDN ist ja viel größer als PureBasic selbst <) .
Der MessageRequester entspricht in der API der MessageBox Funktion und unterstützt auch
entsprechende Konstanten. Info gibts hier: http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Das brauchste anfangs aber alles nicht, ignore diese Konstante am besten erstmal.

Gruß
Thomas
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen?

Beitrag von dysti »

Hallo Kallewirsch,
1.) Wo steht in der Hilfe etwas über die Konstante : #MB_ICONEXCLAMATION
siehe in der PB-Hilfe zu MessageRequester(), dann ganz nach unten scrollen und hier clicken .......Funktion MessageBox.
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?
Das ist anders in der Demoversion nicht zu realisieren. Hier die Erklärung dazu:
Wenn du auf den Button "Löschen" klickst, wird ein Event/Ereignis ausgelöst.
Nun sollte man meinen, der Event des Löschenbutton wurde sofort übergeben. Dem ist aber nicht so.
Bevor das Fenster auf das Löschen-Button-Ereignis reagieren kann, muß ja vorher z.B. das Feld #String_0 seinen Fokus verlieren, also inaktiv werden. Aber genau das wird ja mit "#PB_EventType_LostFocus" abgefragt und unsere Eventabfrage reagiert sofort darauf. Somit befinden wir uns in eine Schleife, bis eine korrekte Eingabe erfolgt ist.
Erst danach kann der Event der Löschen-Taste verarbeitet werden.
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?
Diese Antwort solltest du zu diesem Zeitpunkt an sich schon selber lösen können:
Das Feld wird ja mit SetGadgetText(Gadget,"") gelöscht.
Die Frage ist ja nur, wo die Zeile eingefügt werden muß?
Das kann ja nur dann erfolgen, wenn du den MessageRequester() mit OK bestätigt hast.
Nun, das geschieht ja in der Procedure ergebnisloeschen() nach dem ElseIf.
Genau da unter setzt du diese Zeile:

Code: Alles auswählen

SetGadgetText(aFeld,"")
Damit ist dein Wunsch in Erfüllung gegangen, das Feld wird gelöscht.
4.) @Pelagio : bei Deinem Prg. sieht das Fenster anders aus als bei Dysti. Warum denn nur?
Da verstehe ich nicht???????? Wie meinst du das?
Der einzige Unterschied ist der Löschen-Button in der Mitte zwischen Berechnen und Schließen, den ich hinzugefügt habe.
Das Dialogfenster MessageRequester() erscheint auf meinem Rechner in Art und Form gleich.
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,
Da verstehe ich nicht???????? Wie meinst du das?
Der einzige Unterschied ist der Löschen-Button in der Mitte zwischen Berechnen und Schließen, den ich hinzugefügt habe.
Das Dialogfenster MessageRequester() erscheint auf meinem Rechner in Art und Form gleich.
Genau den Löschen Button meine ich......es sind doch beide Meldungen gleich
MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!", #MB_ICONEXCLAMATION)
:?: :?: :?:

Diese Antwort solltest du zu diesem Zeitpunkt an sich schon selber lösen können:
Hab ich selber gelöst......Geht halt noch etwas länger bis der Groschen fällt :mrgreen:

Neue Fragerei:

Kann man den Text in dem neu hinzu gefügten Feld in zwei Reihen darstellen? ich kriegs nicht hin.


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
  #STRING_INPUT_2
  #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)
               
            SetGadgetText(#STRING_INPUT_2, ("Eingabe FALSCH!"))
            SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$3300FF) 
            
            ElseIf (Len(iFeld$)>7)
               MessageRequester("InfoBox", "Zahl zu groß! Maximal 7 Stellen!",  #MB_ICONEXCLAMATION)
               SetGadgetText(aFeld,"")
               SetActiveGadget(aFeld)
               
            SetGadgetText(#STRING_INPUT_2, ("Eingabe FALSCH!"))
            SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$3300FF) 
            
            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)
      
      
       StringGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_String_ReadOnly)   ;tseite)
       SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$FFFFFF) 
       SetGadgetFont(#STRING_INPUT_2, FontID(0))  
       
       
      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)   
           
            SetGadgetText(#STRING_INPUT_2, ("Eingabe in Ordnung"))
            SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$00FF00) 
            
            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,"") 
                
                SetGadgetText(#STRING_INPUT_2,"")
                SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$FFFFFF)       
           

                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)
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 »

Guten Morgen,
Kallewirsch hat geschrieben:Kann man den Text in dem neu hinzu angefügten Feld in zwei Reihen darstellen?
Mit einem StringGadget ist dies nicht ohne weiteres möglich aber da Du in diesem Feld nur anzeigst, kannst du auch ein TextGadget nehmen.

Code: Alles auswählen

TextGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_Text_Border)
;statt StringGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_Sting_ReadOnly )
:allright:
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 »

Code: Alles auswählen

StringGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #ES_MULTILINE|#ESB_DISABLE_LEFT|#ESB_DISABLE_RIGHT|#PB_String_ReadOnly) 
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 Pelagio, hi Dysti,

erstmal wieder ein großes DANKE für eure Hilfe (auf euch beide ist wirklich verlass! :allright: )

Habe Dank der Hilfe von euch einiges gelernt (wäre bestimmt ohne euch nicht so "weit" gekommen).

Werde mich nun mal einem neuen "Projekt" widmen. Mal schauen ob ich dem Prg. auch einen "Drucken-Button" einbauen kann.

Also......die nächsten Fragen sind bestimmt in meinem nächsten Thema "Blöder Drucker druckt nicht" (oder so ähnlich) zu lesen.

Bis demnächst

Gruß
Kallewirsch
PureBasic 5.00 (Windows - x86)
Antworten