2008-09-03 4 views
2

J'ai une forme vb6 avec un contrôle ocx dessus. Le contrôle ocx a un bouton sur lequel je veux appuyer à partir du code. Comment puis-je faire cela?Comment puis-je cliquer sur un bouton dans un formulaire vb6?

J'ai:

Dim b As CommandButton 
Set b = ocx.GetButton("btnPrint") 
SendMessage ocx.hwnd, WM_COMMAND, GetWindowLong(b.hwnd, GWL_ID), b.hwnd 

mais il ne semble pas fonctionner.

Répondre

3

Je crois que ce qui suit fonctionnera:

Dim b As CommandButton 
Set b = ocx.GetButton("btnPrint") 
b = True 

CommandButton s ont en fait deux fonctions. L'un est le bouton de clic habituel et l'autre est un bouton à bascule qui agit comme un CheckBox. La propriété par défaut du CommandButton est en fait la propriété Value qui indique si un bouton est basculé. En définissant la propriété, l'événement Click est généré. Ceci est fait même si le bouton n'est pas appelé ToggleButton et ne change donc pas son état.

1

Si vous avez accès au code OCX, vous pouvez exposer le gestionnaire d'événements associé et l'appeler directement.
Je ne sais pas si un équivalent de la méthode Click() Button .Net existait à une époque plus VB6

0

Avez-vous accès au code OCX? Vous ne devriez pas vraiment invoquer directement le clic d'un bouton. Vous devez refactoriser le code de sorte que le code de clic du bouton OCX appelle une fonction, par ex.

CMyWindow::OnLButtonDown() 
{ 
    this->FooBar(); 
} 

Ensuite, à partir de votre application VB6, appelez directement la méthode FooBar. Si vous ne pouvez pas appeler directement les fonctions de VB6, vous pouvez envelopper la méthode FooBar() avec une fonction de message Windows, par ex.

#define WM_FOOBAR WM_APP + 1 

Utilisez ensuite SendMessage dans le VB6, comme SendMessage(WM_FOOBAR, ...)

0

Ce:

Dim b As CommandButton 
Set b = ocx.GetButton("btnPrint") 
b = True 

fonctionne. Complètement non-intuitif. Je m'attendrais à ce qu'il lance une erreur car un bool n'est pas un CommandButton valide, mais c'est à cause de la propriété par défaut.

WM_LBUTTONDOWN serait un clic de souris, ce que je veux est un clic sur un bouton (bouton comme dans un bouton hwnd, pas un bouton de la souris).

Je n'ai pas accès à la source de l'ocx (c'est un contrôle tiers). Si je le faisais, j'exposerais la fonction que je voulais appeler (l'auteur original de l'ocx aurait dû l'exposer).

0

Pour vous keypress pouvez également utiliser sendmessage envoyer les deux keydown et keyup:

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long 
Const WM_KEYDOWN As Integer = &H100 
Const WM_KEYUP As Integer = &H101 
Const VK_SPACE = &H20 

Private Sub cmdCommand1_Click() 
    Dim b As CommandButton 
    Set b = ocx.GetButton("btnPrint") 
    SendMessage b.hWnd, WM_KEYDOWN, VK_SPACE, 0& 
    SendMessage b.hWnd, WM_KEYUP, VK_SPACE, 0& 
End Sub 
Questions connexes