Ergebnis anzeigen Teil 2

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Ergebnis anzeigen Teil 2

Beitrag von HeX0R »

Kaeru Gaman hat geschrieben:was eigentlich irgendwie Schwachsinn ist, wieso akzeptiert #PB_String_Numeric keine Kommata? :?: :?
Da musst du dich bei Microsoft beschweren, dort heisst das Flag ES_NUMBER.

Ich hatte mal ein FloatGadget gepostet, es aber wegen Desinteresse wieder gelöscht.
(Eigentlich nicht meine Art, keine Ahnung was da los war... gibt es einen Zickenvirus?)

@Kiffi:
So einen ähnlichen Beitrag hatte ich auch schonmal verfasst, ihn aber wieder verworfen,
weil ich denke sowas reguliert sich von selbst.

...und wenn nicht, kann es uns auch wurscht sein, es lebe die Ignore-Funktion.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen Teil 2

Beitrag von dysti »

Hallo erstmal,
bevor wir vom Thema abschweifen möchte ich folgendes mal dazu äußern:

Wenn ich mir die Zeiten mal anschaue, die Kallewirsch gepostet hat, kann da nicht viel herum kommen.
Ich denke, auf irgendeinen Weg hat er Infos zu Purebasic bekommen und wie einfach es wohl mit Purebasic geht.

Am Anfang hatte er Ferien oder Urlaub und hat sich erstmal mit der IDE und den Designer vertraut gemacht.
Auf diesem Anfangsweg haben ihn @STARGÅTE und @Little John geholfen.

Zu diesem Zeitpunkt hatte @Little John ihn schon darauf hingewiesen:
Am besten gewöhnt Du Dir gleich von Anfang an einen guten Programmierstil an
Die Beiden verwendeten in ihren Beispielcodes "ValF(Wert$)".
Später brachte @hjbremer diesen Befehl in einem Beispielcode: "summe + ValD(ipr$)"
Ab da schleppte er diesen Befehl durchgängig mit, trotzdem ihn @Kaeru Gaman hier darauf hin gewiesen hat: "schau dir mal ValF() bzw. ValD() an".

Mitte Februar warst dann wohl mit der Freizeit. Da wird in der Woche nur noch spät gepostet.
Offentsichtlich blieb ihm nicht mehr viel Zeit zum Hobby, demzufolge sind die Lernschritte natürlich sehr klein.
Spät am Abend fördert natürlich, weil man da ja besonders gut aufnimmt, wo andere um diese Zeit ins Bett gehen.
Genau das spiegelt sich auch in den Beiträgen wider.

Da hat man natürlich nicht mehr viel Lust zum Lesen und möchte schnelle Ergebnisse haben.
Seiten wie diese: "http://www.purearea.net/pb/german/tutorials.htm" hat er wohl nicht gefunden oder konnte mit den Inhalten und der PB-Hilfe nichts anfangen.
Auch muß man verstehen, wenn man sich autark etwas eintrichtert und eine Schwierigkeit auftaucht, wo soll ich nachlesen?
Wenn man dann was gefunden hat, ist die Erklärung eher für ein Anfänger zu kompliziert, weil ja Grundlagen fehlen.

Daher auch diese Reaktion : "Hab ich gelesen....aber so super informativ ist das für nen Neuling nicht. "

Deshalb haben wir ihn hier ja auch mit jeweils lauffähigen Code versorgt.

Schwierig wird natürlich für einen Anfänger, vorgesetzten Code zu durchschauen. Man probiert und stellt einen Fehler fest.
Man versucht, diesen habhaft zu werden. Aber wie heißt es so schön: "Vor lauter Bäume sieht man nicht den Wald"
Da denkt man nicht mehr real. Man hat das Problem und konzentriert sich zu stark auf das Ergebnis und nicht wo es herkommt bzw. verursacht wird.

Dann genau zu diesem Zeitpunkt kommt sowas: "warum wird bei Berechnung x100 gerundet und bei Berechnung x1000 nicht?"

Die Reaktion darauf von @Kaeru Gaman kann ich verstehen, aber für einen Anfänger ist es natürlich keine so blöde "völlig losgelösten Frage", sondern ein Problem.

Was lernt man in einer pädagogischen Grundausbildung-> "Blöde Fragen gibt es nicht"
Ich denke, wir versuchen alle diesen Grundsatz hier einzuhalten und die Antwort von @Kaeru Gaman war nur eine falsche Wortwahl.

Diese Reaktion von Kallewirsch:
"Bestimmt nicht...es dauert nur solange weil ich auch noch meinem Job nachgehen muß
.....hätte ich soviel Zeit wie Du könnte ich auch immer solche sinnlose Bemerkungen loswerden.
Außerdem Suche ich selbst nach den Fehlern die in einem Code stecken und warte nicht bis mir jemand die Lösung zusteckt."

...ist nur eine Reaktion der sehr "frühen" Tageszeit. Da würde sicherlich bei mir auch sowas kommen.

Man sollte vielleicht ein Grundsatz beherzigen: "Bevor ich mich beschwere, lasse 24 Stunden vergehen."
Dann sieht die Welt meistens danach anders aus.


Die Frage nach sinnvollen Code stellt sich nicht für einen Anfänger. Ein Anfänger überlegt sich, womit er anfangen kann.
Aus welchen Gründen @Kallewirsch nun ausgerechnet einen Mittelwert berechnen will, erschließt sich uns nicht.
Vielleicht hatte er gerade seinen Taschenrechner vor Augen und wollte wissen, wie diese Funktion sich mit Purebasic lösen läßt.
Es kann aber auch sein, das er OpenOffice Calc mal geöffnet hatte und dort die Funktion bemerkt hat.
Wie dem auch sei. Er hat eine Aufgabe gesucht und gefunden, auch wenn es denn nun eine Mittelwertberechnung sein soll.
Irgendwie muß man ja nun mal anfangen und sich eine Aufgabe stellen.
Also hat er angefangen.


Willkommen im Purebasic-Forum Kallewirsch :allright:

PS: Ich hoffe, ich habe hier jetzt keinen auf den Fuß getreten. :oops: Da war und ist nicht meine Absicht. Bitte nur auf geseitiges Verständnis. :praise:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen Teil 2

Beitrag von Kallewirsch »

Hallo an alle,

erst mal Entschuldigung für meine Stellungnahme....also angreifen will ich bestimmt keinen.

Es darf auch jeder seinen Kommentar hinterlassen.....jeder der dieses Thema liest und für blöd befindet darf mich auch auf die Ignore Liste setzen.

(Danke an Dysti....zumindest einer der schreibt und die Lage versteht)

So nun noch mal ausdrücklich.....der Code unten ist nur ein Testprogramm..... in diesem könnt ihr mir eure Versionen zeigen........also kann der auch mal durcheinander und wild aussehen.

Ich bin stets bemüht meine ideen(Versuche) selbst umzusetzen.....manchmal brauche ich dafür aber eure Hilfe....für viele werden meine Fragen sicher dumm sein, hoffe aber trotzdem auf weitere Unterstützung.

Nun ja, damit die "dumme" Fragerei nicht endet (Kaeru darf natürlich auch mitmachen)

Hab ne neue Frage:
Wie füge ich eine Meldung ein, die nach drücken von Button "Berechnen" z.B. Mittelwert x 10 wird berechnet oder Mittelwert x 100 wird berechnet, anzeigt.
Die Meldung soll dann nach 2Sekunden (Delay 2000) verschwinden und das Ergebnis angezeigt werden.

Viele Grüße an alle
Kallewirsch

Code: Alles auswählen

EnableExplicit

Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_loeschen
  #Button_Close
  #Button_drucken
  #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
  #Option_1
  #Option_2
  #STRING_INPUT
  #STRING_INPUT_1
  #STRING_INPUT_2
EndEnumeration

#MB_ICONEXCLAMATION = 48

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

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



Procedure ergebnisloeschen()
  ; Achtung hier Ermittlung der richtigen Zifferanzahl
  Protected aFeld, iFeld$, n
  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, "Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_TitleBar )

  SetWindowColor(#Window_0, $FFFFFF)
  ; 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")

  ButtonGadget(#Button_drucken, 250, 580, 100, 50, "Drucken")

  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))
  ; Achtung: Änderung
  OptionGadget(#Option_1, 250, 380, 100, 20, "Mittelwert x10")
  OptionGadget(#Option_2, 350, 380, 100, 20, "Mittelwert x100")
  ; END Änderung

  SetGadgetState(#Option_1, #True)
  ;  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)

  TextGadget(#STRING_INPUT_2, 250, 150, 130, 100, "", #PB_Text_Border)
  ;  StringGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_String_ReadOnly)
  ;   SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$FFFFFF)
  SetGadgetFont(#STRING_INPUT_2, FontID(0))


  Define iEvent.i, SetControl, Teiler, Mittelwert, a1.d, Mittel100, Quit
  Define eingabe1$, eingabe2$, eingabe3$, eingabe4$, eingabe5$, eingabe6$
 
  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  = Val(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 + Val(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 + Val(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 + Val(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 + Val(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 + Val(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))

              ; Achtung: Änderung
              If GetGadgetState(#Option_1)
                a1.d = Mittelwert / Teiler * 10
              Else
                a1.d = Mittelwert / Teiler * 100
              EndIf
              ; END Änderung

              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

PureBasic 5.00 (Windows - x86)
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 Teil 2

Beitrag von ts-soft »

Das mit dem Delay 2000 ist keine kluge Idee.
1. Delay hat in einer GUI Anwendung nichts zu suchen. Jedenfalls nicht im Hauptthread.
2. Die Berechnung dauert einen so minimalen Bruchteil der Zeit, die der User warten soll,
der fühlt sich mit Sicherheit verarscht :twisted:
3. In der langen Zeit von 2 Sekunden kann der User sehr viele Aktionen ausführen, deren
Events nicht bearbeitet werden können, so das die Meldung: Anwendung reagiert nicht,
am oberen Rand des Fensters erscheint.

Bevor wir also mit Threads anfangen, für sinnlose Vorhaben, lass es lieber sein :wink:
führt zu weit.

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

Re: Ergebnis anzeigen Teil 2

Beitrag von dysti »

Hallo @Kallewisch,
da du ja eine Demo hast und Delay() nicht benutzt werden sollte.
Desweiteren habe ich deine Frage zum Drucken auch gelöst.
Hier meine Lösung:

Code: Alles auswählen

EnableExplicit

Enumeration
  #Window_0
  #Window_1
  #Window_2
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Button_0
  #Button_loeschen
  #Button_Close
  #Button_drucken
  #Button_vorschau
  #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
  #Option_1
  #Option_2
  #STRING_INPUT
  #STRING_INPUT_1
  #STRING_INPUT_2
  #Druck_1
  #Image_Bild
  #Image_0
EndEnumeration

#MB_ICONEXCLAMATION = 48

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

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


Procedure Drucken(dText$)
  Protected mText$

  If GetGadgetState(#Option_1)
      mText$="Ergebnis ist Mittelwert * 10 :"
     Else
      mText$="Ergebnis ist Mittelwert * 100 :"
  EndIf
 
  If PrintRequester()
    If StartPrinting("Kallewisch")
      LoadFont(1, "Arial", 100)
      If StartDrawing(PrinterOutput())
        DrawingFont(FontID(1))
        DrawText(100, 100, mtext$)
        DrawText(100, 400, dtext$)
        StopDrawing()
      EndIf
      StopPrinting()
    Else
    MessageRequester("Error", "Kann nicht drucken!", 0)
    EndIf
EndIf
 

EndProcedure

Procedure Vorschau(dText$)
  Protected mText$

  If GetGadgetState(#Option_1)
      mText$="Ergebnis ist Mittelwert * 10 :"
     Else
      mText$="Ergebnis ist Mittelwert * 100 :"
  EndIf
 
  If OpenWindow(#Window_2, 0, 0, 520, 660, "Druckvorschau", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ButtonGadget(#Druck_1, 470, 630, 45, 20, "Quit")

    CreateImage(#Image_0, 520, 620)
    LoadFont(1, "Arial"  ,  12) ; Der gewünschte Font wird geladen
    
   If StartDrawing(ImageOutput(#Image_0))
        Box(0, 0, 520, 620, $FFFFFF)
        DrawingFont(FontID(1))
        DrawText(100,50,mtext$,RGB(0, 0, 0),RGB(255, 255, 255))
        DrawText(100,100, dText$,RGB(0, 0, 0),RGB(255, 255, 255))
        Line(0, 619, 619, 1, RGB(0,0,0))
        StopDrawing()
      EndIf
      ImageGadget(#Image_Bild,0,0,520,620,ImageID(#Image_0))
    Else
      MessageRequester("Error", "Kann Fenster nicht öffnen!", 0)
      End
    EndIf

EndProcedure

Procedure Message(text$)
      Protected StartTime , ElapsedTime
      OpenWindow(#Window_1,#PB_Ignore ,#PB_Ignore ,300,200,"", #PB_Window_BorderLess | #WS_THICKFRAME|#PB_Window_ScreenCentered)
      TextGadget( #TString_8, 10,  WindowHeight(#Window_1)/2.5, 250, 20, text$, #PB_Text_Center )
      StartTime = ElapsedMilliseconds()
      Repeat
      ElapsedTime = ElapsedMilliseconds()-StartTime
      Until ElapsedTime > 2000
      CloseWindow(#Window_1)
     
EndProcedure

Procedure ergebnisloeschen()
  ; Achtung hier Ermittlung der richtigen Zifferanzahl
  Protected aFeld, iFeld$, n
  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, "Mittelwertrechner",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_TitleBar )

  SetWindowColor(#Window_0, $FFFFFF)
  ; 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")

  ButtonGadget(#Button_drucken, 250, 580, 100, 50, "Drucken")
  ButtonGadget(#Button_vorschau, 425, 580, 100, 50, "Vorschau")

  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))
  ; Achtung: Änderung
  OptionGadget(#Option_1, 250, 380, 100, 20, "Mittelwert x10")
  OptionGadget(#Option_2, 350, 380, 100, 20, "Mittelwert x100")
  ; END Änderung

  SetGadgetState(#Option_1, #True)
  ;  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)

  TextGadget(#STRING_INPUT_2, 250, 150, 130, 100, "", #PB_Text_Border)
  ;  StringGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_String_ReadOnly)
  ;   SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$FFFFFF)
  SetGadgetFont(#STRING_INPUT_2, FontID(0))


  Define iEvent.i, SetControl, Teiler, Mittelwert, a1.d, Mittel100, Quit,mText$,wEvent,gEvent
  Define eingabe1$, eingabe2$, eingabe3$, eingabe4$, eingabe5$, eingabe6$

  Repeat
    iEvent.i = WaitWindowEvent()
    wEvent   = EventWindow()
    gEvent   = EventGadget()
   
    Select wEvent
   
      Case #Window_0
   
    Select iEvent
      Case #PB_Event_Gadget
        Select gEvent
          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  = Val(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 + Val(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 + Val(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 + Val(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 + Val(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 + Val(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))

              ; Achtung: Änderung
              If GetGadgetState(#Option_1)
                a1.d = Mittelwert / Teiler * 10
                Message("Mittelwert x 10 wird berechnet")
              Else
                a1.d = Mittelwert / Teiler * 100
                Message("Mittelwert x 100 wird berechnet")
              EndIf
              ; END Änderung
             
              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_drucken
            Drucken(Str(Mittel100))
           
          Case #Button_vorschau
            Vorschau(Str(Mittel100))

          Case #BUTTON_CLOSE
            Quit = #True

        EndSelect
    EndSelect
   
   
        Case #Window_2
          Select iEvent
            Case #PB_Event_Gadget
              Select gEvent
                Case #Druck_1
                CloseWindow(#Window_2)
              EndSelect
          EndSelect
         
    EndSelect

  Until iEvent = #PB_Event_CloseWindow Or Quit = #True

EndIf
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Kallewirsch
Beiträge: 49
Registriert: 11.01.2010 01:22

Re: Ergebnis anzeigen Teil 2

Beitrag von Kallewirsch »

Hallo zusammen,

hi Dysti....wieder mal Danke für das Beispiel......puuh.....muss mich nun erst mal wieder mit dem Code beschäftigen und verstehen lernen. Das mit dem Fenster (und nach 2Sekunden weg) hab ich genau so gemeint :allright: Soll ja nur ne schnelle Info gedacht sein.

Aber noch ne Frage zum Drucken.....kann man auch einfach nur die Darstellung, wie auf dem Bildschirm, ausdrucken (Print Screen) ?

Meine Demo-Version versteht wieder mal etwas nicht:
#WS_THICKFRAME
(Ich glaube das ich demnächst die Software kaufe)

Gruß
Kallewirsch
PureBasic 5.00 (Windows - x86)
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Ergebnis anzeigen Teil 2

Beitrag von dysti »

Hallo Kallewirsch,
Meine Demo-Version versteht wieder mal etwas nicht:
Mist, versehentlich die falsche PB-Version gestartet :oops:

und damit sind wir bei dem nächsten Problem:
..kann man auch einfach nur die Darstellung, wie auf dem Bildschirm, ausdrucken (Print Screen) ?
Antwort: Ja, aber nicht mit der Demo :cry:

Es sei denn, unsere Spezialisten hier im Forum haben eine andere Idee als mit API-Befehlen. :allright:
Könnte mir vorstellen, das evtl. die Spieleprogrammierer da Ideen haben.
Ich arbeite mehr mit Datenbankanwendungen.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten