Aktuelle Zeit: 24.11.2020 19:22

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 18:57 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Hallo,

ich möchte mit StringGadget Kommazahl einlesen.
Im CodeArchiv/Gadgets/StringGadget/ habe ich StringGadget_Numeric.pb gefunden.
Gibt es so was für Kommazahlen (einlesen von z.B. 0,99 oder 123 oder 123,9) ?

Danke und Gruß
MarceX

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 19:20 
Offline
Admin

Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
viewtopic.php?p=191069#p191069

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 19:21 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Der Code im CodeArchiv hat eher nichts mit Deiner Frage zu tun, jedenfalls sehe ich da den Zusammenhang nicht.

Hier ein Beispiel (Windows-Only), das nur die Zahlen, sowie das Komma akzeptieren.
Achtung: Das Komma wird auch mehrfach akzeptiert. Wenn das nicht gewünscht ist, sind noch
Erweiterungen notwendig.

Code:
EnableExplicit

Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
  Protected oldproc = GetProp_(hWnd, "oldproc")
 
  Select uMsg
    Case #WM_NCDESTROY
      RemoveProp_(hWnd, "oldproc")
    Case #WM_CHAR
      Select wParam
        Case 48 To 57, 44 ; 0 - 9, komma
        Default
          ProcedureReturn 0 ; kein gültiges Zeichen
      EndSelect
  EndSelect
 
  ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure

Procedure SubClassStringGadget(ID)
  Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
  ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver


Gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 19:47 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
Danke RSBasic und ts-soft

damit kann ich schon was anfangen

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 19:56 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Hab mal so erweitert, das Backspace funktioniert und das Komma nur einmal eingegeben werden kann:
Code:
EnableExplicit

Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
  Protected oldproc = GetProp_(hWnd, "oldproc")
 
  Select uMsg
    Case #WM_NCDESTROY
      RemoveProp_(hWnd, "oldproc")
    Case #WM_CHAR
      Select wParam
        Case '0' To '9', #VK_BACK
        Case ','
          If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), ",")
            ProcedureReturn 0
          EndIf
        Default
          ProcedureReturn 0 ; kein gültiges Zeichen
      EndSelect
  EndSelect
 
  ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure

Procedure SubClassStringGadget(ID)
  Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
  ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver

Ich hoffe, ich habe nicht noch mehr übersehen :)

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 20:11 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
So funktioniert es.

Was ich haben wollte, ist die Eingabe wie z.B. -123 (negative Werte) 123,56 (positive Werte mit maximale 2 Stellen nach den Komma)

Mit diese Basis kann ich (denke ich) was anfangen.

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 20:20 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Naja, bin mir nicht so sicher ob Du das packst und wenn ich gerade bei bin :wink:
Code:
EnableExplicit

Procedure cbStringGadget(hWnd, uMsg, wParam, lParam)
  Protected oldproc = GetProp_(hWnd, "oldproc")
 
  Select uMsg
    Case #WM_NCDESTROY
      RemoveProp_(hWnd, "oldproc")
    Case #WM_CHAR
      Select wParam
        Case '0' To '9', #VK_BACK
        Case '-'
          If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), "-")
            ProcedureReturn 0
          EndIf
          SetGadgetText(GetProp_(hWnd, "PB_ID"), "-" +   GetGadgetText(GetProp_(hWnd, "PB_ID")))
          ProcedureReturn 0 
        Case ','
          If CountString(GetGadgetText(GetProp_(hWnd, "PB_ID")), ",")
            ProcedureReturn 0
          EndIf
        Default
          ProcedureReturn 0 ; kein gültiges Zeichen
      EndSelect
  EndSelect
 
  ProcedureReturn CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndProcedure

Procedure SubClassStringGadget(ID)
  Protected oldproc = SetWindowLongPtr_(GadgetID(ID), #GWL_WNDPROC, @cbStringGadget())
  ProcedureReturn SetProp_(GadgetID(ID), "oldproc", oldproc)
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")
SubClassStringGadget(0)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
ForEver

Es kann nur einmal minus eingefügt werde und dieses wird auch gleich an den Anfang gerückt.

Man könnte auch auf Len(...) = 0 prüfen und nur dann das - zulassen. Ist vielleicht etwas irritierend,
wenn ein Minus an den Anfang rückt :mrgreen:

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 20:39 
Offline
-= Anfänger =-
Benutzeravatar

Registriert: 29.08.2004 03:07
Oder mit regulären Ausdrücken prüfen:
Code:
;
; by Danilo
;
; http://www.purebasic.fr/german/viewtopic.php?f=16&t=26388&start=7
;
; Nummern-Eingabe Beispiele: 123  567,88  -12  -4,5
;
OpenWindow(0, #PB_Ignore, #PB_Ignore, 250, 80, "")
StringGadget(0, 10, 10, 200, 20, "")

CreateRegularExpression(0,"^\-{0,1}\d*$|^\-{0,1}\d+\,\d{0,2}$|^$") ; ^       = Anfang des Strings
                                                                   ; $       = Ende des Strings
                                                                   ; \d      = Dezimalzahl 0-9
                                                                   ; +       = 1 oder mehr Vorkommen
                                                                   ; *       = 0 oder mehr Vorkommen
                                                                   ; |       = alternative Moeglichkeit (Or in PureBasic)
                                                                   ; \,      = Komma
                                                                   ; \-{0,1} = Minus{0 oder 1 mal}
                                                                   ; \d{0,2} = Dezimalzahl 0-9 { 0 bis 2 mal }
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
      If EventGadget() = 0 And EventType() = #PB_EventType_Change
        txt$ = GetGadgetText(0)
        If MatchRegularExpression(0,txt$)=0                           ; wenn kein Treffer, dann wieder vorherigen text setzen
          SendMessage_(GadgetID(0),#EM_GETSEL,0,@endpos) : endpos - 1 ; cursor position holen
          SetGadgetText(0,old$)                                       ; alten text wieder setzen
          SendMessage_(GadgetID(0),#EM_SETSEL,endpos,endpos)          ; cursor position wieder setzen
        Else
          old$ = txt$
        EndIf
      EndIf
  EndSelect
ForEver

_________________
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 21:00 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
@Danilo
:allright: , aber ich bekomme beim entwerfen des Ausdrucks immer einen Wurm im Kopf :lol:

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Mit StringGadget Kommazahl einlesen
BeitragVerfasst: 10.02.2013 22:18 
Offline
Benutzeravatar

Registriert: 19.02.2010 20:19
Wohnort: Darmstadt
@Danilo

deine Lösung mit RegularExpression finde ich super und es funktioniert

_________________
Win-10, PB 5.31 (Windows - x86)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 40 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye