ich starte einen neuen Thread bei nEvent = xbe_None.
nun sieht es aber "verschieden"" aus bei nEvent = xbe_None (falsch)
oder wenn ich es "manual" ( so soll es aussehen) per Button starte.
bitte mal anschauen wenn ihr Zeit findet, danke
gruss by OHR
Jimmy
Code: Alles auswählen
*** snip ***
#include "XBP.CH"
#include "APPEVENT.CH"
#include "GRA.CH"
#include "FONT.CH"
STATIC lWorm := .F.
PROCEDURE APPSYS
RETURN
PROCEDURE MAIN
LOCAL oDlg, oXbp
LOCAL nEvent, mp1, mp2
LOCAL oXbp1, oXbp2, oPB1, oPB2
LOCAL nTimeout := 10
LOCAL aSize := {600,400}
LOCAL aPos := {100,100}
LOCAL lExit := .F.
LOCAL aPP1 := {{XBP_PP_COMPOUNDNAME,FONT_HELV_LARGE}}
LOCAL nZahl := 0
LOCAL nTime := TIME()
LOCAL nWormTime := SECONDS()
LOCAL lShow := .F.
oDlg := XbpDialog():new( AppDesktop(),, aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "TIMEZERO"
oDlg:create()
oXbp1 := XbpStatic():new( oDlg:drawingArea , ,;
{100,300}, {400,50},aPP1 )
oXbp1:caption := TIME()
oXbp1:options := XBPSTATIC_TEXT_VCENTER
oXbp1:create()
oXbp2 := XbpStatic():new( oDlg:drawingArea , ,;
{100,200}, {400,50},aPP1 )
oXbp2:caption := TIME()
oXbp2:options := XBPSTATIC_TEXT_VCENTER
oXbp2:create()
oPB1 := XbpPushButton():new(oDlg:drawingArea, , {100,100},;
{200-10,50}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE },;
{ XBP_PP_FGCLR, -58 } } )
oPB1:caption := "Show"
oPB1:tabstop := .T.
oPB1:create()
oPB1:activate := {|| WORMSTART(oXbp2) }
oPB2 := XbpPushButton():new(oDlg:drawingArea, , {320,100},;
{200-10,50}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE },;
{ XBP_PP_FGCLR, -58 } } )
oPB2:caption := "EXIT"
oPB2:tabstop := .T.
oPB2:create()
oPB2:activate := {|| lExit := .T. }
oDlg:Show()
SetappFocus(oPB1)
lExit := .F.
DO WHILE .NOT. lExit
//
// nTimeout
//
nEvent := AppEvent( @mp1, @mp2, @oXbp, nTimeout )
DO CASE
CASE nEvent == xbeP_Keyboard .AND. mp1 == xbeK_ESC
lExit := .T.
CASE nEvent = xbe_None // nTimeout eingetreten
nTime := TIME()
DO CASE
CASE VAL(SUBSTR(nTime,7,2)) == 0 ; lShow := .T.
CASE VAL(SUBSTR(nTime,7,2)) == 10 ; lShow := .T.
CASE VAL(SUBSTR(nTime,7,2)) == 20 ; lShow := .T.
CASE VAL(SUBSTR(nTime,7,2)) == 30 ; lShow := .T.
CASE VAL(SUBSTR(nTime,7,2)) == 40 ; lShow := .T.
CASE VAL(SUBSTR(nTime,7,2)) == 50 ; lShow := .T.
OTHERWISE
lShow := .F.
ENDCASE
IF (lShow .AND. .NOT. lWorm )
nZahl++
IF WORMSTART(oXbp2)
oXbp2:setCaption( TIME() )
* oXbp2:setCaption( LTRIM(STR(nZahl)))
* oXbp2:setCaption( LTRIM(STR(SECONDS()-nWormTime)))
* nWormTime := SECONDS()
ENDIF
ELSE
oXbp1:setCaption( TIME() )
nZahl := 0
lWorm := .F.
ENDIF
OTHERWISE
oXbp:handleEvent( nEvent, mp1, mp2 )
ENDCASE
ENDDO
RETURN
STATIC FUNCTION WORMSTART(oDraw)
LOCAL oWormThread
IF lWorm
MSGBOX("Thread does run")
ELSE
lWorm := .T.
oWormThread := Thread():new()
oWormThread:start("WORM",oDraw)
ENDIF
RETURN (lWorm)
PROCEDURE WORM(oDlg)
LOCAL i,j
LOCAL oWStat := NIL
LOCAL nDraw := oDlg:currentSize()[1]
LOCAL nHigh := oDlg:currentSize()[2]
LOCAL aPP2 := {{XBP_PP_COMPOUNDNAME,FONT_HELV_LARGE}}
IF oWStat = NIL
oWStat:= XbpStatic():new(oDlg,,{0,0},{100-20, nHigh},aPP2)
oWStat:clipsiblings := .F.
oWStat:create()
oWStat:show()
j:= 6
FOR i:= 0 TO nDraw STEP nDraw/20
oWStat:setCaption("Xooooo")
sleep(j)
oWStat:setCaption("oXoooo")
sleep(j)
oWStat:setCaption("ooXooo")
sleep(j)
oWStat:setCaption("oooXoo")
sleep(j)
oWStat:setCaption("ooooXo")
sleep(j)
oWStat:setCaption("oooooX")
sleep(j)
oWStat:setCaption(" ")
oWStat:invalidaterect()
oWStat:setPos( {i,0},.T.)
oWStat:invalidaterect()
IF i%40 == 0 .AND. !(j==1)
j--
ENDIF
NEXT i
oWStat:Destroy()
ENDIF
RETURN
*
* EOF
*