Avatar billede japlex Nybegynder
18. oktober 2001 - 14:26 Der er 40 kommentarer og
1 løsning

Ændre på kort datoformat i registreringsdatabasen

Hvordan kan jeg (i min kode) ændre på registreringsdatabasens standardindstilling for det korte datoformat ??
Avatar billede bennytordrup Nybegynder
18. oktober 2001 - 14:28 #1
Kig på API SetLocaleInfo
Avatar billede terry Ekspert
18. oktober 2001 - 14:28 #2
Is it possible? I thought that it would be necessary to do that through regional settings.
But then it seems the regisry is used for most things today!
Avatar billede jper Nybegynder
18. oktober 2001 - 14:59 #3
Indstillingerne findes under HKEY_CURRENT_USER\\Control Panel\\International her kan du bare ændre sShortDate Key\'en til et format der passer dig.
Avatar billede japlex Nybegynder
18. oktober 2001 - 15:17 #4
>> jper

Mit spørgsmål gik på hvordan jeg ændrer indstillingen vha. kode !!!!!
Avatar billede japlex Nybegynder
18. oktober 2001 - 15:18 #5
>> Benny

Kan du ikke uddybe ??
Avatar billede bennytordrup Nybegynder
18. oktober 2001 - 15:30 #6
Declare Function SetLocaleInfo Lib \"kernel32\" Alias \"SetLocaleInfoA\" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Private Declare Function GetThreadLocale Lib \"kernel32\" () As Long

Private Const LOCALE_SSHORTDATE = &H1F

\'LOCALE_SSHORTDATE
\'Short date formatting string for this locale. The string can consist of a combination of day, month, and year format pictures defined in Day, Month, Year, and Era Format Pictures table in National Language Support Constants. The maximum number of characters allowed for this string is 80.

buffer=\"dd/mm/yyyy\"
SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, Len(Buffer))
Avatar billede bennytordrup Nybegynder
24. oktober 2001 - 23:03 #7
Fik du løst dit problem?
Avatar billede japlex Nybegynder
25. oktober 2001 - 07:35 #8
Vender tilbage med det i dag ! ;-))
Avatar billede bennytordrup Nybegynder
03. november 2001 - 22:20 #9
:-/
Avatar billede bennytordrup Nybegynder
03. november 2001 - 22:20 #10
Long day ;-)
Avatar billede japlex Nybegynder
04. november 2001 - 09:51 #11
du her ret - jeg har ikke glemt dig ;-)

Jeg har dog måttet prioritere en del andre ting i udviklingen af mit system.

Jeg arbejder så hurtigt jeg kan !
Avatar billede japlex Nybegynder
15. november 2001 - 10:11 #12
>> Benny

Ja - jeg ved det er længe siden, - men nu har jeg fået tid til at gøre noget ved dato formatet MEN

Kan du ikke fortælle mig lidt mere om hvor koden skal side og hvordan jeg bruger den iøvrigt

Det ville være en stor hjælp ??
Avatar billede japlex Nybegynder
15. november 2001 - 10:24 #13
side = sidde ;-)
Avatar billede bennytordrup Nybegynder
15. november 2001 - 10:30 #14
Du kan sætte det ind i et class module som properties

Public Property Get ShortDateFormat() As String
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    Buffer = String(GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, 0), \" \")
    Fetched = GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, Len(Buffer))
    If Fetched > 0 Then ShortDateFormat = Mid(Buffer, 1, Fetched - 1)
End Property
Public Property Let ShortDateFormat(ByVal sFormat as String)
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sFormat, Len(sFormat))   
End Property
Avatar billede japlex Nybegynder
15. november 2001 - 15:29 #15
>> Benny

Jeg er ikke særlig stærk i API eller classes.

Jeg har lavet en classmodule der hedder \"clsDatoHåndtering\" og har min hovedform der hedder
\"frmCVM\" som programmet starter med så...

Hvor skal 1) og 2) sidde i min kode

1)
Declare Function SetLocaleInfo Lib \"kernel32\" Alias \"SetLocaleInfoA\" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Private Declare Function GetThreadLocale Lib \"kernel32\" () As Long

Private Const LOCALE_SSHORTDATE = &H1F

2)
Public Property Get ShortDateFormat() As String
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    Buffer = String(GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, 0), \" \")
    Fetched = GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, Len(Buffer))
    If Fetched > 0 Then ShortDateFormat = Mid(Buffer, 1, Fetched - 1)
End Property
Public Property Let ShortDateFormat(ByVal sFormat as String)
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sFormat, Len(sFormat))   
End Property

På forhånd tak og jeg forhøjer lige indsatsen
Avatar billede bennytordrup Nybegynder
15. november 2001 - 15:34 #16
1) erklæres private i clsDatoHåndtering

2) indsættes cut\'n paste i clsDatoHåndtering.

På frmCVM initierer du en ny clsDatoHåndtering og henter/sætter ShortDateFormat via dens property.
Avatar billede japlex Nybegynder
15. november 2001 - 15:37 #17
Som antydet ! Jeg skal have det med skeer

Vil du være sød at skrive koden der skal til i \"frmCVM\"?
Avatar billede bennytordrup Nybegynder
15. november 2001 - 15:43 #18
OTOH:

private sub Command1_click
  dim cDT as clsDatoHåndtering
  set cDT = new clsdatohåndtering
  cDT.ShortDateFormat = \'yyyy/mm/dd\'
  set cDT = nothing
end sub
Avatar billede japlex Nybegynder
15. november 2001 - 15:51 #19
OK

Nu ser min kode i frmCVM således ud:

Dim cDT As clsDatoFormat
    Set cDT = New clsDatoFormat
    cDT.ShortDateFormat = \"DD-MM-åååå\"
    Set cDT = Nothing

clsDatohåndtering hedder nu clsDatoFormat !!!

Men det virker ikke

Meningen var jo at sikre at datoformatet på pc\'en er \"DD-MM-åååå\" !!
Avatar billede japlex Nybegynder
15. november 2001 - 15:55 #20
lige et spørgsmål

Hvorfor er der tilsyndeladende en parameter for meget med (Len(sFormat) i:

SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sFormat, Len(sFormat))   
Avatar billede japlex Nybegynder
15. november 2001 - 15:55 #21
Tilsyndeladende = tilsyneladende
Avatar billede bennytordrup Nybegynder
15. november 2001 - 15:57 #22
Fjern \", Len(sFormat)\"
Avatar billede japlex Nybegynder
15. november 2001 - 15:59 #23
er gjort men virker stadig ikke

datoformatet er stadig \"DD-MM-åå\" ;-(((
Avatar billede japlex Nybegynder
15. november 2001 - 15:59 #24
Skal paranteserne omkring...

SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, Buffer, Len(Buffer))

...ikke fjernes???
Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:00 #25
Det kan du gøre.

Eller sætte Call foran
Avatar billede japlex Nybegynder
15. november 2001 - 16:02 #26
Har du ellers en ide om hvad der der galt??
Avatar billede japlex Nybegynder
15. november 2001 - 16:07 #27
koden...

Dim cDT As clsDatoFormat
    Set cDT = New clsDatoFormat
    cDT.ShortDateFormat = \"yyyy/mm/dd\"
    Set cDT = Nothing

...sidder i form_load af frmCVM! Er det rigtigt??
Avatar billede japlex Nybegynder
15. november 2001 - 16:12 #28
når jeg sætter et breakpoint i koden og \"følger\" med køres kun igennem...

Public Property Let ShortDateFormat(ByVal sFormat As String)
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    SetLocaleInfo GetThreadLocale, LOCALE_SSHORTDATE, sFormat
End Property

...Er det rigtigt??

Hvad skal ...

Public Property Get ShortDateFormat() As String
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    buffer = String(GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, buffer, 0), \" \")
    Fetched = GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, buffer, Len(buffer))
    If Fetched > 0 Then ShortDateFormat = Mid(buffer, 1, Fetched - 1)
End Property

...så bruges til??

>> Benny - hvis du stadig er der så hjælp mig lige færdig. Kan du købes ;-) ;-)
Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:15 #29
Get -delen bruges til at hente fra windows

Prøv at kalde med sFormat & chr$(0)

så den bliver null-termineret
Avatar billede japlex Nybegynder
15. november 2001 - 16:18 #30
altså...

SetLocaleInfo GetThreadLocale, LOCALE_SSHORTDATE, sFormat & Chr$(0)

???
Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:18 #31
Yep
Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:19 #32
Du kan evt. lave en MsgBox cDT.ShortDateFormat efter kaldet til cDT.ShortDateFoamt=...
Avatar billede japlex Nybegynder
15. november 2001 - 16:19 #33
hjælper ikke
Avatar billede japlex Nybegynder
15. november 2001 - 16:23 #34
hmm... :-|

hvis jeg skriver...

MsgBox cDT.ShortDateFormat

...efter kaldet for jeg at vide at sub\'en...

GetLocaleInfo

...ikke er defineret.

Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:27 #35
Indsæt den her

Private Declare Function GetLocaleInfo Lib \"kernel32\" Alias \"GetLocaleInfoA\" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long

i clsDatoFormat sammen med den anden Declare function
Avatar billede japlex Nybegynder
15. november 2001 - 16:33 #36
stadig samme fejlmeddelse hvilket da er mærkeligt !

buffer og Fetched er ikke erklæret?? skal de ikke det??
Avatar billede bennytordrup Nybegynder
15. november 2001 - 16:39 #37
Jo. Buffer as string og Fetched as long
Avatar billede japlex Nybegynder
15. november 2001 - 16:47 #38

OK - så får jeg det aktuelle datoformat tilbage, men jeg kan stadig ikke ændre det. ER der noget galt med...


Public Property Let ShortDateFormat(ByVal sFormat As String)
\'used when retrieving value of a property, on the right side of an assignment.
\'Syntax: Debug.Print X.ShortDateFormat
    On Error Resume Next
    Call SetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sFormat & Chr$(0))
    \'MsgBox sFormat & Chr$(0)

End Property

...Hvorfor skal der ikke sendes en parameter med over fra ...

cDT.ShortDateFormat = \"DD-MM-åååå\"

...i frmcvm
Avatar billede japlex Nybegynder
15. november 2001 - 17:14 #39
Nu er vi tæt på ...

Jeg får nu det rigtige format tilbage, nemlig:

DD-MM-YYYY

MEN når jeg så kører programmet er datoen lige pludselig:

DD-11-2001

Hvorfor skriver den DD og ikke 15?

jeg forhøjder gerne indsatsen hvis du lige vil hjælpe mig færdig!
Avatar billede bennytordrup Nybegynder
15. november 2001 - 20:11 #40
Ifølge MS Platform SDK, så skal d\'erne være med småt, M\'erne med stort og y\'erne med småt.

Jeg prøvede lige på min:

Opret et projekt, standard exe.

På form1 indsættes en listbox (bibehold navnet List1).

I kodeview indsættes følgende:

Option Explicit

Dim cCPL As clsControlPanel

Private Sub Form_Load()
    Set cCPL = New clsControlPanel
    With List1
        .Clear
        .AddItem \"dd-MM-yy\"
        .AddItem \"dd-MM-yyyy\"
        .AddItem \"MM-dd-yy\"
        .AddItem \"MM-dd-yyyy\"
        .AddItem \"yy-MM-dd\"
        .AddItem \"yyyy-MM-dd\"
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Set cCPL = Nothing
End Sub

Private Sub List1_Click()
    If List1.ListIndex < 0 Then Exit Sub
    cCPL.ShortDateFormat = List1.List(List1.ListIndex)
    Me.Caption = cCPL.ShortDateFormat
End Sub

Tilføj et Class modul, navngiv det clsControlPanel

I code view indsætter du følgende:

Option Explicit

Private Const LOCALE_SSHORTDATE = &H1F

Private Declare Function GetThreadLocale Lib \"kernel32\" () As Long
Private Declare Function GetLocaleInfo Lib \"kernel32\" Alias \"GetLocaleInfoA\" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function SetLocaleInfo Lib \"kernel32\" Alias \"SetLocaleInfoA\" (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String) As Long

Private sBuffer As String
Private lFetched As Long
Private lNeedLen As Long

Public Property Get ShortDateFormat() As String
    lNeedLen = GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sBuffer, 0)
    sBuffer = String$(lNeedLen, 0)
    lFetched = GetLocaleInfo(GetThreadLocale, LOCALE_SSHORTDATE, sBuffer, Len(sBuffer))
    ShortDateFormat = Left$(sBuffer, lFetched - 1)
End Property
Public Property Let ShortDateFormat(sFormat As String)
    SetLocaleInfo GetThreadLocale, LOCALE_SSHORTDATE, sFormat & Chr$(0)
End Property


Køres programmet, vil datoformatet blive sat til det format, du vælger i listboxen. Det virker i min - og Windows registrerer ændringen i kontrolpanelets regionale indstillinger. Var denne åben på skiftetidspunktet, ændres det først efter en nedlukning af regionale indstillinger.
Avatar billede japlex Nybegynder
16. november 2001 - 16:50 #41
Tak Tak - nu virker det

d\'erne skulle skrives med småt !

Jeg forhøjer og si\'r tak for hjælpen !!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester