DÉCIMAL TO HEXDECIMAL

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 24 janv. 2012 à 11:18
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 24 janv. 2012 à 19:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/54014-decimal-to-hexdecimal

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 janv. 2012 à 19:16
Bonjour,

Normal que ton code arrive à plus, tu n'a pas déclaré tes variables, du coup, elles sont Variant, donc pour plus, tu passes en Double, tu perds pas mal de précision par contre.

Mets TOUJOURS Option Explicit en haut de tout tes modules de code en VB6 et VBA.
loulou27200 Messages postés 3 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 2 août 2011
24 janv. 2012 à 15:00
Effectivement ton code est plus court
Mais je débute dans la programmation que je connais pas toutes les fonctions, ton code bloc à 2147483648 alors que le mien semble pouvoir dépasser cette valeur.
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2012 à 13:33
Presse papier toujours une faille, mais code plus court :

Option Explicit

Private Const ES_NUMBER As Long = &H2000&
Private Const GWL_STYLE As Long = -16

Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Private Sub Form_Load()
SetWindowLong Text1.hwnd, GWL_STYLE, GetWindowLong(Text1.hwnd, GWL_STYLE) Or ES_NUMBER
End Sub

Private Sub Text1_Change()
Label1.Caption = DecToHexa2(Text1.Text)
End Sub

Public Function DecToHexa2(ByRef StringNb As String) As String
If Val(StringNb) Then
DecToHexa2 = Hex$(StringNb)
Else
DecToHexa2 = "0"
End If
End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2012 à 13:10
oui, mais on ne controle pas la saisie a la volée, c'est souvent vecteur d'inconfort...

rien n'empeche de saisir des caractères non autorisés via le presse papier.

voir le flag ES_NUMBER :
http://www.codyx.org/snippet_textbox-numerique-seulement_53.aspx
loulou27200 Messages postés 3 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 2 août 2011
24 janv. 2012 à 12:09
Pourquoi ce n'est pas bon! le control text est destiné à recevoir des chiffres et non du text, je prévois que l'utilisateur se trompe!!
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
24 janv. 2012 à 11:18
Es-tu faché avec la fonction Hex$ ?

Pas bon, ce genre de choses :
Private Sub Text1_KeyPress(KeyAscii As Integer)
If Not ((KeyAscii >= 48 And KeyAscii <= 57) Or KeyAscii = 8 Or KeyAscii = 44 Or KeyAscii = 46) Then
KeyAscii = 0 'on annule la pression sur la touche
End If
End Sub

pas hermetique aux fautes de saisie (presse papier, etc)
Rejoignez-nous