Seite 1 von 1

Spinbutton Time Control

Verfasst: Sa, 15. Jun 2019 23:14
von AUGE_OHR
hi,

den DXE_DatePick kann man auch die "Timepicker" benutzten. Er hat aber nur HH:MM:SS und keine Dezimalstellen.

nun wollte ich so was ähnliches machen, also mehrere XbpSpinbutton() mit nur einem o:Master ganz rechts. (s.h. Help File)
ich muss erst in das Spinbutton "Feld" klicken und kann dann die Buttons vom o:Master oder Keyboard nutzen.

die Spinbutton sind mit o:setNumLimits() begrenzt auf HH:MM:SS:DEC
es gibt einen Callback-Slot o:EndSpin den ich nicht (?) belege
dafür nutzen ich o:down / o:up von XbpSpinbutton() und den o:keyboard Slot
Spin_4_time.jpg
Spin_4_time.jpg (8.9 KiB) 3669 mal betrachtet
nun scheint mir mein Code "zu umständlich" zu sein und ich frage mich wie man das besser macht.
hier mal das Beispiel für die Dezimal Stellen (1/1000 Sekunde)

---

Code: Alles auswählen

   DO CASE
      CASE oSpin = ::oB1HH
      CASE oSpin = ::oB1MM
      CASE oSpin = ::oB1SS
      CASE oSpin = ::oB1DEC

         IF Updown = "UP"
            IF nB1DE >= 999
               ::oB1DEC:setdata(0)
               IF nB1SS >= 59
                  ::oB1SS:Setdata(0)
                  IF nB1MM >= 59
                     ::oB1MM:Setdata(0)
                     ::oB1HH:setdata(nB1HH+1)
                  ELSE
                     ::oB1MM:Setdata(nB1MM+1)
                  ENDIF
               ELSE
                  ::oB1SS:Setdata(nB1SS+1)
               ENDIF
            ELSE
*               ::oB1DEC:setdata(nB1DE+1)
            ENDIF

         ELSEIF Updown = "DN"
            IF nB1DE <= 1
               ::oB1DEC:setdata(0)
               IF nB1SS <= 1
                  ::oB1SS:Setdata(0)
                  IF nB1MM <= 1
                     ::oB1MM:Setdata(0)
                     IF nB1HH <= 1
                        ::oB1HH:setdata(0)
                        ::oB1MM:Setdata(59)
                        ::oB1SS:Setdata(59)
                        ::oB1DEC:setdata(999)
                     ELSE
                        ::oB1HH:setdata(nB1HH-1)
                     ENDIF
                  ELSE
                     ::oB1MM:Setdata(nB1MM-1)
                     ::oB1SS:Setdata(59)
                     ::oB1DEC:setdata(999)
                  ENDIF
               ELSE
                  ::oB1SS:Setdata(nB1SS-1)
                  ::oB1DEC:setdata(999)
               ENDIF
            ELSE
*               ::oB1DEC:setdata(nB1DE-1)
            ENDIF
         ENDIF
   ENDCASE

Re: Spinbutton Time Control

Verfasst: Mo, 17. Jun 2019 8:17
von Tom
Hi, Jimmy.

Nichts für ungut, aber ein Timepicker, der bei der Eingabe mehr Aufwand macht, als die direkte Zahlen-/Zeiteneingabe erfordern würde, ist kein Fortschritt. Ich kombiniere für diesen Fall zwei SLEs, die den Zahlenraum abfangen, jeweils ergänzt um zwei Mini-Buttons (Marlett t/u), die es erlauben, unabhängig voneinander die Werte zu de- und inkrementieren. Man muss also nicht erst in ein Feld klicken, um es verändern zu können. Zahlen können direkt eingegeben werden, und Plus- und Minustaste haben die gleiche Wirkung wie die Minibuttons. Die Klasse trackt außerdem, welcher Nutzer welche Methode verwendet. Mehr als 95 Prozent der Anwender tippen Zeiten direkt ein. Timepicker sind also genau genommen sinnlos (außer auf Smartphones).

Re: Spinbutton Time Control

Verfasst: Mo, 17. Jun 2019 10:55
von AUGE_OHR
moin,

wie ich sagte habe ich mit dem DXE_TimePick "das" native Windows Control, bei dem es Spinbuttons gibt, aber es hat nur HH:MM:SS

Ich benötige nun noch die 1/1000 Sekunden also 4 Felder.

---

nun ist das ganze ein "Zeit" Problem denn wenn es von 0-9 gehen würde wäre es einfach.
ich frage mich nun ob es für "Zeit" Rechnung eine andere Möglichkeit gibt die ich übersehe :?: