ich bin darauf gekommen weil Wolfgang mir eine Demo mit Datum geschickt hat.
erst zeigte es "Unsinn" an und ich dachte mir das kann nicht sein ... aber dann viel mir "mein" DD.MM.
ein.
klar wenn ich es auf "default" stelle DD.MM.
DD.MM.
haben.
meiner DD.MM.
Code: Alles auswählen
#include "XBP.CH"
#include "APPEVENT.CH"
#include "GRA.CH"
#include "DLL.CH"
#include "COMMON.CH"
STATIC aCache:= {"","","","","","","","","","","","","","","","","","",""}
STATIC breite:=19*19
STATIC hoehe:=29
PROCEDURE APPSYS
RETURN
PROCEDURE MAIN()
LOCAL nEvent, mp1, mp2, oXbp
LOCAL oDlg
LOCAL aPos
LOCAL oBMP,oLogo,aRect
LOCAL aSize := {247,29}
LOCAL nTimeout := 0
LOCAL lAllExit := .F.
LOCAL aDigit := {}
LOCAL nAnzahl := 13
LOCAL aUhr := {}
SET CENTURY ON // dies ist die einzige Erweiterung / Änderrung
Set date german
oBMP := XbpBitmap():new():create( )
oBMP:Load(NIL,101)
IF oBMP:xSize > 0
aSize[1] := oBMP:xSize
ENDIF
IF oBMP:ySize > 0
aSize[2] := oBMP:ySize
ENDIF
aPos := CenterPos( aSize, AppDesktop():currentSize() )
oDlg := XbpDialog():new( AppDesktop(),, aPos)
oDlg:icon = 1
oDlg:Tasklist := .T.
oDlg:titleBar := .F.
oDlg:clientSize := aSize
oDlg:border := XBPDLG_NO_BORDER
oDlg:create()
oDlg:hide()
aSize := oDlg:drawingArea:currentSize()
oLogo := XbpStatic():new( oDlg:drawingArea,, {0,0}, aSize )
oLogo:type := XBPSTATIC_TYPE_BITMAP
oLogo:caption := oBMP
oLogo:autoSize := .F.
oLogo:clipChildren := .T.
oLogo:create()
oDlg:Show()
setAppWindow(oDlg)
oLogo:Show()
setappfocus(oLogo)
aRect := {0, 0, aSize[1], aSize[2]}
aDigit := SPLITINTO( oLogo, aRect , nAnzahl )
SLEEP(100)
oLogo:hide()
aUhr := MakeBig(oDlg,aDigit)
SetTimerEvent(100, {|| Anzeige(oDlg,aUhr,aDigit) } )
nEvent := xbe_None
DO WHILE .NOT. lAllExit
nEvent := AppEvent ( @mp1, @mp2, @oXbp, nTimeout )
DO CASE
CASE nEvent == xbe_None // nTimeout eingetreten
EXIT
CASE nEvent == xbeP_Keyboard .and. mp1 == xbeK_SPACE
SetTimerEvent(0)
Readnew( @aDigit,aUhr,oBMP,oLogo,aRect,nAnzahl )
SetTimerEvent(100, {|| Anzeige(oDlg,aUhr,aDigit) } )
CASE nEvent == xbeP_Keyboard .and. mp1 == xbeK_ESC
EXIT
ENDCASE
oXbp:HandleEvent ( nEvent, mp1, mp2 )
ENDDO
oDlg:destroy()
RETURN
STATIC FUNCTION CENTERPOS( aSize, aRefSize )
RETURN { Int( (aRefSize[1] - aSize[1]) / 2 ) ;
, Int( (aRefSize[2] - aSize[2]) / 2 ) }
FUNCTION BMP2BMP(oBMP,aXbpSize)
LOCAL oHuge,oTiny,oPS, oRet
IF aXbpSize[2] > 0
oHuge := oBMP
//Create a small bitmap to fit in our XbpStatic
oTiny := XbpBitmap():New():Create()
oTiny:Make(aXbpSize[1], aXbpSize[2])
oPS := XbpPresSpace():new()
oTiny:presSpace(oPS)
//Copie and resize the huge bitmap to the small bitmap
oHuge:Draw(oPS, { 0, 0, aXbpSize[1], aXbpSize[2]}, , , GRA_BLT_BBO_IGNORE)
oRet := oTiny
ELSE
oRet := oBMP
ENDIF
RETURN oRet
FUNCTION SPLITINTO( oSourceArea, aRect ,InOut)
/********************************************************************
"split" Bitmap into "parts"
******************************************************************* */
LOCAL oTargetPS
LOCAL oBitmap
LOCAL oPS := NIL
LOCAL nSizeX := aRect[ 3 ] - aRect[ 1 ]
LOCAL nSizeY := aRect[ 4 ] - aRect[ 2 ]
LOCAL i
LOCAL iMax
LOCAL nStep := INT(nSizeX/InOut)
LOCAL aRet := {}
DEFAULT InOut TO 0
iMax := InOut+1
FOR i = 1 TO iMax
oTargetPS := XbpPresSpace():new():create()
oBitmap := XbpBitmap():new():create()
oPS := oSourceArea:lockPS()
oBitmap:presSpace( oTargetPS )
IF i > 1
oBitmap:make( breite/19, hoehe )
GraBitBlt( oTargetPS, oPS, { 0, 0, breite/19, hoehe },;
{ nStep*(i-2), 0, nStep*(i-1), nSizeY },;
GRA_BLT_ROP_SRCPAINT,GRA_BLT_BBO_IGNORE )
ENDIF
oSourceArea:unLockPS( oPS )
Sleep( 0 )
oTargetPS:destroy()
oTargetPS := NIL
AADD(aRet,oBitmap)
NEXT
RETURN aRet
FUNCTION MakeBig(oDlg,aDigit)
LOCAL aSize := {breite,hoehe}
LOCAL aPos := CenterPos( aSize, AppDesktop():currentSize() )
LOCAL i
LOCAL oXbp
LOCAL aUhr := {}
LOCAL oBMP
oDlg:hide()
oDlg:setPosAndSize(aPos,aSize)
FOR i := 1 TO 19
oBMP := aDigit[3]
oXbp := XbpStatic():new( oDlg:drawingArea,, {(i-1)*breite/19,0}, {aSize[1]/19,aSize[2]} )
oXbp:type := XBPSTATIC_TYPE_BITMAP
oXbp:caption := oBMP
oXbp:autoSize := .F.
oXbp:clipChildren := .T.
oXbp:create()
AADD(aUhr,oXbp)
NEXT
oDlg:show()
oDlg:drawingArea:invalidateRect()
setAppFocus(oDlg)
RETURN aUhr
PROCEDURE Anzeige(oDlg,aUhr,aDigit)
LOCAL cTime := dtoc(date())+" "+TIME()
LOCAL i
FOR i := 1 TO 19
IF i == 3 .OR. i == 6 // "." Zeichen
IF SUBSTR(cTime,i,1) == aCache[i]
ELSE
aCache[i] := SUBSTR(cTime,i,1)
aUhr[i]:setcaption(aDigit[2])
ENDIF
ELSEIF i == 14 .OR. i == 17 // ":" Zeichen
IF SUBSTR(cTime,i,1) == aCache[i]
ELSE
aCache[i] := SUBSTR(cTime,i,1)
aUhr[i]:setcaption(aDigit[14])
ENDIF
ELSEIF i == 11 // " " Zeichen
IF SUBSTR(cTime,i,1) == aCache[i]
ELSE
aCache[i] := SUBSTR(cTime,i,1)
aUhr[i]:setcaption(aDigit[3])
ENDIF
ELSE
IF SUBSTR(cTime,i,1) == aCache[i]
ELSE
aCache[i] := SUBSTR(cTime,i,1)
IF( aCache[i] == "0" , aUhr[i]:setcaption(aDigit[ 4]), NIL )
IF( aCache[i] == "1" , aUhr[i]:setcaption(aDigit[ 5]), NIL )
IF( aCache[i] == "2" , aUhr[i]:setcaption(aDigit[ 6]), NIL )
IF( aCache[i] == "3" , aUhr[i]:setcaption(aDigit[ 7]), NIL )
IF( aCache[i] == "4" , aUhr[i]:setcaption(aDigit[ 8]), NIL )
IF( aCache[i] == "5" , aUhr[i]:setcaption(aDigit[ 9]), NIL )
IF( aCache[i] == "6" , aUhr[i]:setcaption(aDigit[10]), NIL )
IF( aCache[i] == "7" , aUhr[i]:setcaption(aDigit[11]), NIL )
IF( aCache[i] == "8" , aUhr[i]:setcaption(aDigit[12]), NIL )
IF( aCache[i] == "9" , aUhr[i]:setcaption(aDigit[13]), NIL )
ENDIF
ENDIF
NEXT
RETURN
PROCEDURE Readnew( aDigit,aUhr,oBMP,oLogo,aRect,nAnzahl )
LOCAL i
STATIC nNo := 1
nNo++
IF nNo > 3
nNo := 1
ENDIF
AEval( aUhr, {|o| o:hide() } )
oLogo:show()
// als Bitmap Resoure im *.ARC File anlegen
// !!! auch in MAIN anpassen !!!
DO CASE
CASE nNo = 1 ; oBMP:Load(NIL,101)
CASE nNo = 2 ; oBMP:Load(NIL,102)
CASE nNo = 3 ; oBMP:Load(NIL,103)
OTHERWISE
oBMP:Load(NIL,101)
ENDCASE
oLogo:setCaption(oBMP)
aDigit := {}
aDigit := SPLITINTO( oLogo, aRect , nAnzahl )
oLogo:hide()
// hier muss ich den Cache "reset"en
aCache:= {"","","","","","","","","","","","","","","","","","",""}
AEval( aUhr, {|o| o:show(), o:invalidateRect() } )
RETURN
*
* eof
*