Seite 1 von 1

Datum lang/kurz ? [erledigt]

Verfasst: Mi, 05. Jan 2011 8:18
von AUGE_OHR
hi,

ich habe bei mir immer noch das "kurze" Datum Format DD.MM.JJ

damit würde aber ein für "langes" Datum DD.MM.JJJJ ausgelegte LCD Uhr mit Datum evtl. "falsch" dargestellt.
Datum_kurz_lang.JPG
Datum_kurz_lang.JPG (67.72 KiB) 3875 mal betrachtet
Frage : kann man "feststellen" welches System Datum Format eingestellt ist und kann man innerhalb von Xbase++ ändern ?

SET DATE FORMAT setzt wohl auf dem System Datum Format auf und kann aus DD.MM.JJ nicht DD.MM.JJJJ machen ?

Re: Datum lang/kurz ?

Verfasst: Mi, 05. Jan 2011 9:13
von Koverhage
Hallo Jimmy,

es ist doch immer das lange Datum aktiv, es gibt eigentlich kein anderes.
Das kurze Datun wird doch nur angezeigt wenn du SET CENTURY OFF setzt
Ob dies gesetzt ist, kannst Du doch abfragen.
Oder habe ich die Frage jetzt falsch verstanden ?

Re: Datum lang/kurz ?

Verfasst: Mi, 05. Jan 2011 10:07
von AUGE_OHR
Koverhage hat geschrieben:es ist doch immer das lange Datum aktiv, es gibt eigentlich kein anderes.
Das kurze Datun wird doch nur angezeigt wenn du SET CENTURY OFF setzt
Ob dies gesetzt ist, kannst Du doch abfragen.
Oder habe ich die Frage jetzt falsch verstanden ?
ich habe extra, wegen paar alter Cl*pper Util´s das System Datum auf JJ/MM/DD gesetzt.
du hast mich aber mich mit SET CENTURY ON auf die richtige Fährte gebracht, danke :thumbleft:

Re: Datum lang/kurz ? [erledigt]

Verfasst: Mi, 05. Jan 2011 10:14
von Tom
SET CENT wirkt sich eigentlich nur auf die direkte Ausgabe (CRT-Modus) und die Umwandlung z.B. per DtoC und DtoS aus. Year(Date()) liefert immer eine vierstellige Zahl, wenn die Jahreszahl vierstellig ist. Um also unabhängig von SET CENT-Einstellungen zu arbeiten, wäre empfehlenswert, für die Darstellung jeweils Day(), Month() und Year() auszuwerten.

Re: Datum lang/kurz ? [erledigt]

Verfasst: Mi, 05. Jan 2011 13:23
von AUGE_OHR
hi,

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.JJ ein.

klar wenn ich es auf "default" stelle DD.MM.JJJJ läuft das Demo, aber ich wollte es auch trotz DD.MM.JJ haben.

das scheint nun mit SET CENTURY ON zu gehen trotz meiner DD.MM.JJ Einstellung =D>

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
*

Re: Datum lang/kurz ? [erledigt]

Verfasst: Mi, 05. Jan 2011 14:47
von Wolfgang Ciriack
Wobei die Version mit Datum nicht für die Anzeige von Datumwerten mit "/" als Trenner geeignet ist.
Außerdem gehören zu der Anzeige Datum und Uhr noch die geänderten Grafiken

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]

[Die Dateierweiterung bmp wurde deaktiviert und kann nicht länger angezeigt werden.]