Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 10 juil. 2010 à 13:45
J'ai réglé le problème mais lors du lost focus. Ce n'est pas esthétique mais si y a mieux je dirai pas non.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 10 juil. 2010 à 13:12
tu peux faire le changent de caractere a a la volee, lors de la pression sur les touches
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 10 juil. 2010 à 12:18
Voilà, il ne reste qu'un bogues et une option à régler.
'Le ProperCase à des erreurs lors de l'édition au milieu du mot.
'Ne mets pas les formats de date et heure en dur, utilises les paramètres régionaux du poste.
Quelqu'un à une solution pour résoudre le problème du ProperCase svp ?
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 9 juil. 2010 à 20:46
Punaise... dire que c'était si simple que ça -_-"
Source mise à jour...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 juil. 2010 à 20:38
une fois le panneau 'Avances' deplie, mettre
(Par défaut)
dams l'ID de la procedure
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 9 juil. 2010 à 17:41
Dsl pour le nom Renfield :D
Outils > Attributs de procedure
J'ai cocher une par une et sélectionné Text, décoché une par une, enfin, je penses n'avoir pas oublié un point... mais en vain toujours pareil.
Quand je fais effectivement
MsgBox TextBox
il me fait une erreur 438
Mais quand je met
MsgBox TextBox.Text
là il fonctionne
J'ai téléchargé aussi tes deux exemples qui parlent de texbox et toi non plus tu n'a pas mis ces options en place.
raffika
Messages postés269Date d'inscriptiondimanche 31 mai 2009StatutMembreDernière intervention12 mars 2011 9 juil. 2010 à 17:10
Salut, j'ai pas pu ouvrir
ta source car j'ai vb2008 mais je crois avoir saisi le principe.
Pourquoi utiliser les api ?
En vb.net on peut
tout à fait faire ce genre de programme
sans utiliser les apis et avec la fonction copier-coller aussi.
@+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 juil. 2010 à 14:29
Rendfield => 'Renfield', merci, un seul 'd'...
Pas de copier-coller dans le 'NeContientQue'
- Exprès pour ne pas mettre de caractères différents que ceux imposés
Discutable... si le texte en cours de collage est valide, autant permettre de le coller...
je ne sais plus si le copier fonctionne (il devrait)
pour la propriété par default, il suffit d'aller dans le menu
Outils > Attributs de procedure
pour les regionnal settings, voir l'API GetLocaleInfo et sa doc.
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 9 juil. 2010 à 14:24
Rendfield,
On peut coller du texte dans le textbox numerique
- c'est réglé
Pas de copier-coller dans le 'NeContientQue'
- Exprès pour ne pas mettre de caractères différents que ceux imposés
Dans le propercase, j'ai presse entree => 70 - Permission refusee
- Bizare ça fonctionne chez moi tu peux vérifier encore stp ?
La propriete Text de tes controles n'est pas celle par defaut
- Je sais pas le faire
Le curseur de saisie fais n'importe quoi pour le propercase quand on presse retour arriere au milieu du mot
- Ben c'était pour ça que j'ai posté ce sujet
Pourquoi mettre le code avec SetWindowLong dans un Timer ? Utilises le Property Let
- J'ai géré la majorité je penses que le problème est résolu
Ne mets pas les formats de date et heure en dur, utilises les parametres regionnaux du poste
- Je sais pas le faire
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 9 juil. 2010 à 13:00
sorry, voir correction ci-dessous
Private Sub ManageTextFormat()
Dim lTextBoxStyle As Long
lTextBoxStyle = GetWindowLong(Txt_TextBox.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
Case meTextProperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Txt_TextBox.Text = LCase(Txt_TextBox.Text)
meStatus = meTextLowerCase
Case meTextLowerCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Txt_TextBox.Text = UCase(Txt_TextBox.Text)
meStatus = meTextUpperCase
Case meTextUpperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
End Select
End Sub
précipitation je dois aller m'alimenter, bon ap à vous.
A+
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 9 juil. 2010 à 12:56
c'est moi qui vous remercie à tous les deux.
Finalement dans mon composant, j'ai ramené meTextNormal, meTextUpperCase dans le meme "Case". La première fois ce sera toujours Propercase en premier et après on boucle sur 3 possibilité. Le mode ProperCase étant en fait le mode Normal. J'ai volontaire pas voulu gérer l'évènement Change pour le cas ProperCase parce que pas d'intérêt pour moi, sinon 2 actions apparemment identique pour sortir du mode Normal.
Private Sub ManageTextFormat()
Dim lTextBoxStyle As Long
lTextBoxStyle = GetWindowLong(Txt_TextBox.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal, meTextUpperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
Case meTextProperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Txt_TextBox.Text = LCase(Txt_TextBox.Text)
meStatus = meTextLowerCase
Case meTextLowerCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Txt_TextBox.Text = UCase(Txt_TextBox.Text)
meStatus = meTextUpperCase
End Select
End Sub
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 9 juil. 2010 à 12:39
Merci asimengo et à toi aussi Rendfield.
Je suis encore dessus et grâce à votre aide et à vos bouts de codes on aura peut-être quelque chose de "beau" ^^
cs_asimengo
Messages postés280Date d'inscriptionjeudi 24 mars 2005StatutMembreDernière intervention18 mars 2009 9 juil. 2010 à 12:21
Super,Sinitrus je m'en suis servi pour rajouter la fonction "Shift+F3" de MS Word dans mon composant TextBox. Avec la particularité que le mode de saisie change aussi en conséquence.
Ci-dessous un exemple de code:
Option Explicit
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Const ES_NAROW As Long = &H3& 'Normal
Private Const ES_UPPERCASE As Long = &H8& 'Majuscule
Private Const ES_LOWERCASE As Long = &H10& 'Minuscule
'Private Const ES_NUMERIC As Long = &H2000& 'Numerique
Private Const GWL_STYLE As Long = -16
Private meStatus As EnumTextStatus
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim lTextBoxStyle As Long
If KeyCode = vbKeyF3 And Shift Then
lTextBoxStyle = GetWindowLong(Text1.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Text1.Text = StrConv(Text1.Text, vbProperCase)
meStatus = meTextProperCase
Label1.Caption = "ProperCase"
Case meTextProperCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Text1.Text = LCase(Text1.Text)
meStatus = meTextLowerCase
Label1.Caption = "LowerCase"
Case meTextLowerCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Text1.Text = UCase(Text1.Text)
meStatus = meTextUpperCase
Label1.Caption = "UpperCase"
Case meTextUpperCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
meStatus = meTextNormal
Label1.Caption = "Normal"
End Select
End If
End Sub
En bref, à chaque action "Shift+F3" (en réalité "F12" dans mon composant) je lit le style courant, et je mets à jour les seuls bits activant/désactivant Miniscule et Majuscule en fonction des cas. L'algo est intéressant peut servir pour extrapolation du principe ...
A+
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 9 juil. 2010 à 07:13
ne mets pas ces formats en dur, utilises les parametres regionnaux du poste.
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 8 juil. 2010 à 22:32
Merci Renfield, je m'y met dès demain matin ^^
Je compte aussi mettre un MaskEdit dedans.
J'ai réussi les :
DateHeure au format dd/mm/yyyy hh:nn:ss
DateComple au format dddd, dd mmmm yyyy
DateSimple au format dd/mm/yyyy
HeureComple au format hh:nn:ss
HeureSimple au format hh:nn
Il y a encore du travail à faire en tout cas...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 8 juil. 2010 à 21:08
Quelques tests rapides:
on peut coller du texte dans le textbox numerique
Le curseur de saisie fais n'importe quoi pour le propercase quand on presse retour arriere
dans le propercase, j'ai presse entree => 70 - Permission refusee
pas de copier-coller dans le 'NeContientQue'
La propriete Text de tes controles n'est pas celle par defaut
Pourquoi mettre le code avec SetWindowLong dans un Timer ?
Utilises le Property Let
Sinsitrus
Messages postés849Date d'inscriptionsamedi 11 juin 2005StatutMembreDernière intervention21 août 2015 8 juil. 2010 à 17:39
10 juil. 2010 à 13:45
10 juil. 2010 à 13:12
10 juil. 2010 à 12:18
'Le ProperCase à des erreurs lors de l'édition au milieu du mot.
'Ne mets pas les formats de date et heure en dur, utilises les paramètres régionaux du poste.
Quelqu'un à une solution pour résoudre le problème du ProperCase svp ?
9 juil. 2010 à 20:46
Source mise à jour...
9 juil. 2010 à 20:38
(Par défaut)
dams l'ID de la procedure
9 juil. 2010 à 17:41
Outils > Attributs de procedure
J'ai cocher une par une et sélectionné Text, décoché une par une, enfin, je penses n'avoir pas oublié un point... mais en vain toujours pareil.
Quand je fais effectivement
MsgBox TextBox
il me fait une erreur 438
Mais quand je met
MsgBox TextBox.Text
là il fonctionne
J'ai téléchargé aussi tes deux exemples qui parlent de texbox et toi non plus tu n'a pas mis ces options en place.
9 juil. 2010 à 17:10
ta source car j'ai vb2008 mais je crois avoir saisi le principe.
Pourquoi utiliser les api ?
En vb.net on peut
tout à fait faire ce genre de programme
sans utiliser les apis et avec la fonction copier-coller aussi.
@+
9 juil. 2010 à 14:29
Pas de copier-coller dans le 'NeContientQue'
- Exprès pour ne pas mettre de caractères différents que ceux imposés
Discutable... si le texte en cours de collage est valide, autant permettre de le coller...
je ne sais plus si le copier fonctionne (il devrait)
pour la propriété par default, il suffit d'aller dans le menu
Outils > Attributs de procedure
pour les regionnal settings, voir l'API GetLocaleInfo et sa doc.
9 juil. 2010 à 14:24
On peut coller du texte dans le textbox numerique
- c'est réglé
Pas de copier-coller dans le 'NeContientQue'
- Exprès pour ne pas mettre de caractères différents que ceux imposés
Dans le propercase, j'ai presse entree => 70 - Permission refusee
- Bizare ça fonctionne chez moi tu peux vérifier encore stp ?
La propriete Text de tes controles n'est pas celle par defaut
- Je sais pas le faire
Le curseur de saisie fais n'importe quoi pour le propercase quand on presse retour arriere au milieu du mot
- Ben c'était pour ça que j'ai posté ce sujet
Pourquoi mettre le code avec SetWindowLong dans un Timer ? Utilises le Property Let
- J'ai géré la majorité je penses que le problème est résolu
Ne mets pas les formats de date et heure en dur, utilises les parametres regionnaux du poste
- Je sais pas le faire
9 juil. 2010 à 13:00
Private Sub ManageTextFormat()
Dim lTextBoxStyle As Long
lTextBoxStyle = GetWindowLong(Txt_TextBox.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
Case meTextProperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Txt_TextBox.Text = LCase(Txt_TextBox.Text)
meStatus = meTextLowerCase
Case meTextLowerCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Txt_TextBox.Text = UCase(Txt_TextBox.Text)
meStatus = meTextUpperCase
Case meTextUpperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
End Select
End Sub
précipitation je dois aller m'alimenter, bon ap à vous.
A+
9 juil. 2010 à 12:56
Finalement dans mon composant, j'ai ramené meTextNormal, meTextUpperCase dans le meme "Case". La première fois ce sera toujours Propercase en premier et après on boucle sur 3 possibilité. Le mode ProperCase étant en fait le mode Normal. J'ai volontaire pas voulu gérer l'évènement Change pour le cas ProperCase parce que pas d'intérêt pour moi, sinon 2 actions apparemment identique pour sortir du mode Normal.
Private Sub ManageTextFormat()
Dim lTextBoxStyle As Long
lTextBoxStyle = GetWindowLong(Txt_TextBox.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal, meTextUpperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Txt_TextBox.Text = StrConv(Txt_TextBox.Text, vbProperCase)
meStatus = meTextProperCase
Case meTextProperCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Txt_TextBox.Text = LCase(Txt_TextBox.Text)
meStatus = meTextLowerCase
Case meTextLowerCase:
SetWindowLong Txt_TextBox.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Txt_TextBox.Text = UCase(Txt_TextBox.Text)
meStatus = meTextUpperCase
End Select
End Sub
9 juil. 2010 à 12:39
Je suis encore dessus et grâce à votre aide et à vos bouts de codes on aura peut-être quelque chose de "beau" ^^
9 juil. 2010 à 12:21
Ci-dessous un exemple de code:
Option Explicit
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Enum EnumTextStatus
meTextNormal = 0
meTextProperCase = 1
meTextLowerCase = 2
meTextUpperCase = 3
End Enum
Private Const ES_NAROW As Long = &H3& 'Normal
Private Const ES_UPPERCASE As Long = &H8& 'Majuscule
Private Const ES_LOWERCASE As Long = &H10& 'Minuscule
'Private Const ES_NUMERIC As Long = &H2000& 'Numerique
Private Const GWL_STYLE As Long = -16
Private meStatus As EnumTextStatus
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
Dim lTextBoxStyle As Long
If KeyCode = vbKeyF3 And Shift Then
lTextBoxStyle = GetWindowLong(Text1.hwnd, GWL_STYLE)
Select Case meStatus
Case meTextNormal:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
Text1.Text = StrConv(Text1.Text, vbProperCase)
meStatus = meTextProperCase
Label1.Caption = "ProperCase"
Case meTextProperCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_LOWERCASE) And Not (ES_UPPERCASE Or ES_NAROW)
Text1.Text = LCase(Text1.Text)
meStatus = meTextLowerCase
Label1.Caption = "LowerCase"
Case meTextLowerCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_UPPERCASE) And Not (ES_LOWERCASE Or ES_NAROW)
Text1.Text = UCase(Text1.Text)
meStatus = meTextUpperCase
Label1.Caption = "UpperCase"
Case meTextUpperCase:
SetWindowLong Text1.hwnd, GWL_STYLE, (lTextBoxStyle Or ES_NAROW) And Not (ES_UPPERCASE Or ES_LOWERCASE)
meStatus = meTextNormal
Label1.Caption = "Normal"
End Select
End If
End Sub
En bref, à chaque action "Shift+F3" (en réalité "F12" dans mon composant) je lit le style courant, et je mets à jour les seuls bits activant/désactivant Miniscule et Majuscule en fonction des cas. L'algo est intéressant peut servir pour extrapolation du principe ...
A+
9 juil. 2010 à 07:13
8 juil. 2010 à 22:32
Je compte aussi mettre un MaskEdit dedans.
J'ai réussi les :
DateHeure au format dd/mm/yyyy hh:nn:ss
DateComple au format dddd, dd mmmm yyyy
DateSimple au format dd/mm/yyyy
HeureComple au format hh:nn:ss
HeureSimple au format hh:nn
Il y a encore du travail à faire en tout cas...
8 juil. 2010 à 21:08
on peut coller du texte dans le textbox numerique
Le curseur de saisie fais n'importe quoi pour le propercase quand on presse retour arriere
dans le propercase, j'ai presse entree => 70 - Permission refusee
pas de copier-coller dans le 'NeContientQue'
La propriete Text de tes controles n'est pas celle par defaut
Pourquoi mettre le code avec SetWindowLong dans un Timer ?
Utilises le Property Let
8 juil. 2010 à 17:39