Activex ( ocx ) zone de saisie numérique + test de l'ocx

Description

C'est mon 1er ocx, en gros Cet ActiveX est basé sur une zone de saisie qui ne doit
accepter que des chiffres et qui doit comporter des propriété définissant les limites supérieur et inférieure autorisées pour la valeur à saisir.

Il interdit la virgule et le point.

Comment please!!!

Source / Exemple :


Option Explicit
'Valeur par défaut
Const cStandardValeur = 0
Const cStandardMin = 0
Const cStandardMax = 100
' Constantes d'erreur
Const CPasUnNombre = 1
Const cHorsLimites = 2

'variables des propriétés
Private mdblValeur As Double
Private mdblMin As Double
Private mdblMax As Double

' Evénements
Public Event ErreurValeur(fvaleur As Integer)
Public Event ErreurChiffre(kascii As Integer)

Private Sub txtnombre_GotFocus()
txtnombre.SelStart = Len(txtnombre.Text) + 1
End Sub

'positionne les nouveau controles à leur valeur par défaut.
Private Sub UserControl_InitProperties()
mdblValeur = cStandardValeur
mdblMin = cStandardMin
mdblMax = cStandardMax
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
'lit les valeurs des propriétés
mdblMin = PropBag.ReadProperty("Minimum", cStandardMin)
mdblMax = PropBag.ReadProperty("Maximum", cStandardMax)
mdblValeur = PropBag.ReadProperty("Valeur", cStandardValeur)
End Sub

Private Sub UserControl_Show()
'afficher la valeur continue ds la prop Valeur pour k'elle n'est pas nulle.
If mdblValeur = 0 Then
txtnombre.Text = ""
Else
txtnombre.Text = mdblValeur
End If
End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
'enregistrer les valeurs des propriétés
PropBag.WriteProperty "Minimum", mdblMin, cStandardMin
PropBag.WriteProperty "Maximum", mdblMax, cStandardMax
PropBag.WriteProperty "Valeur", mdblValeur, cStandardValeur
End Sub

Private Sub UserControl_Resize()
'ne pas aller au-dessous des dimensions minimales
If Height < 420 Or Width < 510 Then
  Height = 420
  Width = 510
End If
'bordure autour de la zone de texte
txtnombre.Move 30, 30, Width - 60, Height - 60
End Sub

'Le controle "change" controle si une valeur est vide
Private Sub txtnombre_Change()
  Dim strValeur As String
  
  'si elle contient - ou rien, la propriété de mdblValeur = 0
  If txtnombre.Text = "-" Or txtnombre.Text = "" Then
    mdblValeur = 0
    Exit Sub
  End If
  
  strValeur = VirguleParPoint(txtnombre.Text)
  
  If Not IsNumeric(strValeur) Then
    RaiseEvent ErreurValeur(CPasUnNombre)
    txtnombre.Text = mdblValeur
  ElseIf Val(strValeur) < mdblMin Then
    RaiseEvent ErreurValeur(cHorsLimites)
    txtnombre.Text = mdblMin
  ElseIf Val(strValeur) > mdblMax Then
    RaiseEvent ErreurValeur(cHorsLimites)
    txtnombre.Text = mdblMax
  Else
    mdblValeur = Val(strValeur)
  End If
End Sub

'autorise la touche Suppr pour effacer un nbre saisi.
Private Sub txtnombre_KeyDown(KeyCode As Integer, Shift As Integer)
  If KeyCode = vbKeyDelete Then
    KeyCode = 0
  End If
End Sub

'les var blnVirgule & blnMoins (boolean (vrai ou faux)) vérifient si le nombre saisi
'ne contient qu'une virgule et un signe moins en 1ere position.

Private Sub txtnombre_KeyPress(KeyAscii As Integer)
  Static blnVirgule As Boolean
  Static blnMoins As Boolean
  
  Select Case KeyAscii
  Case vbKey0 To vbKey9
  Case vbKeyRight, vbKeyLeft, vbKeyReturn
  Case Asc("-")
    If blnMoins Or txtnombre.SelStart <> 0 Then
      RaiseEvent ErreurChiffre(KeyAscii)
      KeyAscii = 0
    Else
      blnMoins = True
    End If
  Case Asc(",")
    If blnVirgule Then
      RaiseEvent ErreurChiffre(KeyAscii)
      KeyAscii = 0
    Else
      blnVirgule = True
    End If
  Case vbKeyBack
    If Right$(txtnombre.Text, 1) = "," Then
      blnVirgule = False
    ElseIf Right$(txtnombre.Text, 1) = "-" Then
      blnMoins = False
    End If
  Case Else
    RaiseEvent ErreurChiffre(KeyAscii)
    KeyAscii = 0
  End Select
End Sub

'L'échange de ces caractères est réalisé par la procédure VirguleParPoint,
'grace a la fonction replace
Private Function VirguleParPoint(strX As String) As String
VirguleParPoint = Replace(strX, ",", ".")
End Function

Public Property Get Valeur() As Double
Valeur = mdblValeur
End Property

Public Property Let Valeur(ByVal dblNouvelleValeur As Double)
If dblNouvelleValeur < mdblMin Then
mdblValeur = mdblMin
ElseIf dblNouvelleValeur > mdblMax Then
mdblValeur = mdblMax
Else
mdblValeur = dblNouvelleValeur
End If
txtnombre.Text = mdblValeur
PropertyChanged "valeur"
End Property

Public Property Get minimum() As Double
minimum = mdblMin
End Property

Public Property Let minimum(ByVal dblnouveauMin As Double)
If dblnouveauMin > mdblMax Then
MsgBox "Minimum supérieur au maximum!"
Else
mdblMin = dblnouveauMin
PropertyChanged "Minimum"
End If
End Property

Public Property Get maximum() As Double
maximum = mdblMax
End Property

Public Property Let maximum(ByVal dblnouveauMax As Double)
If dblnouveauMax < mdblMin Then
MsgBox "Maximum inférieur au minimum!"
Else
mdblMax = dblnouveauMax
PropertyChanged "Maximum"
End If
End Property

Conclusion :


Vous pouver telecharger le zip dans lequel y a les sources de l'ocx, et un test pour celui ci + l'activeX compilé.

sinon v'la mon site web http://www.steven007.fr.st

(pour max12, je répond bientot a ton message concernant le jeux de carte...)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.