Datum lang/kurz ? [erledigt]

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Datum lang/kurz ? [erledigt]

Beitrag 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) 3858 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 ?
Zuletzt geändert von AUGE_OHR am Mi, 05. Jan 2011 10:08, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Datum lang/kurz ?

Beitrag 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 ?
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Datum lang/kurz ?

Beitrag 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:
gruss by OHR
Jimmy
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9358
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Datum lang/kurz ? [erledigt]

Beitrag 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.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Datum lang/kurz ? [erledigt]

Beitrag 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
*
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Datum lang/kurz ? [erledigt]

Beitrag 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.]

Viele Grüße
Wolfgang
Antworten