Eingaben begrenzen

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: Eingaben begrenzen

Beitrag von ts-soft »

Ich weiß nicht was es an prototypes nicht zu verstehen gibt :freak:
CallFunction usw. sollten seit PB 4.0 durch Prototypes ersetzt werden und
sind nur aus Kompatibilitätsgründen vorhanden. Ein Neuling sollte von den
alten CallFunction-Zeugs erst garnichts erfahren :mrgreen:
Callfunction funktioniert auch nur mit Integer sicher, selbst in VB werden
DLL-Funktionen so ähnlich deklariert.

Du meinst es bestimmt gut, aber es kommt in etwa dem Gleich, als wenn Du
Ihn auf Gosub Return anstatt von Proceduren hinweist :wink:

Wenn ein paar User sich einfach nicht mehr umstellen wollen, sollte dies doch
auf Neulinge nicht zutreffen.

Alte Rechtschreibung wird an Schulen im allg. auch nicht mehr gelehrt.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Eingaben begrenzen

Beitrag von dysti »

Hey Kallewirsch,

hier habe ich mal alles eingebunden. Die Änderungen habe ich kenntlich gemacht.

Code: Alles auswählen

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
  #TString_8
  #STRING_INPUT
  #STRING_INPUT_1
  #STRING_INPUT_2
  ;#MB_ICONEXCLAMATION

EndEnumeration

#MB_ICONEXCLAMATION = 48


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


; Änderung Anfang ----------------------------------------
Prototype InitMessages(hwnd, flags)

Global InitMessages.InitMessages

Procedure InitNEdit()
  Protected dll = OpenLibrary(#PB_Any, "NEdit.dll")
  If dll
    InitMessages = GetFunction(dll, "InitMessages")
    If InitMessages
      ProcedureReturn #True
    EndIf
  EndIf
EndProcedure
; Änderung Ende ------------------------------------------

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



Procedure ergebnisloeschen()

         If (EventType()=#PB_EventType_LostFocus)
            aFeld=EventGadget()
            
            ; Änderung Anfang ----------------------------------------
            iFeld$ = ReplaceString(GetGadgetText(aFeld),",",".")  ; Komma in Punkt tauschen
            SetGadgetText(aFeld,iFeld$)
            ; Änderung Ende ------------------------------------------
            
            If (Len(iFeld$)>0) And (Len(iFeld$)<2)
               MessageRequester("InfoBox", "Zahl zu klein! Mindestens 2 Stellen!") ; #MB_ICONEXCLAMATION)
               SetActiveGadget(aFeld)
               
            SetGadgetText(#STRING_INPUT_2, ("Eingabe FALSCH!"))
            SetGadgetColor(#STRING_INPUT_2, #PB_Gadget_BackColor,$3300FF)
           
            ElseIf (Len(iFeld$)>4)
               MessageRequester("InfoBox", "Zahl zu groß! Maximal 4 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
 
      SetGadgetText(#STRING_INPUT,"")
      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)

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

      StringGadget(#String_0, 40, 50, 160, 60, "", #PB_String)
      SetGadgetFont(#String_0, FontID(0))
      
      
      TextGadget(#TString_2, 40, 120, 160, 20, "Zahl 2 eingeben")

      StringGadget(#String_1, 40, 140, 160, 60, "", #PB_String)
      SetGadgetFont(#String_1, FontID(0))
      TextGadget(#TString_3, 40, 210, 160, 20, "Zahl 3 eingeben")

      StringGadget(#String_2, 40, 230, 160, 60, "", #PB_String)
      SetGadgetFont(#String_2, FontID(0))
      TextGadget(#TString_4, 40, 300, 160, 20, "Zahl 4 eingeben")

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

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

      StringGadget(#String_5, 40, 500, 160, 60, "", #PB_String_Numeric)
      SetGadgetFont(#String_5, FontID(0))
      TextGadget(#TString_5, 250, 300, 280, 20, "Mittelwert.d der Eingaben")

      StringGadget(#STRING_INPUT, 250, 320, 450, 50,"", #PB_String_Numeric)
      SetGadgetFont(#STRING_INPUT, FontID(1))
      TextGadget(#TString_8, 250, 380, 280, 20, "Mittelwert.d x100")
 
      StringGadget(#STRING_INPUT_1, 250, 400, 450, 50,"", #PB_String_Numeric)
     
      TextGadget(#STRING_INPUT_2, 250, 150, 130, 100,"", #PB_Text_Border)
      SetGadgetFont(#STRING_INPUT_2, FontID(0))
       
      
      ; Änderung Anfang ----------------------------------------
      If InitNEdit()
      For n=#string_0 To #String_5
          InitMessages(GadgetID(n), 5)
          SetActiveGadget(n)
      Next n
          SetActiveGadget(#Button_0)
      EndIf
      ; Änderumg Ende ------------------------------------------
      
      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$<>"")
               SetGadgetText(#String_0,"") 
            EndIf
           
            If (eingabe1$<>"")
               Teiler + 1
               Mittelwert.d  = ValD(eingabe1$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 1 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe2$<>"")
               Teiler + 1
               Mittelwert.d + ValD(eingabe2$)
            Else
            If SetControl=0
            MessageRequester("Eingabefehler","Feld 2 muß ausgefüllt werden!")
            SetControl=1
            EndIf
            EndIf
           
            If (eingabe3$<>"")
               Teiler + 1
               Mittelwert.d + 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.d/Teiler))
              a1.d = Mittelwert.d / 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 

@ts-soft, uuuiihhh, da hatte ich im Eifer des Gefechts ja ganz was vergessen. :oops:
CallFunction usw. sollten seit PB 4.0 durch Prototypes ersetzt werden
Hast ja recht. :allright:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Eingaben begrenzen

Beitrag von dysti »

Hallo Kallewirsch,
evtl. hast du hiermit Probleme:

Code: Alles auswählen

OpenLibrary(#PB_Any, "NEdit.dll")
Bisher hatten wir ja noch keine DLL eingebunden.

Achte auf folgendes: wenn die DLL im Verzeichnis "C:\nedit" wäre, dann müßte der Aufruf so lauten:

Code: Alles auswählen

OpenLibrary(#PB_Any, "C:\nedit\NEdit.dll")
Um auch visuell darzustellen, ob die DLL korrekt geladen wurde, mache folgendes:

Code: Alles auswählen

If dll
Debug "DLL wurde geladen"
Wenn der Debugger sich meldet, dann ist alles ok.

Das noch so am Rande :freak:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Eingaben begrenzen

Beitrag von rolaf »

dysti hat geschrieben:Um auch visuell darzustellen, ob die DLL korrekt geladen wurde, mache folgendes:

Code: Alles auswählen

If dll
Debug "DLL wurde geladen"
Wenn der Debugger sich meldet, dann ist alles ok.
Da meldet sich garantiert nur PB, weil ihm ein Endif fehlt. :mrgreen:

Zudem wäre es ohnehin sinnvoll die dll ins Programmverzeichnis oder ins Systemverzeichnis zu legen.
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: Eingaben begrenzen

Beitrag von dysti »

.......
Da meldet sich garantiert nur PB, weil ihm ein Endif fehlt.
Sicherlich weiß Kallewirsch, wo er die - eine - Programmzeile einfügen soll.

und die diesen Thread verfolgt haben auch. :freak:

Aber Spaß beiseite, ich hätte deutlich schreiben müssen, das nur eine Zeile eingefügt sollte und mehr Code darstellen sollen.
An falscher Stelle gespart.
Zudem wäre es ohnehin sinnvoll die dll ins Programmverzeichnis oder ins Systemverzeichnis zu legen.
Sicherlich stimme ich da mit dir überein :allright: , aber wissen wir, wohin Kallewirsch die Zip-Datei extrahiert hat? :bounce:
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: Eingaben begrenzen

Beitrag von rolaf »

dysti hat geschrieben:... ,aber wissen wir, wohin Kallewirsch die Zip-Datei extrahiert hat?
Nun, was wissen wir überhaupt über Kallewirsch?
Isst er gerne Müsli, trägt er rote Socken, hat er Schweissfüsse? Fragen über Fragen :lol:

Nun, ein Hinweis das die dll ins Programmverzeichnis gehört wäre sicher einfacher gewesen. :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Antworten