| |
|
|
Web Scanner |
Ja, die Überschrift sagt es schon. Es soll folgendermaßen funktionieren. Ich drücke einn Button "Start" die Uhrzeit fängt an zu laufen ( in sec. Schritten) Dann den Button "Stop" drücken, die Uhr bleibt stehen. Danach ggf. wieder Start, die Zeit läuft weiter, oder kann mit einem anderen Button "RESET" auf 0 zurückgesetzt werden.
Sodele, ab jetzt wirds kompliziert, in einem Fenster sollen drei verschiedene Zeiten parallel laufen, Also: drei Zeitanzeigen die völlig getrennt voneinander laufen sollen jeweil mit Start/Stop/Reset usw.
Hat jemand mit permanenten Zeitanzeigen in X11 schon was programmiert? Einen älteren Beitrag aus 2004 hab ich gefunden, hilft mir aber nicht wirklich weiter Die Hilfe bringt mich nur auf die Systemzeit des PCs. Oder hab ich was übersehen
Viele Grüße
Web |
|
|
| |
|
|
|
| Fix hingepinselt KompilierenMarkierenSeparieren {$cleq}
decimals 0
cls
longs timer,hDisp,hStart,hPause,hReset
whileLoop 20
timer[loop]=0
hDisp[loop]=createText(hWnd,"Timer:"+str$(loop),20,loop*20,400,18)
hStart[loop]=createButton(hWnd,"Start",450,loop*20,50,18)
hPause[loop]=createButton(hWnd,"Pause",500,loop*20,50,18)
hReset[loop]=createButton(hWnd,"Reset",550,loop*20,50,18)
wend
subClass hWnd,true
~setTimer(hWnd,222,100,0)
while 1
waitinput
whileLoop 20
case clicked(hStart[loop]) : timer[loop]=getTickCount
case clicked(hPause[loop]) : timer[loop]=-timer[loop]
if clicked(hReset[loop])
timer[loop]=0
setText hDisp[loop],"0"
endif
wend
wend
end
subClassProc
if sMessage==wm_timer
if sWParam==222
whileLoop 20
if timer[loop]>0
setText hDisp[loop],str$(getTickCount-timer[loop])+"ms"
endif
wend
endif
endif
endproc
KompilierenMarkierenSeparieren $H windows.ph
DECIMALS 0
CLS
DECLARE TIMER&[]
DECLARE HDISP&[]
DECLARE HSTART&[]
DECLARE HPAUSE&[]
DECLARE HRESET&[]
WHILELOOP 20
TIMER&[&LOOP]=0
HDISP&[&LOOP]=(CONTROL("STATIC","Timer:"+STR$(&LOOP),$50000000,(20),(&LOOP*20),(400),(18),(%HWND),0,%HINSTANCE))
HSTART&[&LOOP]=(CREATE("BUTTON",(%HWND),"Start",(450),(&LOOP*20),(50),(18)))
HPAUSE&[&LOOP]=(CREATE("BUTTON",(%HWND),"Pause",(500),(&LOOP*20),(50),(18)))
HRESET&[&LOOP]=(CREATE("BUTTON",(%HWND),"Reset",(550),(&LOOP*20),(50),(18)))
ENDWHILE
SUBCLASS %HWND,1
~setTimer(%HWND,222,100,0)
WHILE 1
WAITINPUT
WHILELOOP 20
IF CLICKED(HSTART&[&LOOP])
TIMER&[&LOOP]=&GETTICKCOUNT
ENDIF
IF CLICKED(HPAUSE&[&LOOP])
TIMER&[&LOOP]=-TIMER&[&LOOP]
ENDIF
IF CLICKED(HRESET&[&LOOP])
TIMER&[&LOOP]=0
SETTEXT HDISP&[&LOOP],"0"
ENDIF
ENDWHILE
ENDWHILE
end
subclassproc
IF %SMESSAGE=$0113
IF &SWPARAM=222
WHILELOOP 20
IF TIMER&[&LOOP]>0
SETTEXT HDISP&[&LOOP],STR$(&GETTICKCOUNT-TIMER&[&LOOP])+"ms"
ENDIF
ENDWHILE
ENDIF
ENDIF
endproc
ohne Feinschliff. Auch lustig [...] aus [...] . |
|
|
| |
|
|
|
Web Scanner | Absolut cool iF, Dankeschön - Variante 2 geht auf Anhieb. Das werd ich mal reinbasteln. Da hätt ich Tagelang dran rumprobiert
Mit dem oberen Programmstückchen komme ich leider nicht klar
Grüße
Web |
|
|
| |
|
|
|
| Gern geschehen!
Oberes geht mit XPSE, drum etwas einfachere Syntax. |
|
|
| |
|
|
|
Web Scanner |
Bei Pause müsste nur noch die Zeit "anhalten", denn die läuft intern weiter und wenn man das zweite Mal Pause drückt, ist die Zeit weitergelaufen und läuft von dem Zeitpunkz aus weiter
Aber mir hilft das wirklich schon viel weiter.
Grüße
Web |
|
|
| |
|
|
|
| Ich weiss, aber ich denke mal das ist fix hinzubekommen - bei Resume z.B. einfach den zu subtrahierenden Wert per GetText ermitteln. ^^ |
|
|
| |
|
|
|
Web Scanner | Okay. Mach ich dann so |
|
|
| |
|
|
|
Web Scanner | Hallo,
anbei meine Lösung mit paar geklauten Programmzeilen von iF. Sicher nicht so schön programmiert, aber es läuft. Damit der Zähler zum Testen schneller läuft, habe ich Settimer auf 100 gesetzt (1000 wäre richtig).
Grüße
Web KompilierenMarkierenSeparieren**** Programm zur parallelen Zeitanzeige in Profan ****
declare time1&, minute1%, zähler1%, Stunde1%
declare time2&, minute2%, zähler2%, Stunde2%
declare time3&, minute3%, zähler3%, Stunde3%, Loopzahl%
declare Starttimer1%, Starttimer2%, Starttimer3%, a%
DECLARE TIMER&[]
DECLARE HDISP&[]
DECLARE HSTART&[]
DECLARE HPAUSE&[]
DECLARE HRESET&[]
proc Timer1
inc time1&
Locate 2 , 14
print str$(time1&);" s "
zähler1% = zähler1%+1
If zähler1% = 60
Minute1% = minute1%+1
locate 2 , 7
print minute1%;" min "
zähler1% = 0
time1& = 0
endif
If Minute1% = 60
Stunde1% = Stunde1% + 1
Locate 2 , 2
Print Stunde1%;" h "
Minute1% = 0
Endif
endproc
proc Timer2
inc time2&
Locate 4 , 14
print str$(time2&);" s "
zähler2% = zähler2%+1
If zähler2% = 60
Minute2% = minute2%+1
locate 4 , 7
print minute2%;" min "
zähler2% = 0
time2& = 0
endif
If Minute2% = 60
Stunde2% = Stunde2% + 1
Locate 4 , 2
Print Stunde2%;" h "
Minute2% = 0
Endif
endproc
proc Timer3
inc time3&
Locate 6 , 14
print str$(time3&);" s "
zähler3% = zähler3%+1
If zähler3% = 60
Minute3% = minute3%+1
locate 6 , 7
print minute3%;" min "
zähler3% = 0
time3& = 0
endif
If Minute3% = 60
Stunde3% = Stunde3% + 1
Locate 6 , 2
Print Stunde3%;" h "
Minute3% = 0
Endif
endproc
WindowStyle 2+8+16+512
Window 0 , 0 - 640 , 480
time1& = 0
time2& = 0
SetTimer 100
minute1% = 0
zähler1% = 0
minute2% = 0
zähler2% = 0
Locate 2,2
print "0 h "
Locate 2,7
print "0 min "
Locate 2,14
print "00 s "
Locate 4,2
print "0 h "
Locate 4,7
print "0 min "
Locate 4,14
print "00 s "
Locate 6,2
print "0 h "
Locate 6,7
print "0 min "
Locate 6,14
print "00 s "
WHILELOOP 3
HSTART&[&LOOP]=(CREATE("BUTTON",(%HWND),"Start",(450),(&LOOP*20),(50),(18)))
HPAUSE&[&LOOP]=(CREATE("BUTTON",(%HWND),"Pause",(500),(&LOOP*20),(50),(18)))
HRESET&[&LOOP]=(CREATE("BUTTON",(%HWND),"Reset",(550),(&LOOP*20),(50),(18)))
ENDWHILE
--------------Sprungschleife für START ------------------
Loopzahl% = 0
Starttimer1% = 0
whilenot %Key = 2
WAITINPUT
Loopzahl% = 0
WHILELOOP 3
Loopzahl% = Loopzahl% +1
IF CLICKED(HSTART&[&LOOP])
IF Loopzahl% = 1
Starttimer1% = 1
ENDIF
ENDIF
IF CLICKED(HPAUSE&[&LOOP])
IF Loopzahl% = 1
Starttimer1% = 0
ENDIF
ENDIF
IF CLICKED(HSTART&[&LOOP])
IF Loopzahl% = 2
Starttimer2% = 1
ENDIF
ENDIF
IF CLICKED(HPAUSE&[&LOOP])
IF Loopzahl% = 2
Starttimer2% = 0
ENDIF
ENDIF
IF CLICKED(HSTART&[&LOOP])
IF Loopzahl% = 3
Starttimer3% = 1
ENDIF
ENDIF
IF CLICKED(HPAUSE&[&LOOP])
IF Loopzahl% = 3
Starttimer3% = 0
ENDIF
ENDIF
IF CLICKED(HRESET&[&LOOP])
IF Loopzahl% = 1
minute1% = 0
Stunde1% = 0
zähler1% = 0
time1& = 0
Locate 2,2
print "0 h "
Locate 2,7
print "0 min "
Locate 2,14
print "00 s "
Starttimer1% = 0
ENDIF
IF Loopzahl% = 2
minute2% = 0
Stunde2% = 0
zähler2% = 0
time2& = 0
Locate 4,2
print "0 h "
Locate 4,7
print "0 min "
Locate 4,14
print "00 s "
Starttimer2% = 0
ENDIF
IF Loopzahl% = 3
minute3% = 0
Stunde3% = 0
zähler3% = 0
time3& = 0
Locate 6,2
print "0 h "
Locate 6,7
print "0 min "
Locate 6,14
print "00 s "
Starttimer3% = 0
ENDIF
ENDIF
Endwhile
If starttimer1% = 1
A% = %wmTimer : Timer1
Endif
If starttimer2% = 1
A% = %wmTimer : Timer2
Endif
If starttimer3% = 1
A% = %wmTimer : Timer3
Endif
Wend
KillTimer
end
|
|
|
| |
|
|
|
| Ah, hast auf %wmTimer umgestellt - ok, hat aber bei kleinen Timerwerten den Nachteil, dass Waitinput dann nicht mehr so zuverlässig ist weshalb ich sowas immer automatisch in die subClassProc auslagere. Hauptsache geht. ^^ |
|
|
| |
|
|
|
Web Scanner | Ja, das ist hier relativ unkritisch, es geht bei den Zeiten nicht um Sekunden. Da reicht es wenn die Minutenangeben einigermaßen hinkommen. Hoffe dafür reicht es |
|
|
| |
|
|