Problème CursorPos dans TextBox en VBA [Résolu]

cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 4 déc. 2006 à 11:55 - Dernière réponse : cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention
- 5 déc. 2006 à 15:40
Bonjour Bonjour...

C'est plutôt une question VBA que VB...

J'ai un problème pour transposer cette propriété de VB 
   
Call SendMessage(Text1.hwnd, EM_GETSEL, 0, cursorPos)

dans VBA .J'ai le message d'erreur suivant : "membre de méthode ou de données introuvable" sur hwnd.
J'ai déclaré auparavant :

Private Declare Function SendMessage Lib "user32" _
     Alias "SendMessageA" _
    (ByVal hwnd As Long, _
     ByVal wMsg As Long, _
     ByVal wParam As Long, _
     lParam As Any) As Long

Private Const EM_GETSEL = &HB0
Private Const EM_SETSEL = &HB1

puis dans Private Sub Text1_KeyPress( ByVal KeyAscii As MSForms.ReturnInteger)
   Dim cursorPos As Long

Donc si quelqu'un a une petite idée, merci d'avance.
Je rapelle que c'est pour du VBA

 Bidouille & Cie
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 4 déc. 2006 à 18:48
3
Merci
Je t'ai simplifié le code pour trouver le hwnd (merci pour le bout de code ^^)  :

Option Explicit

Private Declare Function FindWindowA Lib "user32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetFocus Lib "user32" () As Long

Private Function GetControl_hWnd(ByVal oCtl As Control) As Long
oCtl.SetFocus
GetControl_hWnd =  GetFocus()
End Function

Private Sub UserForm_Initialize()
    Dim hwnd    As Long
    Dim hwnd2   As Long

hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", _
    "X", "D") & "Frame", Me.Caption) ' handle
UserForm
    
hwnd2 = GetControl_hWnd(TextBox1) '
handle Control (ici TextBox1)
' Pour avoir le
Hnadle d'un autre control, mets son nom en parenthèse

MsgBox "Handle UserForm :
" & hwnd & vbCrLf & _
        "Handle TextBox1 : " & hwnd2
End Sub


~ <small> [code.aspx?ID=39466 Mortalino] </small>
~

Et sinon, qu'est ce que tu cherches à faire avec SendMessage ?
Tu veux envoyer quoi dans cette TextBox ?

@++

<hr size ="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--

Merci mortalino 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de mortalino
Meilleure réponse
cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 5 déc. 2006 à 15:40
3
Merci
Mouais....,
bon bah honte à moi...

en cherchant un peu plus, j'ai fini par trouver ce que je voulais ; les contrôles DTPiker...

Merci à toi Mortalino pour ton aide...

 Bidouille & Cie

Merci cs_drakkard 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de cs_drakkard
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 4 déc. 2006 à 11:59
0
Merci
salut la propriété hwnd n'existe pas en VBA, si c'est un userform voir le snippet de mortalino sur codyx > handle d'un userform en VBA.

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
drikce06 2247 Messages postés lundi 29 mai 2006Date d'inscription 29 mai 2008 Dernière intervention - 4 déc. 2006 à 12:02
0
Merci
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

· hWnd
Identifies the window whose window procedure will receive the message. If this parameter is HWND_BROADCAST, the message is sent to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows; but the message is not sent to child windows.


· Msg
Specifies the message to be sent.


· wParam
Specifies additional message-specific information.


· lParam
Specifies additional message-specific information.

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
Commenter la réponse de drikce06
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 4 déc. 2006 à 18:14
0
Merci
Salut,

perso, je ne sais pas comment trouver le hwnd d'un contrôle.
L'api FindControl n'existe pas

Voit si tu peux trouver la fonction, et après avoir déterminé le hWnd de ton textbox, tu n'auras aucun souci.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 4 déc. 2006 à 18:28
0
Merci
Salut à tous
merci pour vos réponse...
Mortalino j'ai trouvé ça sur le Web, tu en penses quoi ?
Moi je suis en train de voir si je peux l'adapter à mon cas.

Option Explicit
Private Declare Function GetFocus Lib "user32" () As Long

Private Declare Function FindWindow _
           Lib "user32" _
           Alias "FindWindowA" _
         ( _
           ByVal lpClassName As String, _
           ByVal lpWindowName As String _
         ) _
           As Long

Private Declare Function GetClassName _
                         Lib "user32" Alias "GetClassNameA" _
                         (ByVal hwnd As Long, _
                         ByVal lpClassName As String, _
                         ByVal nMaxCount As Long) _
                         As Long

Property Get hwnd() As Long
 'custom hWnd property for the Userform class
  hwnd = FindWindow _
        ( _
          lpClassName:=IIf(Val(Application.Version) > 8, _
                                    "ThunderDFrame", _
                                    "ThunderXFrame"), _
          lpWindowName:=Me.Caption _
        )
End Property

Private Function GetTextbox_hWnd() As Long
TextBox1.SetFocus
GetTextbox_hWnd = GetFocus()
End Function

Private Sub CommandButton1_Click()
TextBox1.Value = GetTextbox_hWnd
MsgBox Me. hwnd
End Sub

Private Sub CommandButton2_Click()
Dim buffer As String
Let buffer = String(256, CStr(0))
Call GetClassName(GetTextbox_hWnd(), buffer, Len(buffer))
MsgBox buffer
End Sub

 Bidouille & Cie
Commenter la réponse de cs_drakkard
cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 4 déc. 2006 à 19:31
0
Merci
Merci Mortalino, je vais tester.

Bah..., disons que je voulais contrôler la frappe clavier pour empêcher que l'utilisateur ne tape n'importe quoi...
Je ne sais pas si c'est vraiment la bonne méthode, peut-être la plus rapide....

 Bidouille & Cie
Commenter la réponse de cs_drakkard
mortalino 6812 Messages postés vendredi 16 décembre 2005Date d'inscription 21 décembre 2011 Dernière intervention - 5 déc. 2006 à 06:58
0
Merci
Tu peux directement contrôler les touches depuis l'évènement KeyPress, mais ça dépend de ce que tu veux.
Qu'est ce que tu veux faire exactement ?
Que veux tu empêcher sur la frappe de l'utilisateur ?

Pour ton cas SendMessage n'est pas approprié, il sert soit à envoyer du texte dans un contrôle, soit il sert à sélectionner un item d'une ListBox selon ce qui est saisie quelque part.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
Commenter la réponse de mortalino
cs_drakkard 100 Messages postés lundi 20 juin 2005Date d'inscription 20 janvier 2009 Dernière intervention - 5 déc. 2006 à 14:30
0
Merci
Salut Mortalino,
merci encore pour ton aide.

Ce que je cherche à faire, c'est un texte box ( qui doit contenir une date au format dd/mm/yyyy )
 et donc je veux que lors de la frappe soit vérifié le format.
Que l'utilisateur ne puisse pas mettre un truc du genre 424/456/72...
J'avoue que je le fais sous VB avec le send message, mais si tu me dis que c'est pas la meilleure méthode ;
je suis preneur pour meilleure idée...

Merci

 Bidouille & Cie
Commenter la réponse de cs_drakkard

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.