OVH Cloud OVH Cloud

comment faire un masque de saisie pour une date?

15 réponses
Avatar
thierry
tout est dans la question. je peux sans problème tester la validité
d'une date, mais mon utilisatrice préférée voudrait (et elle à bien
raison), une saisie du type Access, avec les / qui apparaissent, du type
jj/mm/aaaa. Une idée?

5 réponses

1 2
Avatar
Gloops
Bonjour,

Une saisie avec masque de format ...

Il me semble que le "Microsoft Masked Edit Control 6.0"
(C:WINDOWSSYSTEM32MSMASK32.OCX) pourrait répondre à la question.

Pour s'en servir, Projet / Composants (déclenché par Ctrl T sous VB6) et
dans l'onglet Contrôles cocher la case correspondante.
L'icône MaskEdBox, représentant deux dièses et un trait vertical,
apparaît dans la boîte à outils.
Le contrôle qu'elle permet de créer a une propriété format, qui remplace
à la fois Format et InputMask d'Access.

Attention aux problèmes de déploiement, ne pas hésiter à créer un
programme d'installation. Peut-être est-ce ce point qui a fait hésiter
les autres intervenants à parler de MaskEdBox, qui fait partie de la
douzaine ou quinzaine de contrôles abordés en premier lorsqu'on apprend VB6.
































thierry a écrit, le 03/03/2005 17:03 :
tout est dans la question. je peux sans problème tester la validité
d'une date, mais mon utilisatrice préférée voudrait (et elle à bien
raison), une saisie du type Access, avec les / qui apparaissent, du type
jj/mm/aaaa. Une idée?


Avatar
Gloops
Ah pardon,

Donner une solution en réponse à une autre plutôt qu'à la question
posée, c'est un classement auquel je n'avais pas pensé.

Bon, je suis arrivé comme la cavalerie, désolé.
_____________________________________
Gloops a écrit, le 05/03/2005 11:03 :

Bonjour,

Une saisie avec masque de format ...

Il me semble que le "Microsoft Masked Edit Control 6.0"
(C:WINDOWSSYSTEM32MSMASK32.OCX) pourrait répondre à la question.

Pour s'en servir, Projet / Composants (déclenché par Ctrl T sous VB6) et
dans l'onglet Contrôles cocher la case correspondante.
L'icône MaskEdBox, représentant deux dièses et un trait vertical,
apparaît dans la boîte à outils.
Le contrôle qu'elle permet de créer a une propriété format, qui remplace
à la fois Format et InputMask d'Access.

Attention aux problèmes de déploiement, ne pas hésiter à créer un
programme d'installation. Peut-être est-ce ce point qui a fait hésiter
les autres intervenants à parler de MaskEdBox, qui fait partie de la
douzaine ou quinzaine de contrôles abordés en premier lorsqu'on apprend
VB6.
































thierry a écrit, le 03/03/2005 17:03 :

tout est dans la question. je peux sans problème tester la validité
d'une date, mais mon utilisatrice préférée voudrait (et elle à bien
raison), une saisie du type Access, avec les / qui apparaissent, du
type jj/mm/aaaa. Une idée?






Avatar
Aski
Bonjour,

Tu trouveras ci-dessous le code que j'ai écrit pour modifier la date d'un
fichier.
Tu le colles sur une feuille sur laquelle tu crées :

Pour la date actuelle et l'heure actuelle :
- 3 'Label' : OldDate(0) pour le jour, OldDate(1) pour le mois, OldDate(2)
pour l'année
- 3 'Label' : OldTime(0) pour l'heure, OldTime(1) pour les min, OldTime(2)
pour les s
- 3 'TextBox' : NewDate(0) pour le jour, NewDate(1) pour le mois, NewDate(2)
pour l'année
- 3 'TextBox' : NewTime(0) pour l'heure, NewTime(1) pour les min, NewTime(2)
pour les s

Pour les '/' des Label judicieusement disposés entre les Label et TextBox
précédents.

Pour l'affichage du fichier à modifier, le Label lblFil(1)

Pour les commandes Annuler et Valider les boutons Valid(1) et Valid(0)

Aski

///////////////////////////////////////////////////////////////
Option Explicit

Private Const OF_READWRITE = &H2
Private Const OF_Attr = OF_READWRITE

Private Type Struct
cBytes As Byte
fFixedDisk As Byte
nErrCode As Integer
Reserved1 As Integer
Reserved2 As Integer
szPathName(128) As Byte
End Type

Private Type fTime
LowTime As Long
HighTime As Long
End Type

Private Type sTime
iYear As Integer
iMonth As Integer
iDayOfWeek As Integer
iDay As Integer
iHour As Integer
iMin As Integer
iSec As Integer
iMs As Integer
End Type

Private Declare Function FileTimeToSystemTime Lib "kernel32" _
(FileTime As fTime, SysTime As sTime) As Long
Private Declare Function FileTimeToLocalFileTime Lib "kernel32" _
(FileTime As fTime, LocalFileTime As fTime) As Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" _
(SysTime As sTime, FileTime As fTime) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" _
(LocalFileTime As fTime, FileTime As fTime) As Long
Private Declare Function OpenFile Lib "kernel32" _
(ByVal FName As String, fStruct As Struct, _
ByVal Style As Long) As Long
Private Declare Function lclose Lib "kernel32" Alias "_lclose" _
(ByVal hFile As Long) As Long
Private Declare Function GetFileTime Lib "kernel32" _
(ByVal hFile As Long, CreationTime As fTime, _
AccessTime As fTime, WriteTime As fTime) As Long
Private Declare Function SetFileTime Lib "kernel32" _
(ByVal hFile As Long, CreationTime As fTime, _
AccessTime As fTime, WriteTime As fTime) As Long

Private hFile As Long
Private FName As String, sNewDate As String
Private flgAttr As Boolean
Private CreationTime As fTime, AccessTime As fTime
Private LocalTime As fTime, WriteTime As fTime
Private SysTime As sTime
Private Attr As VbFileAttribute

Private Sub Form_Load()
Dim TempFile As Long
Dim s As String
Dim fStruct As Struct
'Dim SecurityAttributes As SECURITY_ATTRIBUTES
Show
If Mode = 1 Then
FName = TruncRight(nodPath(iOrig))
Else
FName = nodPath(iOrig) & frmFiler.lvwF(iOrig).SelectedItem
End If
lblFile(1) = FName
Attr = GetAttr(FName)
If Attr Mod 2 > 0 Then
SetAttr FName, Attr - vbReadOnly: flgAttr = True
End If
'hFile = CreateFile(FName, FAccess, FShareMode, _
'SecurityAttributes, OPEN_EXISTING, FAttr, TempFile)
hFile = OpenFile(FName, fStruct, OF_Attr)
GetFileTime hFile, CreationTime, AccessTime, WriteTime
FileTimeToLocalFileTime WriteTime, LocalTime
FileTimeToSystemTime LocalTime, SysTime
With SysTime
OldDate(0) = .iDay: NewDate(0) = .iDay
OldDate(1) = .iMonth: NewDate(1) = .iMonth
OldDate(2) = .iYear: NewDate(2) = .iYear
OldTime(0) = Format(.iHour, "00")
NewTime(0) = Format(.iHour, "00")
OldTime(1) = Format(.iMin, "00")
NewTime(1) = Format(.iMin, "00")
OldTime(2) = Format(.iSec, "00")
NewTime(2) = Format(.iSec, "00")
End With
NewDate(0).SetFocus
End Sub

Private Sub NewDate_KeyPress(Ind As Integer, Key As Integer)
Select Case Key
Case 13
If Ind = 2 Then NewTime(0).SetFocus Else NewDate(Ind + 1).SetFocus
Case 27: If Ind = 0 Then Valid(1) = True Else NewDate(Ind - 1).SetFocus
Case Is < 32: Exit Sub
Case Is < 48, Is > 57: Key = 0: Son avDef
Case Else: If NewDate(Ind).SelStart = 0 Then NewDate(Ind) = ""
End Select
End Sub

Private Sub NewTime_KeyPress(Ind As Integer, Key As Integer)
Select Case Key
Case 13
If Ind = 2 Then Valid(0) = True Else NewTime(Ind + 1).SetFocus
Case 27: If Ind = 0 Then NewDate(2).SetFocus Else NewTime(Ind -
1).SetFocus
Case Is < 32: Exit Sub
Case Is < 48, Is > 57: Key = 0: Son avDef
Case Else: If NewTime(Ind).SelStart = 0 Then NewTime(Ind) = ""
End Select
End Sub

Private Sub NewDate_LostFocus(Ind As Integer)
Dim x As Integer, Ok As Boolean
x = CInt(NewDate(Ind)): Ok = DateOk
Select Case Ind
Case 0
If x < 1 Or x > 31 Then
NewDate(Ind) = "": NewDate(Ind).SetFocus: Son avCrit
Else: NewDate(Ind) = x
End If
Case 1
If x < 1 Or x > 12 Then
NewDate(Ind) = "": NewDate(Ind).SetFocus: Son avCrit
Else: NewDate(Ind) = x
End If
Case 2
If x < 1970 Then
NewDate(Ind) = "": NewDate(Ind).SetFocus: Son avCrit
ElseIf Ok Then NewDate(Ind) = x
Else: NewDate(0).SetFocus
End If
End Select
End Sub

Private Sub NewTime_LostFocus(Ind As Integer)
Dim x As Integer, Ok As Boolean
x = CInt(NewTime(Ind))
Select Case Ind
Case 0
If x < 0 Or x > 24 Then
NewTime(Ind) = "": NewTime(Ind).SetFocus: Son avCrit
Else: NewTime(Ind) = x
End If
Case 1, 2
If x < 0 Or x > 60 Then
NewTime(Ind) = "": NewTime(Ind).SetFocus: Son avCrit
Else: NewTime(Ind) = x
End If
End Select
NewTime(Ind) = Format(CInt(NewTime(Ind)), "00")
End Sub

Private Function DateOk() As Boolean
DateOk = False
sNewDate = NewDate(0) & "/" & NewDate(1) & "/" & NewDate(2)
If IsDate(sNewDate) Then
DateOk = True: Valid(0).Enabled = True
Else: Valid(0).Enabled = False
End If
End Function

Private Sub Valid_Click(Ind As Integer)
Dim s As String
If Ind = 0 Then
With SysTime
.iDay = CInt(NewDate(0)): .iMonth = CInt(NewDate(1))
.iYear = CInt(NewDate(2))
.iHour = CInt(NewTime(0)): .iMin = CInt(NewTime(1))
.iSec = CInt(NewTime(2))
End With
SystemTimeToFileTime SysTime, LocalTime
LocalFileTimeToFileTime LocalTime, WriteTime
SetFileTime hFile, CreationTime, AccessTime, WriteTime
End If
lclose hFile
s = FileDateTime(FName)
If Mode = 0 Then
With frmFiler.lvwF(iOrig)
.SelectedItem.SubItems(2) = s
.SelectedItem.SubItems(5) = Format(s, "yyyy mm dd hh nn ss")
.Sorted = True
End With
End If
If flgAttr Then SetAttr FName, Attr
Unload Me
End Sub
////////////////////////////////////////////////////////////////////////////
///////////////////////

"Gloops" a écrit dans le message de
news:422984ed$0$11707$
Ah pardon,

Donner une solution en réponse à une autre plutôt qu'à la question
posée, c'est un classement auquel je n'avais pas pensé.

Bon, je suis arrivé comme la cavalerie, désolé.
_____________________________________
Gloops a écrit, le 05/03/2005 11:03 :

> Bonjour,
>
> Une saisie avec masque de format ...
>
> Il me semble que le "Microsoft Masked Edit Control 6.0"
> (C:WINDOWSSYSTEM32MSMASK32.OCX) pourrait répondre à la question.
>
> Pour s'en servir, Projet / Composants (déclenché par Ctrl T sous VB6) et
> dans l'onglet Contrôles cocher la case correspondante.
> L'icône MaskEdBox, représentant deux dièses et un trait vertical,
> apparaît dans la boîte à outils.
> Le contrôle qu'elle permet de créer a une propriété format, qui remplace
> à la fois Format et InputMask d'Access.
>
> Attention aux problèmes de déploiement, ne pas hésiter à créer un
> programme d'installation. Peut-être est-ce ce point qui a fait hésiter
> les autres intervenants à parler de MaskEdBox, qui fait partie de la
> douzaine ou quinzaine de contrôles abordés en premier lorsqu'on apprend
> VB6.



> thierry a écrit, le 03/03/2005 17:03 :
>
>> tout est dans la question. je peux sans problème tester la validité
>> d'une date, mais mon utilisatrice préférée voudrait (et elle à bien
>> raison), une saisie du type Access, avec les / qui apparaissent, du
>> type jj/mm/aaaa. Une idée?
>
>



Avatar
Gloops
Excuse-moi, mais je ne vois pas bien ce que ceci a à voir avec le fait
que je n'ai pas vu que j'arrivais après la bagarre.

Tu répondrais à Thierry, à la rigueur ...
___________________________________
Aski a écrit, le 05/03/2005 12:18 :

Bonjour,

Tu trouveras ci-dessous le code que j'ai écrit pour modifier la date d'un
fichier.
Tu le colles sur une feuille sur laquelle tu crées :

Pour la date actuelle et l'heure actuelle :
- 3 'Label' : OldDate(0) pour le jour, OldDate(1) pour le mois, OldDate(2)
pour l'année
- 3 'Label' : OldTime(0) pour l'heure, OldTime(1) pour les min, OldTime(2)
pour les s
- 3 'TextBox' : NewDate(0) pour le jour, NewDate(1) pour le mois, NewDate(2)
pour l'année
- 3 'TextBox' : NewTime(0) pour l'heure, NewTime(1) pour les min, NewTime(2)
pour les s

Pour les '/' des Label judicieusement disposés entre les Label et TextBox


...
> "Gloops" a écrit dans le message de
> news:422984ed$0$11707$
>
>>Ah pardon,
>>
>>Donner une solution en réponse à une autre plutôt qu'à la question
>>posée, c'est un classement auquel je n'avais pas pensé.
>>
>>Bon, je suis arrivé comme la cavalerie, désolé.
Avatar
Aski
Salut Gloops,

Effectivement, il s'agit d'une réponse à celui qui a posé la question en
objet.
Comme je ne l'avais pas sur ton message ...

Aski

"Gloops" a écrit dans le message de
news:4229b49c$0$19325$
Excuse-moi, mais je ne vois pas bien ce que ceci a à voir avec le fait
que je n'ai pas vu que j'arrivais après la bagarre.

Tu répondrais à Thierry, à la rigueur ...
___________________________________
Aski a écrit, le 05/03/2005 12:18 :

> Bonjour,
>
> Tu trouveras ci-dessous le code que j'ai écrit pour modifier la date


d'un
> fichier.
> Tu le colles sur une feuille sur laquelle tu crées :
>
> Pour la date actuelle et l'heure actuelle :
> - 3 'Label' : OldDate(0) pour le jour, OldDate(1) pour le mois,


OldDate(2)
> pour l'année
> - 3 'Label' : OldTime(0) pour l'heure, OldTime(1) pour les min,


OldTime(2)
> pour les s
> - 3 'TextBox' : NewDate(0) pour le jour, NewDate(1) pour le mois,


NewDate(2)
> pour l'année
> - 3 'TextBox' : NewTime(0) pour l'heure, NewTime(1) pour les min,


NewTime(2)
> pour les s
>
> Pour les '/' des Label judicieusement disposés entre les Label et


TextBox
...
> "Gloops" a écrit dans le message de
> news:422984ed$0$11707$
>
>>Ah pardon,
>>
>>Donner une solution en réponse à une autre plutôt qu'à la question
>>posée, c'est un classement auquel je n'avais pas pensé.
>>
>>Bon, je suis arrivé comme la cavalerie, désolé.



1 2